Qt 3D 渲染几何图形
Qt 3D 渲染提供了一种通用方法来存储几何体数据,并指定渲染器应如何读取这些数据。
缓冲区
Qt3DCore::QBuffer 类存储原始数据。它纯粹是一个内存数组。在大多数情况下,Qt3DCore::QBuffer 会被一个或多个 Qt3DRender::QAttributes 间接引用使用。不过,在处理统一缓冲对象(UBO)或着色器存储缓冲对象(SSBO)时,有时也会直接将QBuffer 用作 QParameter 的值属性。
Buffer {
id: vertexBuffer
type: Buffer.VertexBuffer
data: buildVertexBufferData()
}
属性
Qt3DCore::QAttribute 指定应如何提取所引用缓冲区中的数据并将其传递给顶点着色器的输入。它引用 ,并可通过定义顶点大小、数据类型、两个顶点之间的跨距和起始偏移来指定属性布局。属性类型还将定义它是用作顶点缓冲区还是索引缓冲区。这样就可以完全灵活地安排缓冲区中的数据结构。可以为每个顶点属性使用独立的缓冲区,也可以使用包含所有属性数据的交错缓冲区,还可以将独立缓冲区和交错缓冲区结合使用。Qt3DCore::QBuffer
Attribute { attributeType: Attribute.VertexAttribute vertexBaseType: Attribute.Float vertexSize: 3 byteOffset: 0 byteStride: 9 * 4 count: 4 name: defaultPositionAttributeName() buffer: vertexBuffer }
几何图形
Qt3DCore::QGeometry 集合各种属性,形成一个几何体。通常,一个合适的几何体会提供一个顶点位置属性、一个顶点法线属性和一个纹理坐标属性。如果希望几何体也能与法线贴图材质配合使用,还需要提供一组一致的顶点切线向量。
Geometry { Attribute { attributeType: Attribute.VertexAttribute vertexBaseType: Attribute.Float vertexSize: 3 byteOffset: 0 byteStride: 9 * 4 count: 4 name: defaultPositionAttributeName() buffer: vertexBuffer } Attribute { attributeType: Attribute.VertexAttribute vertexBaseType: Attribute.Float vertexSize: 3 byteOffset: 3 * 4 byteStride: 9 * 4 count: 4 name: defaultNormalAttributeName() buffer: vertexBuffer }
几何视图
Qt3DCore::QGeometryView 包含一个Qt3DCore::QGeometry 。它提供了控制绘制调用的属性,例如要绘制的实例数、起始实例、要使用的Qt3DCore::QGeometryView::PrimitiveType 类型等。
它完全定义了网格的细节,因此可以在网格上进行边界体积计算和拾取等操作,而无需对网格进行渲染。
GeometryView { instanceCount: 1 indexOffset: 0 firstInstance: 0 primitiveType: GeometryRenderer.Triangles geometry: Geometry { ... } }
几何渲染器
Qt3DRender::QGeometryRenderer 是一个 QComponent,当它与一个 QEntity 相结合时,就能绘制它所引用的 。 将转化为对底层图形 API 的绘制调用。Qt3DCore::QGeometryView Qt3DRender::QGeometryRenderer
GeometryRenderer { view: GeometryView { ... } }
注: 在 Qt 6 之前,Qt3DRender::QGeometryRenderer 包含现在打算由视图实例提供的详细信息。这些属性在 Qt 6 中仍然存在,但将被弃用,然后在 Qt 7 中删除。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.