blob: 556b60f3668011709979e71cabd9c1b8e9725360 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example runtimeloader
\ingroup quick3d-examples
\title Qt Quick 3D - RuntimeLoader Example
\examplecategory {3D}
\brief Demonstrates how assets can be loaded at runtime.
\image runtimeloader-example.jpg
This example shows how to implement a simple asset viewer using the \l RuntimeLoader.
See the \l{Qt Quick 3D - Introduction}{introductory example documentation} for an explanation of
how to set up a basic scene. Once we have the scene set up we can add the \l RuntimeLoader
item:
\snippet runtimeloader/main.qml runtimeloader
Loading an asset is done by setting the RuntimeLoader's \l {RuntimeLoader::source}{source}
property. In this example the \l {RuntimeLoader::source}{source} is bound to the \c importUrl
which will be changed when the user selects a file in the file-dialog.
Assuming the asset can be loaded, the content will be created as children of the \l
RuntimeLoader \c importNode. Note that the \l RuntimeLoader is a \l Node type, and since it is
also the root node for the loaded asset, any transforms applied to the \c importNode will also
affect its children.
\section2 Error handling
If an asset fails to load then the RuntimeLoader's \l {RuntimeLoader::status}{status} property
will be set to \c Error. The RuntimeLoader's \l {RuntimeLoader::errorString}{errorString} can
then be queried to get a more detailed description of the error.
In this example we will be displaying the error message in a red message box in the middle of
the screen, like this:
\snippet runtimeloader/main.qml status report
\section2 Moving the camera
To make it possible to change the position of the camera we use the \l WasdController from the
\l{Qt Quick 3D Helpers QML Types}{Helpers} module and bind it to our camera, like this:
\snippet runtimeloader/main.qml camera control
In addition to the \l WasdController, the example uses a \l [QML]{QtQuick}{WheelHandler} and
a \l [QML]{QtQuick}{PointerHandler} to scale and rotate the model.
\section2 Instancing
The RuntimeLoader item can also be used in combination with instancing, as shown here:
\snippet runtimeloader/main.qml instancing
RuntimeLoader does not inherit from Model, but it has its own
\l{RuntimeLoader::instancing}{instancing} property which allows us to instance a complex
imported asset as if it were a simple model. In this case we use the \l RandomInstancing
component from the \l{Qt Quick 3D Helpers QML Types}{Helpers} module to randomly position items
within a fixed area and with a random color.
\section2 Material Overrides
Sometimes when loading an asset, it is possible that it may not look as expected. The
\l {DebugSettings::materialOverride}{materialOverride} property will change how each material
in the scene is rendered to display a particular contribution to the overall rendering. This can
be useful for determining what exactly about the asset is not correct so that the original asset
can be adjusted if necessary.
\image runtimeloader-normals.jpg
*/
|