Qt Quick 3D - View3D Example▲
Sélectionnez
// 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
:
&
quot;View3Ds with Different Cameras&
quot;
color
:
&
quot;#848895
&
quot;
// The root scene
Node {
id
:
standAloneScene
DirectionalLight {
ambientColor
:
Qt.rgba(0.5, 0.5, 0.5, 1.0)
brightness
:
1.0
eulerRotation.x
:
-
25
}
Model {
source
:
&
quot;#Cube&
quot;
y
:
-
104
scale
:
Qt.vector3d(3
, 3
, 0.1)
eulerRotation.x
:
-
90
materials
:
[
DefaultMaterial {
diffuseColor
:
Qt.rgba(0.8, 0.8, 0.8, 1.0)
}
]
}
Model {
source
:
&
quot;teapot.mesh&
quot;
y
:
-
100
scale
:
Qt.vector3d(50
, 50
, 50
)
materials
:
[
PrincipledMaterial {
baseColor
:
&
quot;#41cd52&
quot;
metalness
:
0.0
roughness
:
0.1
opacity
:
1.0
}
]
PropertyAnimation
on
eulerRotation.y {
loops
:
Animation.Infinite
duration
:
5000
to
:
0
from
:
-
360
}
}
// 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
}
// 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
}
// Stationary orthographic camera viewing from left
OrthographicCamera {
id
:
cameraOrthographicLeft
x
:
-
600
eulerRotation.y
:
-
90
}
}
// The views
Rectangle
{
id
:
topLeft
anchors.top
:
parent.top
anchors.left
:
parent.left
width
:
parent.width *
0.5
height
:
parent.height *
0.5
color
:
&
quot;#848895
&
quot;
border.color
:
&
quot;black&
quot;
View3D {
id
:
topLeftView
anchors.fill
:
parent
importScene
:
standAloneScene
camera
:
cameraOrthographicFront
}
Label
{
text
:
&
quot;Front&
quot;
anchors.top
:
parent.top
anchors.left
:
parent.left
anchors.margins
:
10
color
:
&
quot;#222840
&
quot;
font.pointSize
:
14
}
}
Rectangle
{
id
:
topRight
anchors.top
:
parent.top
anchors.right
:
parent.right
width
:
parent.width *
0.5
height
:
parent.height *
0.5
color
:
&
quot;transparent&
quot;
border.color
:
&
quot;black&
quot;
Label
{
text
:
&
quot;Perspective&
quot;
anchors.top
:
parent.top
anchors.right
:
parent.right
anchors.margins
:
10
color
:
&
quot;#222840
&
quot;
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
RoundButton {
text
:
&
quot;Camera
1
&
quot;
highlighted
:
topRightView.camera ==
cameraPerspectiveOne
onClicked
: {
topRightView.
camera =
cameraPerspectiveOne
}
}
RoundButton {
text
:
&
quot;Camera
2
&
quot;
highlighted
:
topRightView.camera ==
cameraPerspectiveTwo
onClicked
: {
topRightView.
camera =
cameraPerspectiveTwo
}
}
RoundButton {
text
:
&
quot;Camera
3
&
quot;
highlighted
:
topRightView.camera ==
cameraPerspectiveThree
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
:
&
quot;#848895
&
quot;
border.color
:
&
quot;black&
quot;
View3D {
id
:
bottomLeftView
anchors.fill
:
parent
importScene
:
standAloneScene
camera
:
cameraOrthographicTop
}
Label
{
text
:
&
quot;Top&
quot;
anchors.top
:
parent.top
anchors.left
:
parent.left
anchors.margins
:
10
color
:
&
quot;#222840
&
quot;
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
:
&
quot;#848895
&
quot;
border.color
:
&
quot;black&
quot;
View3D {
id
:
bottomRightView
anchors.fill
:
parent
importScene
:
standAloneScene
camera
:
cameraOrthographicLeft
}
Label
{
text
:
&
quot;Left&
quot;
anchors.top
:
parent.top
anchors.right
:
parent.right
anchors.margins
:
10
color
:
&
quot;#222840
&
quot;
font.pointSize
:
14
}
}
}