116 lines
3.0 KiB
QML
116 lines
3.0 KiB
QML
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
|
|
import QtQuick
|
|
import QtQuick.Window
|
|
import QtCore
|
|
import QtQuick3D
|
|
import QtQuick3D.Helpers
|
|
|
|
Item {
|
|
id: previewRoot
|
|
|
|
property url skyBoxTexturePath: "assets/skybox/OpenfootageNET_lowerAustria01-1024.hdr"
|
|
property CustomMaterial currentMaterial: CustomMaterial {
|
|
|
|
}
|
|
|
|
property PrincipledMaterial fallbackMaterial: PrincipledMaterial {
|
|
baseColor: "magenta"
|
|
}
|
|
|
|
property alias modelInstance: model
|
|
property alias rootNode: resourceRoot
|
|
property alias instanceEntry: instEntry
|
|
|
|
Settings {
|
|
property alias cameraOriginRotation: originNode.rotation
|
|
property alias cameraRotation: sceneCamera.rotation
|
|
property alias cameraPosition: sceneCamera.position
|
|
}
|
|
|
|
View3D {
|
|
id: view
|
|
anchors.fill: parent
|
|
environment: SceneEnvironment {
|
|
id: sceneEnvironment
|
|
backgroundMode: previewControls.enableIBL ? SceneEnvironment.SkyBox : SceneEnvironment.Transparent
|
|
lightProbe: previewControls.enableIBL ? skyboxTexture : null
|
|
}
|
|
|
|
Texture {
|
|
id: skyboxTexture
|
|
source: previewRoot.skyBoxTexturePath
|
|
}
|
|
|
|
Node {
|
|
id: resourceRoot
|
|
}
|
|
|
|
property alias cameraOrigin: originNode
|
|
|
|
Node {
|
|
id: originNode
|
|
PerspectiveCamera {
|
|
id: sceneCamera
|
|
z: 300
|
|
}
|
|
}
|
|
|
|
camera: sceneCamera
|
|
|
|
DirectionalLight {
|
|
id: light
|
|
z: 600
|
|
eulerRotation: Qt.vector3d(30, 0, 0)
|
|
visible: previewControls.enableDirectionalLight
|
|
}
|
|
|
|
Model {
|
|
id: model
|
|
source: previewControls.modelSource
|
|
materials: [ previewRoot.currentMaterial, previewRoot.fallbackMaterial ]
|
|
property bool enableInstancing: false
|
|
instancing: enableInstancing ? manualInstancing : null
|
|
}
|
|
|
|
InstanceList {
|
|
id: manualInstancing
|
|
instances: [instEntry, instEntry1, instEntry2, instEntry3, instEntry4]
|
|
}
|
|
InstanceListEntry {
|
|
id: instEntry
|
|
}
|
|
InstanceListEntry {
|
|
id: instEntry1
|
|
position: Qt.vector3d(120, 150, 150);
|
|
}
|
|
InstanceListEntry {
|
|
id: instEntry2
|
|
position: Qt.vector3d(-70, 70, -100);
|
|
}
|
|
InstanceListEntry {
|
|
id: instEntry3
|
|
position: Qt.vector3d(-100, -120, -70);
|
|
}
|
|
InstanceListEntry {
|
|
id: instEntry4
|
|
position: Qt.vector3d(120, -50, 100);
|
|
}
|
|
|
|
OrbitCameraController {
|
|
id: cameraController
|
|
origin: originNode
|
|
camera: sceneCamera
|
|
panEnabled: false
|
|
}
|
|
}
|
|
|
|
PreviewControls {
|
|
id: previewControls
|
|
width: parent.width
|
|
targetView: view
|
|
orbitCamera: cameraController
|
|
}
|
|
}
|