summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-08-19 08:42:54 +0200
committerPaul Lemire <paul.lemire@kdab.com>2016-08-26 05:59:44 +0000
commit918970f5f0283ebff7c0a33f4d87f88283fdbb3e (patch)
tree806e37f31d10bb4eb25cf538f558f94388630c1f
parentca85c459cdff08a04d3d6420ea7d00c3d1eaeea7 (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.qml1
-rw-r--r--src/extras/defaults/qskyboxentity.cpp25
-rw-r--r--src/extras/defaults/qskyboxentity.h4
-rw-r--r--src/extras/defaults/qskyboxentity_p.h5
-rw-r--r--src/extras/shaders/es2/skybox.vert10
-rw-r--r--src/extras/shaders/gl3/skybox.vert10
-rw-r--r--src/quick3d/imports/extras/defaults/qml/SkyboxEntity.qml8
-rw-r--r--tests/manual/skybox/main.qml1
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"
}