diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-08-19 08:42:54 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-08-26 05:59:44 +0000 |
commit | 918970f5f0283ebff7c0a33f4d87f88283fdbb3e (patch) | |
tree | 806e37f31d10bb4eb25cf538f558f94388630c1f | |
parent | ca85c459cdff08a04d3d6420ea7d00c3d1eaeea7 (diff) |
QSkyboxEntity: remove camera translation property
If we convert a mat4 matrix to a mat3 matrix, then back to a mat4, this
removes the translation component from it. Making the skybox shaders use that
property allows to remove references to the camera translation in
QSkyboxEntity.
This makes using a skybox neater as we don't need to care about the Camera
position anymore. This also allows to render the same skybox with different
cameras which required to have duplicate QSkyboxEntity previously.
Change-Id: I1adddd17d151e4d26d0f19b048df88dbf738042b
Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
-rw-r--r-- | examples/qt3d/anaglyph-rendering/main.qml | 1 | ||||
-rw-r--r-- | src/extras/defaults/qskyboxentity.cpp | 25 | ||||
-rw-r--r-- | src/extras/defaults/qskyboxentity.h | 4 | ||||
-rw-r--r-- | src/extras/defaults/qskyboxentity_p.h | 5 | ||||
-rw-r--r-- | src/extras/shaders/es2/skybox.vert | 10 | ||||
-rw-r--r-- | src/extras/shaders/gl3/skybox.vert | 10 | ||||
-rw-r--r-- | src/quick3d/imports/extras/defaults/qml/SkyboxEntity.qml | 8 | ||||
-rw-r--r-- | tests/manual/skybox/main.qml | 1 |
8 files changed, 13 insertions, 51 deletions
diff --git a/examples/qt3d/anaglyph-rendering/main.qml b/examples/qt3d/anaglyph-rendering/main.qml index 3510850a2..89e5c3664 100644 --- a/examples/qt3d/anaglyph-rendering/main.qml +++ b/examples/qt3d/anaglyph-rendering/main.qml @@ -86,7 +86,6 @@ Entity { // Skybox SkyboxEntity { - cameraPosition: stereoCamera.position baseName: "qrc:/assets/cubemaps/miramar/miramar" extension: ".webp" } diff --git a/src/extras/defaults/qskyboxentity.cpp b/src/extras/defaults/qskyboxentity.cpp index 2e755f385..f4b26ae9e 100644 --- a/src/extras/defaults/qskyboxentity.cpp +++ b/src/extras/defaults/qskyboxentity.cpp @@ -40,7 +40,6 @@ #include "qskyboxentity.h" #include "qskyboxentity_p.h" -#include <Qt3DCore/qtransform.h> #include <Qt3DRender/qfilterkey.h> #include <Qt3DRender/qeffect.h> #include <Qt3DRender/qtexture.h> @@ -76,7 +75,6 @@ QSkyboxEntityPrivate::QSkyboxEntityPrivate() , m_es2RenderPass(new QRenderPass()) , m_gl3RenderPass(new QRenderPass()) , m_mesh(new QCuboidMesh()) - , m_transform(new Qt3DCore::QTransform()) , m_textureParameter(new QParameter(QStringLiteral("skyboxTexture"), m_skyboxTexture)) , m_posXImage(new QTextureImage()) , m_posYImage(new QTextureImage()) @@ -173,7 +171,6 @@ void QSkyboxEntityPrivate::init() q_func()->addComponent(m_mesh); q_func()->addComponent(m_material); - q_func()->addComponent(m_transform); } /*! @@ -266,28 +263,6 @@ QString QSkyboxEntity::extension() const return d->m_extension; } -/*! - * Sets the camera position to \a cameraPosition. - */ -void QSkyboxEntity::setCameraPosition(const QVector3D &cameraPosition) -{ - Q_D(QSkyboxEntity); - if (cameraPosition != d->m_position) { - d->m_position = cameraPosition; - d->m_transform->setTranslation(d->m_position); - emit cameraPositionChanged(cameraPosition); - } -} - -/*! - * Returns the camera position. - */ -QVector3D QSkyboxEntity::cameraPosition() const -{ - Q_D(const QSkyboxEntity); - return d->m_position; -} - } // namespace Qt3DExtras QT_END_NAMESPACE diff --git a/src/extras/defaults/qskyboxentity.h b/src/extras/defaults/qskyboxentity.h index 8cb279e1a..a11d2f0a0 100644 --- a/src/extras/defaults/qskyboxentity.h +++ b/src/extras/defaults/qskyboxentity.h @@ -62,13 +62,9 @@ public: void setExtension(const QString &extension); QString extension() const; - void setCameraPosition(const QVector3D &cameraPosition); - QVector3D cameraPosition() const; - Q_SIGNALS: void sourceDirectoryChanged(const QString &path); void extensionChanged(const QString &extension); - void cameraPositionChanged(const QVector3D &cameraPosition); private: Q_DECLARE_PRIVATE(QSkyboxEntity) diff --git a/src/extras/defaults/qskyboxentity_p.h b/src/extras/defaults/qskyboxentity_p.h index 565caa66d..effe97fce 100644 --- a/src/extras/defaults/qskyboxentity_p.h +++ b/src/extras/defaults/qskyboxentity_p.h @@ -56,10 +56,6 @@ QT_BEGIN_NAMESPACE -namespace Qt3DCore { -class QTransform; -} - namespace Qt3DRender { class QFilterKey; @@ -101,7 +97,6 @@ class QSkyboxEntityPrivate : public Qt3DCore::QEntityPrivate Qt3DRender::QRenderPass *m_es2RenderPass; Qt3DRender::QRenderPass *m_gl3RenderPass; QCuboidMesh *m_mesh; - Qt3DCore::QTransform *m_transform; Qt3DRender::QParameter *m_textureParameter; Qt3DRender::QTextureImage *m_posXImage; Qt3DRender:: QTextureImage *m_posYImage; diff --git a/src/extras/shaders/es2/skybox.vert b/src/extras/shaders/es2/skybox.vert index e2de1d88b..3a9fb1beb 100644 --- a/src/extras/shaders/es2/skybox.vert +++ b/src/extras/shaders/es2/skybox.vert @@ -1,12 +1,14 @@ attribute vec3 vertexPosition; varying vec3 texCoord0; -uniform mat4 mvp; -uniform mat4 inverseProjectionMatrix; -uniform mat4 inverseModelView; +uniform mat4 modelMatrix; +uniform mat4 viewMatrix; +uniform mat4 projectionMatrix; void main() { texCoord0 = vertexPosition.xyz; - gl_Position = vec4(mvp * vec4(vertexPosition, 1.0)).xyww; + // Converting the viewMatrix to a mat3, then back to a mat4 + // removes the translation component from it + gl_Position = vec4(projectionMatrix * mat4(mat3(viewMatrix)) * modelMatrix * vec4(vertexPosition, 1.0)).xyww; } diff --git a/src/extras/shaders/gl3/skybox.vert b/src/extras/shaders/gl3/skybox.vert index 17bb2b00b..b5b0c0617 100644 --- a/src/extras/shaders/gl3/skybox.vert +++ b/src/extras/shaders/gl3/skybox.vert @@ -3,12 +3,14 @@ in vec3 vertexPosition; out vec3 texCoord0; -uniform mat4 mvp; -uniform mat4 inverseProjectionMatrix; -uniform mat4 inverseModelView; +uniform mat4 modelMatrix; +uniform mat4 viewMatrix; +uniform mat4 projectionMatrix; void main() { texCoord0 = vertexPosition.xyz; - gl_Position = vec4(mvp * vec4(vertexPosition, 1.0)).xyww; + // Converting the viewMatrix to a mat3, then back to a mat4 + // removes the translation component from it + gl_Position = vec4(projectionMatrix * mat4(mat3(viewMatrix)) * modelMatrix * vec4(vertexPosition, 1.0)).xyww; } diff --git a/src/quick3d/imports/extras/defaults/qml/SkyboxEntity.qml b/src/quick3d/imports/extras/defaults/qml/SkyboxEntity.qml index 9fcf8559f..45cef47b7 100644 --- a/src/quick3d/imports/extras/defaults/qml/SkyboxEntity.qml +++ b/src/quick3d/imports/extras/defaults/qml/SkyboxEntity.qml @@ -42,8 +42,6 @@ import Qt3D.Render 2.0 import Qt3D.Extras 2.0 Entity { - - property alias cameraPosition: transform.translation; property string baseName: ""; property string extension: ".png" @@ -82,10 +80,6 @@ Entity { xyMeshResolution: Qt.size(2, 2) } - Transform { - id: transform - } - Material { id: skyboxMaterial parameters: Parameter { name: "skyboxTexture"; value: skyboxTexture} @@ -152,6 +146,6 @@ Entity { } } - components: [cuboidMesh, skyboxMaterial, transform] + components: [cuboidMesh, skyboxMaterial] } diff --git a/tests/manual/skybox/main.qml b/tests/manual/skybox/main.qml index 13468906c..d89df316e 100644 --- a/tests/manual/skybox/main.qml +++ b/tests/manual/skybox/main.qml @@ -81,7 +81,6 @@ Entity { // So that the camera is rendered always at the same position as the camera SkyboxEntity { - cameraPosition: basicCamera.position baseName: "qrc:/assets/cubemaps/miramar/miramar" extension: ".webp" } |