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 公司的商标。所有其他商标均为各自所有者的财产。