Qt Quick 3D - 实例渲染示例
演示如何在 Qt Quick 3D 中进行实例渲染。
此示例说明如何使用基本 QML API 进行实例渲染。
宇宙飞船和小行星模型使用 Blender 3D 建模工具创建,并使用 balsam 导入。
随机实例化
我们使用 RandomInstancing 创建一个定义我们小行星场的随机表格
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 }
位置和旋转可以自由变化。缩放在所有方向上设置为均匀,颜色为灰度。这是通过设置 proportional 属性来实现的。
使用 InstanceList 手动放置宇宙飞船
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 ] }
InstanceListEntry 的属性是可绑定的:在这里我们动画红色飞船,使其穿越摄像机的路径。
最后我们将实例化表格应用于对象
Asteroid { instancing: randomInstancing NumberAnimation on eulerRotation.x { from: 0 to: 360 duration: 11000 loops: Animation.Infinite } } SimpleSpaceship { instancing: manualInstancing }
通过动画小行星模型的旋转,所有实例都会旋转,而无需更改实例化表格的内容。由于小行星实例具有随机旋转,所有小行星都会绕不同的轴旋转。
文件
© 2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。提供的文档受 GNU 自由文档许可证版本 1.3 的条款约束,该许可证由自由软件基金会发布。Qt 及相关标志是芬兰及/或世界其他国家 Qt 公司的商标。所有其他商标均为各自所有者的财产。