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:
Miikka Heikkinen
2020-02-04 15:49:43 +02:00
parent 0b1a463c47
commit 07ada921dc
2 changed files with 12 additions and 2 deletions

View File

@@ -34,6 +34,11 @@ IconGizmo {
property alias geometryName: cameraGeometry.name // Name must be unique for each geometry
property alias viewPortRect: cameraGeometry.viewPortRect
onActiveSceneChanged: {
if (activeScene == scene)
cameraGeometry.update();
}
Model {
id: gizmoModel
geometry: cameraGeometry

View File

@@ -113,6 +113,11 @@ QSSGRenderGraphObject *CameraGeometry::updateSpatialNode(QSSGRenderGraphObject *
if (!m_camera)
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);
QSSGRenderGeometry *geometry = static_cast<QSSGRenderGeometry *>(node);
@@ -154,10 +159,10 @@ void CameraGeometry::fillVertexData(QByteArray &vertexData, QByteArray &indexDat
if (qobject_cast<QQuick3DOrthographicCamera *>(m_camera)) {
// For some reason ortho cameras show double what projection suggests,
// 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));
} else {
camera->calculateProjection(m_viewPortRect);
camera->calculateGlobalVariables(m_viewPortRect);
}
m = camera->projection.inverted();
}