ff4ff35918
Red Bear OS is a full fork. All sources must be available from git clone with zero network access. Removed gitignore rules that excluded fetched source trees under recipes/*/source/, local/recipes/kde/*/source/, local/recipes/qt/*/source/, and vendor source trees. Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded. 127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt frameworks, mesa, wayland, DRM drivers, and every other recipe source.
281 lines
7.4 KiB
QML
281 lines
7.4 KiB
QML
// Copyright (C) 2019 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
import QtQuick
|
|
import QtQuick3D
|
|
import QtQuick.Controls
|
|
|
|
Window {
|
|
id: window
|
|
width: 1280
|
|
height: 720
|
|
visible: true
|
|
title: "View3Ds with Different Cameras"
|
|
color: "#848895"
|
|
|
|
// The root scene
|
|
//! [rootnode]
|
|
Node {
|
|
id: standAloneScene
|
|
//! [rootnode]
|
|
|
|
Node {
|
|
scale: Qt.vector3d(window.width / 1280, window.width / 1280, window.width / 1280)
|
|
|
|
DirectionalLight {
|
|
ambientColor: Qt.rgba(0.5, 0.5, 0.5, 1.0)
|
|
brightness: 1.0
|
|
eulerRotation.x: -25
|
|
}
|
|
|
|
Model {
|
|
source: "#Cube"
|
|
y: -104
|
|
scale: Qt.vector3d(3, 3, 0.1)
|
|
eulerRotation.x: -90
|
|
materials: [
|
|
PrincipledMaterial {
|
|
baseColor: Qt.rgba(0.8, 0.8, 0.8, 1.0)
|
|
}
|
|
]
|
|
}
|
|
|
|
Model {
|
|
id: teapot
|
|
source: "teapot.mesh"
|
|
y: -100
|
|
scale: Qt.vector3d(50, 50, 50)
|
|
materials: [
|
|
PrincipledMaterial {
|
|
baseColor: "#41cd52"
|
|
metalness: 0.0
|
|
roughness: 0.1
|
|
opacity: 1.0
|
|
}
|
|
]
|
|
|
|
PropertyAnimation on eulerRotation.y {
|
|
loops: Animation.Infinite
|
|
duration: 5000
|
|
to: 0
|
|
from: -360
|
|
}
|
|
}
|
|
}
|
|
|
|
//! [cameras start]
|
|
// The predefined cameras. They have to be part of the scene, i.e. inside the root node.
|
|
// Animated perspective camera
|
|
Node {
|
|
PerspectiveCamera {
|
|
id: cameraPerspectiveOne
|
|
z: 600
|
|
}
|
|
|
|
PropertyAnimation on eulerRotation.x {
|
|
loops: Animation.Infinite
|
|
duration: 5000
|
|
to: -360
|
|
from: 0
|
|
}
|
|
}
|
|
|
|
// Stationary perspective camera
|
|
PerspectiveCamera {
|
|
id: cameraPerspectiveTwo
|
|
z: 600
|
|
}
|
|
//! [cameras start]
|
|
|
|
// Second animated perspective camera
|
|
Node {
|
|
PerspectiveCamera {
|
|
id: cameraPerspectiveThree
|
|
x: 500
|
|
eulerRotation.y: 90
|
|
}
|
|
PropertyAnimation on eulerRotation.y {
|
|
loops: Animation.Infinite
|
|
duration: 5000
|
|
to: 0
|
|
from: -360
|
|
}
|
|
}
|
|
|
|
// Stationary orthographic camera viewing from the top
|
|
OrthographicCamera {
|
|
id: cameraOrthographicTop
|
|
y: 600
|
|
eulerRotation.x: -90
|
|
}
|
|
|
|
// Stationary orthographic camera viewing from the front
|
|
OrthographicCamera {
|
|
id: cameraOrthographicFront
|
|
z: 600
|
|
}
|
|
|
|
//! [cameras end]
|
|
// Stationary orthographic camera viewing from left
|
|
OrthographicCamera {
|
|
id: cameraOrthographicLeft
|
|
x: -600
|
|
eulerRotation.y: -90
|
|
}
|
|
}
|
|
//! [cameras end]
|
|
|
|
//! [views]
|
|
// The views
|
|
Rectangle {
|
|
id: topLeft
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
width: parent.width * 0.5
|
|
height: parent.height * 0.5
|
|
color: "#848895"
|
|
border.color: "black"
|
|
|
|
View3D {
|
|
id: topLeftView
|
|
anchors.fill: parent
|
|
importScene: standAloneScene
|
|
camera: cameraOrthographicFront
|
|
}
|
|
|
|
Label {
|
|
text: "Front"
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
anchors.margins: 10
|
|
color: "#222840"
|
|
font.pointSize: 14
|
|
}
|
|
}
|
|
//! [views]
|
|
|
|
Rectangle {
|
|
id: topRight
|
|
anchors.top: parent.top
|
|
anchors.right: parent.right
|
|
width: parent.width * 0.5
|
|
height: parent.height * 0.5
|
|
color: "transparent"
|
|
border.color: "black"
|
|
|
|
Label {
|
|
text: "Perspective"
|
|
anchors.top: parent.top
|
|
anchors.right: parent.right
|
|
anchors.margins: 10
|
|
color: "#222840"
|
|
font.pointSize: 14
|
|
}
|
|
|
|
View3D {
|
|
id: topRightView
|
|
anchors.top: parent.top
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
anchors.bottom: parent.bottom;
|
|
camera: cameraPerspectiveOne
|
|
importScene: standAloneScene
|
|
renderMode: View3D.Underlay
|
|
|
|
environment: SceneEnvironment {
|
|
clearColor: window.color
|
|
backgroundMode: SceneEnvironment.Color
|
|
}
|
|
}
|
|
|
|
Row {
|
|
id: controlsContainer
|
|
anchors.bottom: parent.bottom
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
spacing: 10
|
|
padding: 10
|
|
|
|
property real buttonWidth: (window.width / 2 - 40) / 3
|
|
|
|
//! [buttons]
|
|
RoundButton {
|
|
text: "Camera 1"
|
|
highlighted: topRightView.camera == cameraPerspectiveOne
|
|
implicitWidth: controlsContainer.buttonWidth
|
|
onClicked: {
|
|
topRightView.camera = cameraPerspectiveOne
|
|
}
|
|
}
|
|
//! [buttons]
|
|
RoundButton {
|
|
text: "Camera 2"
|
|
highlighted: topRightView.camera == cameraPerspectiveTwo
|
|
implicitWidth: controlsContainer.buttonWidth
|
|
onClicked: {
|
|
topRightView.camera = cameraPerspectiveTwo
|
|
}
|
|
}
|
|
RoundButton {
|
|
text: "Camera 3"
|
|
highlighted: topRightView.camera == cameraPerspectiveThree
|
|
implicitWidth: controlsContainer.buttonWidth
|
|
onClicked: {
|
|
topRightView.camera = cameraPerspectiveThree
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: bottomLeft
|
|
anchors.bottom: parent.bottom
|
|
anchors.left: parent.left
|
|
width: parent.width * 0.5
|
|
height: parent.height * 0.5
|
|
color: "#848895"
|
|
border.color: "black"
|
|
|
|
View3D {
|
|
id: bottomLeftView
|
|
anchors.fill: parent
|
|
importScene: standAloneScene
|
|
camera: cameraOrthographicTop
|
|
}
|
|
|
|
Label {
|
|
text: "Top"
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
anchors.margins: 10
|
|
color: "#222840"
|
|
font.pointSize: 14
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: bottomRight
|
|
anchors.bottom: parent.bottom
|
|
anchors.right: parent.right
|
|
width: parent.width * 0.5
|
|
height: parent.height * 0.5
|
|
color: "#848895"
|
|
border.color: "black"
|
|
|
|
View3D {
|
|
id: bottomRightView
|
|
anchors.fill: parent
|
|
importScene: standAloneScene
|
|
camera: cameraOrthographicLeft
|
|
}
|
|
|
|
Label {
|
|
text: "Left"
|
|
anchors.top: parent.top
|
|
anchors.right: parent.right
|
|
anchors.margins: 10
|
|
color: "#222840"
|
|
font.pointSize: 14
|
|
}
|
|
}
|
|
}
|