diff options
Diffstat (limited to 'tests/manual/anaglyph-rendering/main.qml')
-rw-r--r-- | tests/manual/anaglyph-rendering/main.qml | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/tests/manual/anaglyph-rendering/main.qml b/tests/manual/anaglyph-rendering/main.qml new file mode 100644 index 000000000..55bca1d98 --- /dev/null +++ b/tests/manual/anaglyph-rendering/main.qml @@ -0,0 +1,175 @@ +// Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +import QtQuick 2.4 as QQ2 +import Qt3D.Core 2.0 +import Qt3D.Render 2.0 +import Qt3D.Extras 2.0 + +Entity { + id: root + + components: RenderSettings { + StereoFrameGraph { + id: stereoFrameGraph + leftCamera: stereoCamera.leftCamera + rightCamera: stereoCamera.rightCamera + } + } + + // Camera + StereoCamera { + id: stereoCamera + property real circleRotation: 0 + readonly property real cameraRadius: obstaclesRepeater.radius - 50 + readonly property vector3d circlePosition: Qt.vector3d(cameraRadius * Math.cos(circleRotation), 0.0, cameraRadius * Math.sin(circleRotation)) + readonly property vector3d tan: circlePosition.crossProduct(Qt.vector3d(0, 1, 0).normalized()) + viewCenter: planeTransform.translation + position: circlePosition.plus(Qt.vector3d(0, 45 * Math.sin(circleRotation * 2), 0)).plus(tan.times(-2)) + + QQ2.NumberAnimation { + target: stereoCamera + property: "circleRotation" + from: 0; to: Math.PI * 2 + duration: 10000 + loops: QQ2.Animation.Infinite + running: true + } + } + + // Skybox + SkyboxEntity { + baseName: "qrc:/assets/cubemaps/miramar/miramar" + extension: ".webp" + } + + // Cylinder + Entity { + property CylinderMesh cylinder: CylinderMesh { + radius: 1 + length: 3 + rings: 100 + slices: 20 + } + property Transform transform: Transform { + id: cylinderTransform + property real theta: 0.0 + property real phi: 0.0 + rotation: fromEulerAngles(theta, phi, 0) + } + property Material phong: PhongMaterial {} + + QQ2.ParallelAnimation { + loops: QQ2.Animation.Infinite + running: true + QQ2.SequentialAnimation { + QQ2.NumberAnimation { + target: cylinderTransform + property: "scale" + from: 5; to: 45 + duration: 2000 + easing.type: QQ2.Easing.OutInQuad + } + QQ2.NumberAnimation { + target: cylinderTransform + property: "scale" + from: 45; to: 5 + duration: 2000 + easing.type: QQ2.Easing.InOutQuart + } + } + QQ2.NumberAnimation { + target: cylinderTransform + property: "phi" + from: 0; to: 360 + duration: 4000 + } + QQ2.NumberAnimation { + target: cylinderTransform + property: "theta" + from: 0; to: 720 + duration: 4000 + } + } + + components: [cylinder, transform, phong] + } + + // AirPlane + Entity { + components: [ + Mesh { + source: "assets/obj/toyplane.obj" + }, + Transform { + id: planeTransform + property real rollAngle: 0.0 + translation: Qt.vector3d(Math.sin(stereoCamera.circleRotation * -2) * obstaclesRepeater.radius, + 0.0, + Math.cos(stereoCamera.circleRotation * -2) * obstaclesRepeater.radius) + rotation: fromAxesAndAngles(Qt.vector3d(1.0, 0.0, 0.0), planeTransform.rollAngle, + Qt.vector3d(0.0, 1.0, 0.0), stereoCamera.circleRotation * -2 * 180 / Math.PI + 180) + }, + PhongMaterial { + shininess: 20.0 + diffuse: "#ba1a02" // Inferno Orange + } + ] + + QQ2.SequentialAnimation { + running: true + loops: QQ2.Animation.Infinite + + QQ2.NumberAnimation { + target: planeTransform + property: "rollAngle" + from: 30; to: 45 + duration: 750 + } + QQ2.NumberAnimation { + target: planeTransform + property: "rollAngle" + from: 45; to: 25 + duration: 500 + } + QQ2.NumberAnimation { + target: planeTransform + property: "rollAngle" + from: 25; to: 390 + duration: 800 + } + } + } + + // Torus obsctacles + NodeInstantiator { + id: obstaclesRepeater + model: 4 + readonly property real radius: 130.0; + readonly property real det: 1.0 / model + delegate: Entity { + components: [ + TorusMesh { + radius: 35 + minorRadius: 5 + rings: 100 + slices: 20 + }, + Transform { + id: transform + readonly property real angle: Math.PI * 2.0 * index * obstaclesRepeater.det + translation: Qt.vector3d(obstaclesRepeater.radius * Math.cos(transform.angle), + 0.0, + obstaclesRepeater.radius * Math.sin(transform.angle)) + rotation: fromAxisAndAngle(Qt.vector3d(0.0, 1.0, 0.0), transform.angle * 180 / Math.PI) + }, + PhongMaterial { + diffuse: Qt.rgba(Math.abs(Math.cos(transform.angle)), 204 / 255, 75 / 255, 1) + specular: "white" + shininess: 20.0 + } + ] + } + } +} + |