本页内容

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 { ... }
}

GeometryRenderer

Qt3DRender::QGeometryRenderer 是一个 QComponent,当被 QEntity 聚合时,可用于绘制它所引用的 Qt3DCore::QGeometryView。一个 Qt3DRender::QGeometryRenderer 会被转换为对底层图形 API 的绘制调用。

GeometryRenderer {
    view: GeometryView { ... }
}

注意:在 Qt 6之前 ,Qt3DRender::QGeometryRenderer 包含了一些细节,而这些细节现在应由视图实例提供。这些属性在 Qt 6 中仍然存在,但将在 Qt 7 中被标记为弃用,随后移除。

© 2026 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.