forked from qt-creator/qt-creator
QmlDesigner: Fix camera frustum visualization in 3d edit view
Now camera frustum visualization should always appear correctly in 3D edit view, as the QSSGRenderCamera node is created at frustum geometry update time if it's missing. Active scene change also triggers geometry update for camera gizmos. Change-Id: If24e97490b2ff6607049b5288c6e167aa29a86b2 Fixes: QDS-1472 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -34,6 +34,11 @@ IconGizmo {
|
|||||||
property alias geometryName: cameraGeometry.name // Name must be unique for each geometry
|
property alias geometryName: cameraGeometry.name // Name must be unique for each geometry
|
||||||
property alias viewPortRect: cameraGeometry.viewPortRect
|
property alias viewPortRect: cameraGeometry.viewPortRect
|
||||||
|
|
||||||
|
onActiveSceneChanged: {
|
||||||
|
if (activeScene == scene)
|
||||||
|
cameraGeometry.update();
|
||||||
|
}
|
||||||
|
|
||||||
Model {
|
Model {
|
||||||
id: gizmoModel
|
id: gizmoModel
|
||||||
geometry: cameraGeometry
|
geometry: cameraGeometry
|
||||||
|
@@ -113,6 +113,11 @@ QSSGRenderGraphObject *CameraGeometry::updateSpatialNode(QSSGRenderGraphObject *
|
|||||||
if (!m_camera)
|
if (!m_camera)
|
||||||
return node;
|
return node;
|
||||||
|
|
||||||
|
if (!m_camera->cameraNode()) {
|
||||||
|
// Force cameraNode creation by doing a dummy mapping call
|
||||||
|
m_camera->mapToViewport({}, m_viewPortRect.width(), m_viewPortRect.height());
|
||||||
|
}
|
||||||
|
|
||||||
node = QQuick3DGeometry::updateSpatialNode(node);
|
node = QQuick3DGeometry::updateSpatialNode(node);
|
||||||
QSSGRenderGeometry *geometry = static_cast<QSSGRenderGeometry *>(node);
|
QSSGRenderGeometry *geometry = static_cast<QSSGRenderGeometry *>(node);
|
||||||
|
|
||||||
@@ -154,10 +159,10 @@ void CameraGeometry::fillVertexData(QByteArray &vertexData, QByteArray &indexDat
|
|||||||
if (qobject_cast<QQuick3DOrthographicCamera *>(m_camera)) {
|
if (qobject_cast<QQuick3DOrthographicCamera *>(m_camera)) {
|
||||||
// For some reason ortho cameras show double what projection suggests,
|
// For some reason ortho cameras show double what projection suggests,
|
||||||
// so give them doubled viewport to match visualization to actual camera view
|
// so give them doubled viewport to match visualization to actual camera view
|
||||||
camera->calculateProjection(QRectF(0, 0, m_viewPortRect.width() * 2.0,
|
camera->calculateGlobalVariables(QRectF(0, 0, m_viewPortRect.width() * 2.0,
|
||||||
m_viewPortRect.height() * 2.0));
|
m_viewPortRect.height() * 2.0));
|
||||||
} else {
|
} else {
|
||||||
camera->calculateProjection(m_viewPortRect);
|
camera->calculateGlobalVariables(m_viewPortRect);
|
||||||
}
|
}
|
||||||
m = camera->projection.inverted();
|
m = camera->projection.inverted();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user