Sur cette page

Qt 3D Rendu de la géométrie

Qt 3D Render fournit un moyen générique de stocker les données géométriques et de spécifier comment elles doivent être lues par le moteur de rendu.

Tampon

La classe Qt3DCore::QBuffer stocke les données brutes. Elle agit purement comme un tableau de mémoire. Dans la plupart des cas, un Qt3DCore::QBuffer sera utilisé indirectement en étant référencé par un ou plusieurs Qt3DRender::QAttributes. Cependant, il arrive qu'un QBuffer soit utilisé directement comme propriété de valeur d'un QParameter lorsqu'il s'agit d'Uniform Buffer Objects (UBO) ou de Shader Storage Buffer Objects (SSBO).

Buffer {
    id: vertexBuffer
    type: Buffer.VertexBuffer
    data: buildVertexBufferData()
}

Attribut

Qt3DCore::QAttribute spécifie comment les données contenues dans le tampon référencé doivent être extraites et transmises à une entrée d'un vertex shader. Il fait référence à Qt3DCore::QBuffer et peut spécifier la disposition des attributs en définissant la taille du sommet, le type de données, la distance entre deux sommets et un décalage de départ. Le type d'attribut détermine également s'il doit être utilisé comme tampon de sommet ou comme tampon d'index. Cela vous permet de structurer vos données dans des tampons de manière totalement flexible. Il est possible d'utiliser des tampons séparés pour chaque attribut de sommet, un tampon entrelacé contenant des données pour tous les attributs ou une combinaison de tampons séparés et entrelacés.

Attribute {
    attributeType: Attribute.VertexAttribute
    vertexBaseType: Attribute.Float
    vertexSize: 3
    byteOffset: 0
    byteStride: 9 * 4
    count: 4
    name: defaultPositionAttributeName()
    buffer: vertexBuffer
}

Géométrie

Un site Qt3DCore::QGeometry regroupe divers attributs pour former un morceau de géométrie. En général, une géométrie appropriée fournit un attribut pour les positions des vertex, un attribut pour les normales des vertex et un attribut pour les coordonnées de texture. Si vous souhaitez que votre géométrie fonctionne également avec des matériaux à cartographie normale, elle devra également fournir un ensemble cohérent de vecteurs tangents aux sommets.

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
}

GeometryView

Un Qt3DCore::QGeometryView prend un Qt3DCore::QGeometry. Il fournit des propriétés pour contrôler l'appel au dessin, comme le nombre d'instances à dessiner, l'instance de départ, le type de Qt3DCore::QGeometryView::PrimitiveType à utiliser, etc.

Il définit complètement les détails d'un maillage de sorte que des opérations telles que le calcul du volume de délimitation et la sélection peuvent être effectuées sur un maillage sans qu'il soit nécessaire de le rendre.

GeometryView {
    instanceCount: 1
    indexOffset: 0
    firstInstance: 0
    primitiveType: GeometryRenderer.Triangles
    geometry: Geometry { ... }
}

GeometryRenderer

Qt3DRender::QGeometryRenderer est un QComponent qui, lorsqu'il est agrégé à une QEntity, permet de dessiner le site Qt3DCore::QGeometryView auquel il fait référence. Une adresse Qt3DRender::QGeometryRenderer est traduite en un appel de dessin à l'API graphique sous-jacente.

GeometryRenderer {
    view: GeometryView { ... }
}

Note : Avant Qt 6, Qt3DRender::QGeometryRenderer incluait des détails qui sont maintenant destinés à être fournis par l'instance de vue. Les propriétés sont toujours présentes dans Qt 6 mais seront dépréciées puis supprimées dans 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.