diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2018-01-25 14:43:15 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2018-01-25 14:44:35 +0000 |
commit | 0851956b9b5bf17a8be097cdd0161eb708629070 (patch) | |
tree | 0a307aab7936afa97724d745781a8765875e7c49 /src | |
parent | 09c344d28017e06af6b34bc3c7b781902d052059 (diff) | |
parent | e680fe041700296be5e6e4a132e2cfc6f54d4e77 (diff) |
Merge branch '5.9' into 5.10
Conflicts:
src/render/backend/cameralens.cpp
src/render/backend/cameralens_p.h
src/render/jobs/pickboundingvolumejob.cpp
src/render/jobs/updatelevelofdetailjob.cpp
Change-Id: I5433dde8ace462d11f037742d45f555c87235ffe
Diffstat (limited to 'src')
-rw-r--r-- | src/render/backend/cameralens.cpp | 14 | ||||
-rw-r--r-- | src/render/backend/cameralens_p.h | 2 | ||||
-rw-r--r-- | src/render/backend/renderview.cpp | 11 | ||||
-rw-r--r-- | src/render/jobs/loadgeometryjob_p.h | 2 | ||||
-rw-r--r-- | src/render/renderstates/qcullface.cpp | 73 |
5 files changed, 86 insertions, 16 deletions
diff --git a/src/render/backend/cameralens.cpp b/src/render/backend/cameralens.cpp index cf1f17d32..e127b5885 100644 --- a/src/render/backend/cameralens.cpp +++ b/src/render/backend/cameralens.cpp @@ -105,6 +105,18 @@ void CameraLens::setRenderAspect(QRenderAspect *renderAspect) m_renderAspect = renderAspect; } +QMatrix4x4 CameraLens::viewMatrix(const QMatrix4x4 &worldTransform) +{ + const QVector4D position = worldTransform * QVector4D(0.0f, 0.0f, 0.0f, 1.0f); + // OpenGL convention is looking down -Z + const QVector4D viewDirection = worldTransform * QVector4D(0.0f, 0.0f, -1.0f, 0.0f); + const QVector4D upVector = worldTransform * QVector4D(0.0f, 1.0f, 0.0f, 0.0f); + + QMatrix4x4 m; + m.lookAt(position.toVector3D(), (position + viewDirection).toVector3D(), upVector.toVector3D()); + return m; +} + void CameraLens::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) { const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QCameraLensData>>(change); @@ -209,7 +221,7 @@ bool CameraLens::viewMatrixForCamera(EntityManager* manager, Qt3DCore::QNodeId c if (!lens || !lens->isEnabled()) return false; - viewMatrix = *camNode->worldTransform(); + viewMatrix = lens->viewMatrix(*camNode->worldTransform()); projectionMatrix = lens->projection(); return true; } diff --git a/src/render/backend/cameralens_p.h b/src/render/backend/cameralens_p.h index d071619d8..1afeeda24 100644 --- a/src/render/backend/cameralens_p.h +++ b/src/render/backend/cameralens_p.h @@ -89,6 +89,8 @@ public: void setRenderAspect(QRenderAspect* renderAspect); + QMatrix4x4 viewMatrix(const QMatrix4x4 &worldTransform); + void setProjection(const QMatrix4x4 &projection); inline QMatrix4x4 projection() const { return m_projection; } diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp index f488b7e44..dd5968420 100644 --- a/src/render/backend/renderview.cpp +++ b/src/render/backend/renderview.cpp @@ -733,16 +733,7 @@ void RenderView::updateMatrices() { if (m_data.m_renderCameraNode && m_data.m_renderCameraLens && m_data.m_renderCameraLens->isEnabled()) { const QMatrix4x4 cameraWorld = *(m_data.m_renderCameraNode->worldTransform()); - - const QVector4D position = cameraWorld * QVector4D(0.0f, 0.0f, 0.0f, 1.0f); - // OpenGL convention is looking down -Z - const QVector4D viewDirection = cameraWorld * QVector4D(0.0f, 0.0f, -1.0f, 0.0f); - const QVector4D upVector = cameraWorld * QVector4D(0.0f, 1.0f, 0.0f, 0.0f); - - QMatrix4x4 m; - m.lookAt(position.toVector3D(), (position + viewDirection).toVector3D(), upVector.toVector3D()); - - setViewMatrix(m); + setViewMatrix(m_data.m_renderCameraLens->viewMatrix(cameraWorld)); setViewProjectionMatrix(m_data.m_renderCameraLens->projection() * viewMatrix()); //To get the eyePosition of the camera, we need to use the inverse of the diff --git a/src/render/jobs/loadgeometryjob_p.h b/src/render/jobs/loadgeometryjob_p.h index 2b0331d1c..c02739647 100644 --- a/src/render/jobs/loadgeometryjob_p.h +++ b/src/render/jobs/loadgeometryjob_p.h @@ -72,7 +72,7 @@ public: void setNodeManagers(NodeManagers *nodeManagers) { m_nodeManagers = nodeManagers; } protected: - void run() Q_DECL_OVERRIDE; + void run() override; HGeometryRenderer m_handle; NodeManagers *m_nodeManagers; }; diff --git a/src/render/renderstates/qcullface.cpp b/src/render/renderstates/qcullface.cpp index e96346287..4be395464 100644 --- a/src/render/renderstates/qcullface.cpp +++ b/src/render/renderstates/qcullface.cpp @@ -50,7 +50,7 @@ namespace Qt3DRender { /*! \class Qt3DRender::QCullFace \brief The QCullFace class specifies whether front or back face culling - are enabled + is enabled. \since 5.7 \inmodule Qt3DRender \ingroup renderstates @@ -58,13 +58,43 @@ namespace Qt3DRender { QCullFace sets whether the front or back facets are culled. Facets include triangles, quadrilaterals, polygons and rectangles. + It can be added by calling the addRenderState() method on a QRenderPass: + + \code + // using namespace Qt3DRender; + + QRenderPass *renderPass = new QRenderPass(); + + // Create a front face culling render state + QCullFace *cullFront = new QCullFace(); + cullFront->setMode(QCullFace::Front); + + // Add the render state to the render pass + renderPass->addRenderState(cullFront); + \endcode + + Or by calling the addRenderState() method on a QRenderStateSet: + + \code + // using namespace Qt3DRender; + + QRenderStateSet *renderStateSet = new QRenderStateSet(); + + // Create a front face culling render state + QCullFace *cullFront = new QCullFace(); + cullFront->setMode(QCullFace::Front); + + // Add the render state to the render pass + renderStateSet->addRenderState(cullFront); + \endcode + \sa QFrontFace */ /*! \qmltype CullFace \brief The CullFace type specifies whether front or back face culling - are enabled + is enabled. \since 5.7 \inqmlmodule Qt3D.Render \instantiates Qt3DRender::QCullFace @@ -74,6 +104,33 @@ namespace Qt3DRender { CullFace sets whether the front or back facets are culled. Facets include triangles, quadrilaterals, polygons and rectangles. + It can be added to the renderStates property of a RenderPass: + + \qml + RenderPass { + shaderProgram: ShaderProgram { + // ... + } + renderStates: [ + CullFace { + mode: CullFace.Front + } + ] + } + \endqml + + Or added to the renderStates property of a RenderStateSet: + + \qml + RenderStateSet { + renderStates: [ + CullFace { + mode: CullFace.Front + } + ] + } + \endqml + \sa FrontFace */ @@ -81,15 +138,23 @@ namespace Qt3DRender { \enum Qt3DRender::QCullFace::CullingMode This enumeration specifies values for the culling mode. - \value NoCulling culling is disabled + + \value NoCulling Culling is disabled \value Front Culling is enabled for front facing polygons \value Back Culling is enabled for back facing polygons - \value FrontAndBack Culling is enabled for all polygons, points and lines are drawn. + \value FrontAndBack Culling is enabled for all polygons, points and lines are drawn */ /*! \qmlproperty enumeration CullFace::mode Holds the culling mode used by CullFace. Default is set to QCullFace.Back. + + \list + \li CullFace.NoCulling - culling is disabled + \li CullFace.Front - culling is enabled for front facing polygons + \li CullFace.Back - culling is enabled for back facing polygons + \li CullFace.FrontAndBack - culling is enabled for all polygons, but points and lines are drawn + \endlist */ /*! |