Qt Quick 3D - Instanced Rendering Example▲
Sélectionnez
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import
QtQuick
import
QtQuick3D
import
QtQuick3D.Helpers
Window
{
id
:
window
width
:
1280
height
:
720
visible
:
true
View3D {
id
:
view
anchors.fill
:
parent
environment
:
SceneEnvironment {
clearColor
:
"black"
backgroundMode
:
SceneEnvironment.Color
}
PerspectiveCamera {
position
:
Qt.vector3d(0
, 0
, 300
)
clipNear
:
1.0
NumberAnimation
on
z
{
from
:
300
to
:
0
duration
:
10
*
1000
}
}
DirectionalLight {
eulerRotation.x
:
-
30
eulerRotation.y
:
-
70
ambientColor
:
Qt.rgba(0.5, 0.5, 0.5, 1.0)
}
RandomInstancing {
id
:
randomInstancing
instanceCount
:
1500
position
:
InstanceRange {
from
:
Qt.vector3d(-
300
, -
200
, -
500
)
to
:
Qt.vector3d(300
, 200
, 200
)
}
scale
:
InstanceRange {
from
:
Qt.vector3d(1
, 1
, 1
)
to
:
Qt.vector3d(10
, 10
, 10
)
proportional
:
true
}
rotation
:
InstanceRange {
from
:
Qt.vector3d(0
, 0
, 0
)
to
:
Qt.vector3d(360
, 360
, 360
)
}
color
:
InstanceRange {
from
:
"grey"
to
:
"white"
proportional
:
true
}
randomSeed
:
2021
}
InstanceListEntry {
id
:
redShip
position
:
Qt.vector3d(50
, 10
, 100
)
eulerRotation
:
Qt.vector3d(0
, 180
, 0
)
color
:
"red"
NumberAnimation
on
position.x {
from
:
50
to
:
-
70
duration
:
8000
}
}
InstanceListEntry {
id
:
greenShip
position
:
Qt.vector3d(0
, 0
, -
60
)
eulerRotation
:
Qt.vector3d(-
10
, 0
, 30
)
color
:
"green"
}
InstanceListEntry {
id
:
blueShip
position
:
Qt.vector3d(-
100
, -
100
, 0
)
color
:
"blue"
}
InstanceList {
id
:
manualInstancing
instances
:
[ redShip, greenShip, blueShip ]
}
Asteroid {
instancing
:
randomInstancing
NumberAnimation
on
eulerRotation.x {
from
:
0
to
:
360
duration
:
11000
loops
:
Animation.Infinite
}
}
SimpleSpaceship {
instancing
:
manualInstancing
}
}
}