diff options
author | Julian De Bhal <julian.debhal@nokia.com> | 2012-07-09 15:00:25 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-16 05:04:25 +0200 |
commit | 8d463f01ffb8ae184bddcb7b8c35437631cdad9d (patch) | |
tree | 18343013c6ebd634c2d57b09be8e89c902ff1b4f | |
parent | 8cf9ee2ac85ee402ef0de064caea813a7a06f507 (diff) | |
download | qt3d-8d463f01ffb8ae184bddcb7b8c35437631cdad9d.tar.gz |
Positional lighting example
Change-Id: I48981d195304934381f2cbd23d280a4ff87fc832
Reviewed-by: Sergey Dubitskiy <sergey.dubitskiy@nokia.com>
-rw-r--r-- | examples/quick3d/positional_lighting/main.cpp | 46 | ||||
-rw-r--r-- | examples/quick3d/positional_lighting/positional_lighting.pro | 33 | ||||
-rw-r--r-- | examples/quick3d/positional_lighting/positional_lighting.rc | 1 | ||||
-rw-r--r-- | examples/quick3d/positional_lighting/qml/Maze.qml | 289 | ||||
-rw-r--r-- | examples/quick3d/positional_lighting/qml/PositionalLighting.qml | 196 | ||||
-rw-r--r-- | examples/quick3d/positional_lighting/qml/desktop.qml | 52 | ||||
-rw-r--r-- | examples/quick3d/positional_lighting/qml/meshes/grid.3ds | bin | 0 -> 276871 bytes | |||
-rw-r--r-- | examples/quick3d/positional_lighting/qml/meshes/subdivided_cube.3ds | bin | 0 -> 49314 bytes | |||
-rw-r--r-- | examples/quick3d/positional_lighting/qtquick3d.ico | bin | 0 -> 51262 bytes | |||
-rw-r--r-- | examples/quick3d/quick3d.pro | 1 |
10 files changed, 618 insertions, 0 deletions
diff --git a/examples/quick3d/positional_lighting/main.cpp b/examples/quick3d/positional_lighting/main.cpp new file mode 100644 index 000000000..f68429de2 --- /dev/null +++ b/examples/quick3d/positional_lighting/main.cpp @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <qmlres.h> + +int main(int argc, char *argv[]) +{ + return q_quick3d_main("qml/desktop.qml", "examples", argc, argv); +} diff --git a/examples/quick3d/positional_lighting/positional_lighting.pro b/examples/quick3d/positional_lighting/positional_lighting.pro new file mode 100644 index 000000000..ef11c3d2f --- /dev/null +++ b/examples/quick3d/positional_lighting/positional_lighting.pro @@ -0,0 +1,33 @@ +TEMPLATE = app +TARGET = positional_lighting +CONFIG += qt warn_on +QT += qml quick 3d 3dquick + +SOURCES += main.cpp + +ICON_FILE = ../icon.png + +QML_FILES = \ + qml/desktop.qml \ + qml/Maze.qml \ + qml/PositionalLighting.qml + +QML_INFRA_FILES = \ + $$QML_FILES + +QML_MESHES_FILES = \ + qml/meshes/subdivided_cube.3ds \ + qml/meshes/grid.3ds + +CATEGORY = examples +include(../../../pkg.pri) + +OTHER_FILES += \ + mt.qml \ + $$QML_INFRA_FILES \ + $$QML_MESHES_FILES \ + postitional_lighting.rc + +RC_FILE = positional_lighting.rc + +HEADERS += diff --git a/examples/quick3d/positional_lighting/positional_lighting.rc b/examples/quick3d/positional_lighting/positional_lighting.rc new file mode 100644 index 000000000..1b6228c97 --- /dev/null +++ b/examples/quick3d/positional_lighting/positional_lighting.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "qtquick3d.ico" diff --git a/examples/quick3d/positional_lighting/qml/Maze.qml b/examples/quick3d/positional_lighting/qml/Maze.qml new file mode 100644 index 000000000..cc29fb7a0 --- /dev/null +++ b/examples/quick3d/positional_lighting/qml/Maze.qml @@ -0,0 +1,289 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the Qt3D examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import Qt3D 2.0 +import Qt3D.Shapes 2.0 +import "." + +Item3D { + id: maze + + property int mazeWidth: 1 + + property variant solution: [{x:0, y:0}, {x:1,y:0}, {x:1, y:1}] + + signal wallFinished; + signal creationFinished; + signal destinationChanged; + + property int xDestination: Math.round(Math.random() * (maze.mazeWidth -1)) * 2 -maze.mazeWidth + 1; + property int zDestination: Math.round(Math.random() * (maze.mazeWidth -1)) * 2 -maze.mazeWidth + 1; + + Timer { + id: creationTimer + // the 400 is the dropping animation duration + interval: maze.wallCreationDuration + maze.innerCreationDuration + 400 + onTriggered: { + maze.creationFinished(); + } + } + + Timer { + id: wallCreatedTimer + // the 400 is the dropping animation duration + interval: maze.wallCreationDuration + 400 + onTriggered: { + maze.wallFinished(); + } + } + + property real wallCreationDuration: 1500 + property real innerCreationDuration: 10000 + + SequentialAnimation on x { + id: shakeAnimation + running: false + property real amplitude: 0.5 + property real period: 50.0 + NumberAnimation { + from: 0 + to: shakeAnimation.amplitude + duration: shakeAnimation.period / 4.0 + } + NumberAnimation { + from: shakeAnimation.amplitude + to: -shakeAnimation.amplitude + duration: shakeAnimation.period / 2.0 + } + NumberAnimation { + to: 0.0 + duration: shakeAnimation.period / 4.0 + } + } + + Effect { + id: wallEffect + material: Material { + // bronze + ambientColor: Qt.rgba(0.125 * 2.0, 0.1275* 2.0, 0.054* 2.0, 1.0) + diffuseColor: Qt.rgba(0.714* 2.0, + 0.4284* 2.0, + 0.18144* 2.0, 1.0) + specularColor: Qt.rgba(0.393548, + 0.271906, + 0.166721, 1.0) + shininess: 25.6 + } + } + // Positional lighting needs a fair number of vertices to look good, + // so we use these two meshes instead of the stock meshes. + Mesh { + id: subdividedCube + source: "meshes/subdivided_cube.3ds"; + options: "ForceFaceted" + } + + Item3D { + id: floorGrid + mesh: Mesh { + source: "meshes/grid.3ds"; + options: "ForceFaceted" + } + effect: Effect { + material: Material { + // bronze + ambientColor: Qt.rgba(0.125 * 2.0, 0.1275* 2.0, 0.054* 2.0, 1.0) + diffuseColor: Qt.rgba(0.714* 2.0, + 0.4284* 2.0, + 0.18144* 2.0, 1.0) + specularColor: Qt.rgba(0.393548, + 0.271906, + 0.166721, 1.0) + shininess: 25.6 + } + } + // Make the grid cover the whole bottom of the maze + scale: maze.mazeWidth + 0.5 + // add a tiny bit to avoid artefacts with the bottoms of boxes going + // trough the floor + y: -0.501 + + } + + Component { + id: wallComponent + Item3D { + id: wallComponentItem + scale: 0.0 + x: 0 + y: 0 + z: 0 + property real startUpPause: 0 + mesh: subdividedCube + effect: wallEffect + SequentialAnimation { + id: dropInAnimation + running: startUpPause != 0 + property int dropDuration: 400 + PauseAnimation { + id: startUp; + duration: wallComponentItem.startUpPause + } + ParallelAnimation { + NumberAnimation { + target: wallComponentItem; + properties: "scale"; duration: 250; + from: 0.0 ; to: 0.5 + } + NumberAnimation { + target: wallComponentItem; property: "y"; + duration: dropInAnimation.dropDuration; + from: 10; to: 0 + } + } + ScriptAction { + script: shakeAnimation.start() + } + } + } + } + + Component.onCompleted: { + if (wallComponent.status == Component.Ready) + generateMaze(); + else + console.log("PANIC"); + } + + function maybeGenerateMaze() { + if (wallComponent.status == Component.Ready) + generateMaze(); + } + + function generateMaze() { + + var i,j; + var westEdge = -mazeWidth; + var northEdge = -mazeWidth; + var newWall; + + var pause = 1; + var numberOfBlocks = 4 * 2 *mazeWidth; + var cumulativePauseFactor = Math.max(1, Math.floor(maze.wallCreationDuration / numberOfBlocks)); + + // Create the outer wall + + // North Wall + for (i = 0; i < 2 * mazeWidth; i++) + { + newWall = wallComponent.createObject(maze); + newWall.x = westEdge + i; + newWall.z = northEdge; + newWall.startUpPause = pause; + pause += cumulativePauseFactor; + } + // East Wall + for (i = 0; i < 2 * mazeWidth + 1; i++) + { + newWall = wallComponent.createObject(maze); + newWall.x = westEdge + 2 * mazeWidth; + newWall.z = northEdge + i; + newWall.startUpPause = pause; + pause += cumulativePauseFactor; + } + // Southwall + for (i = 2 * mazeWidth -1; i >= 1 ; i--) + { + newWall = wallComponent.createObject(maze); + newWall.x = westEdge + i; + newWall.z = northEdge + 2 * mazeWidth; + newWall.startUpPause = pause; + pause += cumulativePauseFactor; + } + // West wall + for (i = 2 * mazeWidth; i >= 1; i--) + { + newWall = wallComponent.createObject(maze); + newWall.x = westEdge; + newWall.z = northEdge + i; + newWall.startUpPause = pause; + pause += cumulativePauseFactor; + } + + // Create the inner pillars + for (i = 1; i < mazeWidth; i++) + { + for (j = 1; j < mazeWidth; j++) + { + newWall = wallComponent.createObject(maze); + newWall.x = westEdge + i * 2 + newWall.z = northEdge + j * 2 + newWall.startUpPause = pause + Math.random() * maze.innerCreationDuration; + } + } + + // Setup notifications + creationTimer.start(); + wallCreatedTimer.start(); + return; + } + + function calculateNewLightDestination() { + var xRange = 2 * (maze.mazeWidth - 1); + var xMax = maze.mazeWidth - 1; + + maze.xDestination = Math.round(Math.random() * (maze.mazeWidth -1)) * 2 -maze.mazeWidth + 1; + maze.zDestination = Math.round(Math.random() * (maze.mazeWidth -1)) * 2 -maze.mazeWidth + 1; + destinationChanged(); + } + + Material { + id: bronze + ambientColor: Qt.rgba(0.2125, 0.1275, 0.054, 1.0) + diffuseColor: Qt.rgba(0.714, + 0.4284, + 0.18144, 1.0) + specularColor: Qt.rgba(0.393548, + 0.271906, + 0.166721, 1.0) + shininess: 25.6 + } +} diff --git a/examples/quick3d/positional_lighting/qml/PositionalLighting.qml b/examples/quick3d/positional_lighting/qml/PositionalLighting.qml new file mode 100644 index 000000000..8ebf1409d --- /dev/null +++ b/examples/quick3d/positional_lighting/qml/PositionalLighting.qml @@ -0,0 +1,196 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the Qt3D examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import Qt3D 2.0 +import Qt3D.Shapes 2.0 + +Viewport { + id: viewport + width: parent.width + height: parent.height + fillColor: "black" + + camera: Camera { eye: Qt.vector3d(21,70,300)} + + property color lightColor: Qt.hsla(hue, saturation, lightness, 1.0) + property real hue: 0 + property real saturation: 1.0 + property real lightness: 1.0 + + // This is the actual light + light: Light { + id: mazeLight + position: lightProxy.localToWorld() + // A dimmer ambient light, so it doesn't light up the "wrong" + // side of the blocks + ambientColor: "#888888" + specularColor: viewport.lightColor + diffuseColor: viewport.lightColor + constantAttenuation: 1 + linearAttenuation: 0 + quadraticAttenuation: 0 + } + + Maze { + // Maze is an Item3D based element encompassing all the blocks and the + // floor, so that there is something to light + scale: 10 + id: maze + y: 0.5 + mazeWidth: 6 + // We use this item3D to position the light relative to the Maze, + // and update the light to follow it's position as it moves around. + Item3D { + id: lightProxy + scale: 0.5 + y: 0 + x: 1 + z: -maze.mazeWidth + 1 + + // Unfortunately, we need to use this signal rather than + // QML bindings because localToWorld() is not a property. + onPositionChanged: mazeLight.position = localToWorld(); + + // We'll add a sphere here to be a visible source for the light + // It's fine to combine this with the lightProxy, + // They are only separated here to try and make the position + // proxy easier to understand. + Sphere { + effect: Effect { + color: viewport.lightColor + useLighting: false + } + } + + SequentialAnimation { + id: lightAnimation + running: true + + NumberAnimation { + id: xAnimation + target: lightProxy; + property: "x"; duration: 1200; easing.type: Easing.InOutQuad + to: maze.xDestination; + } + NumberAnimation { + id: zAnimation + target: lightProxy; + property: "z"; duration: 1200; easing.type: Easing.InOutQuad + to: maze.zDestination; + } + // It seems like we need this indirection to load the new values + onCompleted: maze.calculateNewLightDestination() + } + } + + onWallFinished: dimmerAnimation.running = true + onDestinationChanged: lightAnimation.restart() + } + + // This is the initial dimming animation. + // At 0 quadratic attenuation, the light goes on forever, but as it + // increases, the light tapers off faster. + NumberAnimation { + id: dimmerAnimation + target: mazeLight + property: "quadraticAttenuation" + from: 0 + to: lightPulse.upperBound + duration: 1500 + onCompleted: lightPulse.running = true; + } + + // Animating the lighting attenuation to make the light pulse. + // Note that there is no easing curve (although there could be), the + // exponential nature of the attenuation co-efficient just makes it + // look like it's changing at different rates. + SequentialAnimation { + id: lightPulse + property real period: 2500 + property real upperBound: 0.001 + property real lowerBound: 0.005 + loops: Animation.Infinite + NumberAnimation { + target: mazeLight + property: "quadraticAttenuation" + from: lightPulse.upperBound + to: lightPulse.lowerBound + duration: lightPulse.period / 2.0 + } + NumberAnimation { + target: mazeLight + property: "quadraticAttenuation" + from: lightPulse.lowerBound + to: lightPulse.upperBound + duration: lightPulse.period / 2.0 + } + } + + // Animating the light color for no good reason. + SequentialAnimation { + id: hsvColorAnimation + running: false + NumberAnimation { + target: viewport + property: "lightness" + from:1.0; to:0.5; + duration: 1000; + } + NumberAnimation { + target: viewport + property: "hue" + from:0; to: 1.0; + duration: 6000; + } + NumberAnimation { + target: viewport + property: "lightness" + from:0.5; to:1.0; + duration: 1000; + } + } + + // Trigger the disco mode on keyboard input + focus: true + Keys.onPressed: { + hsvColorAnimation.running = !hsvColorAnimation.running; + } +} diff --git a/examples/quick3d/positional_lighting/qml/desktop.qml b/examples/quick3d/positional_lighting/qml/desktop.qml new file mode 100644 index 000000000..89b3114a8 --- /dev/null +++ b/examples/quick3d/positional_lighting/qml/desktop.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the Qt3D examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import Qt3D 2.0 +import Qt3D.Shapes 2.0 +import "." + +Item { + width: 1000 + height: 800 + + PositionalLighting { + } +} diff --git a/examples/quick3d/positional_lighting/qml/meshes/grid.3ds b/examples/quick3d/positional_lighting/qml/meshes/grid.3ds Binary files differnew file mode 100644 index 000000000..00ce7fed3 --- /dev/null +++ b/examples/quick3d/positional_lighting/qml/meshes/grid.3ds diff --git a/examples/quick3d/positional_lighting/qml/meshes/subdivided_cube.3ds b/examples/quick3d/positional_lighting/qml/meshes/subdivided_cube.3ds Binary files differnew file mode 100644 index 000000000..d1657be0d --- /dev/null +++ b/examples/quick3d/positional_lighting/qml/meshes/subdivided_cube.3ds diff --git a/examples/quick3d/positional_lighting/qtquick3d.ico b/examples/quick3d/positional_lighting/qtquick3d.ico Binary files differnew file mode 100644 index 000000000..b3b85e37b --- /dev/null +++ b/examples/quick3d/positional_lighting/qtquick3d.ico diff --git a/examples/quick3d/quick3d.pro b/examples/quick3d/quick3d.pro index c06e7b1bb..de6b09596 100644 --- a/examples/quick3d/quick3d.pro +++ b/examples/quick3d/quick3d.pro @@ -5,6 +5,7 @@ SUBDIRS += \ forest \ lander \ matrix_animation \ + positional_lighting \ monkeygod \ moon \ photoroom \ |