diff options
-rw-r--r-- | src/quick3d/imports/render/defaults/defaults.pri | 1 | ||||
-rw-r--r-- | src/quick3d/imports/render/defaults/qml/SkyboxEntity.qml | 145 | ||||
-rw-r--r-- | src/quick3d/imports/render/qt3dquick3drenderplugin.cpp | 4 | ||||
-rw-r--r-- | src/render/render.qrc | 4 | ||||
-rw-r--r-- | src/render/shaders/es2/skybox.frag | 8 | ||||
-rw-r--r-- | src/render/shaders/es2/skybox.vert | 12 | ||||
-rw-r--r-- | src/render/shaders/gl3/skybox.frag | 10 | ||||
-rw-r--r-- | src/render/shaders/gl3/skybox.vert | 14 |
8 files changed, 197 insertions, 1 deletions
diff --git a/src/quick3d/imports/render/defaults/defaults.pri b/src/quick3d/imports/render/defaults/defaults.pri index 797dd09f0..4e871abc3 100644 --- a/src/quick3d/imports/render/defaults/defaults.pri +++ b/src/quick3d/imports/render/defaults/defaults.pri @@ -13,3 +13,4 @@ QML_FILES = \ $$PWD/qml/NormalDiffuseSpecularMapMaterial.qml \ $$PWD/qml/ForwardRenderer.qml \ $$PWD/qml/PerVertexColorMaterial.qml \ + $$PWD/qml/SkyboxEntity.qml \ diff --git a/src/quick3d/imports/render/defaults/qml/SkyboxEntity.qml b/src/quick3d/imports/render/defaults/qml/SkyboxEntity.qml new file mode 100644 index 000000000..2f0c54600 --- /dev/null +++ b/src/quick3d/imports/render/defaults/qml/SkyboxEntity.qml @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt3D 2.0 +import Qt3D.Render 2.0 + +Entity { + + property alias cameraPosition: cameraTranslate.translation; + property string baseName: ""; + property string extension: ".png" + + property TextureCubeMap skyboxTexture: TextureCubeMap { + generateMipMaps: false + magnificationFilter: Texture.Linear + minificationFilter: Texture.Linear + wrapMode { + x: WrapMode.ClampToEdge + y: WrapMode.ClampToEdge + } + TextureImage { cubeMapFace: Texture.CubeMapPositiveX; source: baseName + "_posx" + extension } + TextureImage { cubeMapFace: Texture.CubeMapPositiveY; source: baseName + "_posy" + extension } + TextureImage { cubeMapFace: Texture.CubeMapPositiveZ; source: baseName + "_posz" + extension } + TextureImage { cubeMapFace: Texture.CubeMapNegativeX; source: baseName + "_negx" + extension } + TextureImage { cubeMapFace: Texture.CubeMapNegativeY; source: baseName + "_negy" + extension } + TextureImage { cubeMapFace: Texture.CubeMapNegativeZ; source: baseName + "_negz" + extension } + } + + ShaderProgram { + id: gl3SkyboxShader + vertexShaderCode: loadSource("qrc:/shaders/gl3/skybox.vert") + fragmentShaderCode: loadSource("qrc:/shaders/gl3/skybox.frag") + } + + ShaderProgram { + id: gl2es2SkyboxShader + vertexShaderCode: loadSource("qrc:/shaders/es2/skybox.vert") + fragmentShaderCode: loadSource("qrc:/shaders/es2/skybox.frag") + } + + CuboidMesh { + id: cuboidMesh + yzMeshResolution: Qt.size(2, 2) + xzMeshResolution: Qt.size(2, 2) + xyMeshResolution: Qt.size(2, 2) + } + + Transform { + id: transform + Translate { id: cameraTranslate } + } + + Material { + id: skyboxMaterial + parameters: Parameter { name: "skyboxTexture"; value: skyboxTexture} + + effect: Effect { + techniques: [ + // GL3 Technique + Technique { + openGLFilter { + api: OpenGLFilter.Desktop + profile: OpenGLFilter.Core + majorVersion: 3 + minorVersion: 1 + } + renderPasses: RenderPass { + shaderProgram: gl3SkyboxShader + renderStates: [ + // cull front faces + CullFace { mode: CullFace.Front }, + DepthTest { func: DepthTest.LessOrEqual } + ] + } + }, + Technique { + openGLFilter { + api: OpenGLFilter.Desktop + profile: OpenGLFilter.None + majorVersion: 2 + minorVersion: 0 + } + renderPasses: RenderPass { + shaderProgram: gl2es2SkyboxShader + renderStates: [ + CullFace { mode: CullFace.Front }, + DepthTest { func: DepthTest.LessOrEqual } + ] + } + }, + Technique { + openGLFilter { + api: OpenGLFilter.ES + profile: OpenGLFilter.None + majorVersion: 2 + minorVersion: 0 + } + renderPasses: RenderPass { + shaderProgram: gl2es2SkyboxShader + renderStates: [ + CullFace { mode: CullFace.Front }, + DepthTest { func: DepthTest.LessOrEqual } + ] + } + } + ] + } + } + + components: [cuboidMesh, skyboxMaterial, transform] +} + diff --git a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp index 6c690b9fa..bec37a758 100644 --- a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp +++ b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp @@ -124,7 +124,9 @@ static const struct { { "NormalDiffuseSpecularMapMaterial", 2, 0 }, { "PerVertexColorMaterial", 2, 0 }, // FrameGraphs - { "ForwardRenderer", 2, 0 } + { "ForwardRenderer", 2, 0 }, + // Entities + { "SkyboxEntity", 2, 0 } }; QVariantList Quick3DShaderDataArrayToVariantListConverter(Qt3D::Render::Quick::Quick3DShaderDataArray *array) diff --git a/src/render/render.qrc b/src/render/render.qrc index 7e2227aa2..9878bec69 100644 --- a/src/render/render.qrc +++ b/src/render/render.qrc @@ -45,5 +45,9 @@ <file>shaders/gl3/pervertexcolor.vert</file> <file>shaders/es2/pervertexcolor.frag</file> <file>shaders/es2/pervertexcolor.vert</file> + <file>shaders/es2/skybox.frag</file> + <file>shaders/es2/skybox.vert</file> + <file>shaders/gl3/skybox.frag</file> + <file>shaders/gl3/skybox.vert</file> </qresource> </RCC> diff --git a/src/render/shaders/es2/skybox.frag b/src/render/shaders/es2/skybox.frag new file mode 100644 index 000000000..3de08be44 --- /dev/null +++ b/src/render/shaders/es2/skybox.frag @@ -0,0 +1,8 @@ +varying highp vec3 texCoord0; +uniform samplerCube skyboxTexture; + +void main() +{ + gl_FragColor = textureCube(skyboxTexture, texCoord0); +} + diff --git a/src/render/shaders/es2/skybox.vert b/src/render/shaders/es2/skybox.vert new file mode 100644 index 000000000..e2de1d88b --- /dev/null +++ b/src/render/shaders/es2/skybox.vert @@ -0,0 +1,12 @@ +attribute vec3 vertexPosition; +varying vec3 texCoord0; + +uniform mat4 mvp; +uniform mat4 inverseProjectionMatrix; +uniform mat4 inverseModelView; + +void main() +{ + texCoord0 = vertexPosition.xyz; + gl_Position = vec4(mvp * vec4(vertexPosition, 1.0)).xyww; +} diff --git a/src/render/shaders/gl3/skybox.frag b/src/render/shaders/gl3/skybox.frag new file mode 100644 index 000000000..99c8f111b --- /dev/null +++ b/src/render/shaders/gl3/skybox.frag @@ -0,0 +1,10 @@ +#version 140 + +in vec3 texCoord0; +out vec4 fragColor; +uniform samplerCube skyboxTexture; + +void main() +{ + fragColor = texture(skyboxTexture, texCoord0); +} diff --git a/src/render/shaders/gl3/skybox.vert b/src/render/shaders/gl3/skybox.vert new file mode 100644 index 000000000..17bb2b00b --- /dev/null +++ b/src/render/shaders/gl3/skybox.vert @@ -0,0 +1,14 @@ +#version 140 + +in vec3 vertexPosition; +out vec3 texCoord0; + +uniform mat4 mvp; +uniform mat4 inverseProjectionMatrix; +uniform mat4 inverseModelView; + +void main() +{ + texCoord0 = vertexPosition.xyz; + gl_Position = vec4(mvp * vec4(vertexPosition, 1.0)).xyww; +} |