Qt Quick 3D - RuntimeLoader 示例
演示如何在运行时加载资产。
本示例展示了如何使用 RuntimeLoader 实现一个简单的资产查看器。
有关如何设置基本场景的解释,请参见 入门示例文档。一旦我们设置了场景,我们就可以添加 RuntimeLoader 元素
RuntimeLoader { id: importNode source: windowRoot.importUrl instancing: instancingButton.checked ? instancing : null onBoundsChanged: helper.updateBounds(bounds) }
通过设置 RuntimeLoader 的 source 属性来加载资产。在本例中,source 绑定到 importUrl
,当用户在文件对话框中选择文件时将发生变化。
假设资产可以加载,则内容将被创建为 RuntimeLoader 的 importNode
的子元素。请注意,RuntimeLoader 是一个 Node 类型,并且由于它也是加载的资产的根节点,因此应用于 importNode
的任何变换也将影响其子元素。
错误处理
如果资产加载失败,则 RuntimeLoader 的 status 属性将设置为 Error
。然后可以通过查询 RuntimeLoader 的 errorString 获取有关错误的更详细描述。
在本例中,我们将错误消息显示在中间的红色消息框中,如下所示
Rectangle { id: messageBox visible: importNode.status !== RuntimeLoader.Success color: "red" width: parent.width * 0.8 height: parent.height * 0.8 anchors.centerIn: parent radius: Math.min(width, height) / 10 opacity: 0.6 Text { anchors.fill: parent font.pixelSize: 36 text: "Status: " + importNode.errorString + "\nPress \"Import...\" to import a model" color: "white" wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } }
移动相机
为了能够改变相机的位置,我们使用了来自 Helpers 模块的 WasdController 并将其绑定到我们的相机,如下所示
OrbitCameraController { id: orbitController origin: orbitCameraNode camera: orbitCamera enabled: helper.orbitControllerEnabled } WasdController { id: wasdController controlledObject: wasdCamera enabled: !helper.orbitControllerEnabled }
除了 WasdController 之外,本例还使用了一个 WheelHandler 和一个 PointerHandler 来缩放和旋转模型。
实例化
如上所示,RuntimeLoader 元素也可以与实例化结合使用。
RandomInstancing { id: instancing instanceCount: 30 position: InstanceRange { property alias boundsDiameter: helper.boundsDiameter from: Qt.vector3d(-3*boundsDiameter, -3*boundsDiameter, -3*boundsDiameter); to: Qt.vector3d(3*boundsDiameter, 3*boundsDiameter, 3*boundsDiameter) } color: InstanceRange { from: "black"; to: "white" } }
RuntimeLoader 并没有继承自 Model,但它拥有自己的 instancing 属性,这允许我们将复杂的导入资产实例化为一个简单的模型。在这种情况下,我们使用来自 Helpers 模块的 RandomInstancing 组件,在固定区域内随机定位项目,并且具有随机颜色。
材质覆盖
有时在加载资产时,它可能看起来与预期不符。materialOverride 属性将改变场景中每个材质的渲染方式,以显示整体渲染的特定贡献。这有助于确定资产中不正确的地方,以便如有必要可以对原始资产进行调整。
文件
© 2024 QT公司有限公司。包含在此处的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的《GNU自由文档许可协议版本1.3》许可的。Qt及其相关标志是QT公司(芬兰)及其它世界各地公司的商标。所有其他商标均为各自所有者的财产。