Sur cette page

Qt 3D Géométrie de rendu

Qt 3D Le rendu offre un moyen générique de stocker les données de géométrie et de spécifier comment celles-ci doivent être lues par le moteur de rendu.

Tampon

La classe Qt3DCore::QBuffer stocke les données brutes. Elle agit simplement comme un tableau en 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 parfois qu’un ` QBuffer ` soit utilisé directement comme propriété « value » d’un `QParameter` lorsqu’on traite des objets de tampon uniformes (UBO) ou des objets de tampon de stockage de shader (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 shader de sommets. Il fait référence à un Qt3DCore::QBuffer et peut spécifier la disposition des attributs en définissant la taille des sommets, le type de données, le pas entre deux sommets et un décalage de départ. Le type de l’attribut définit également s’il doit être utilisé comme tampon de sommets ou comme tampon d’index. Cela vous offre une flexibilité totale quant à la manière dont vous structurez vos données dans les tampons. Il est possible d’utiliser des tampons distincts pour chaque attribut de sommet, un tampon entrelacé contenant les données de tous les attributs, ou une combinaison de tampons distincts 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 objet Qt3DCore::QGeometry regroupe divers attributs pour former une géométrie. En général, une géométrie correcte fournit un attribut pour les positions des sommets, un attribut pour les normales des sommets et un attribut pour les coordonnées de texture. Si vous souhaitez que votre géométrie fonctionne également avec des matériaux à carte de normales, 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 objet Qt3DCore::QGeometryView prend en paramètre un objet Qt3DCore::QGeometry. Il fournit des propriétés permettant de contrôler l’appel de dessin, telles que le nombre d’instances à dessiner, l’instance de départ, le type d’ Qt3DCore::QGeometryView::PrimitiveType s à utiliser, etc.

Elle définit de manière exhaustive les détails d’un maillage, de sorte que des opérations telles que le calcul du volume englobant et la sélection puissent ê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é par un QEntity, permet de dessiner le Qt3DCore::QGeometryView auquel il fait référence. Un Qt3DRender::QGeometryRenderer est traduit en un appel de dessin vers l’API graphique sous-jacente.

GeometryRenderer {
    view: GeometryView { ... }
}

Remarque : avant Qt 6, Qt3DRender::QGeometryRenderer incluait des détails qui sont désormais censés être fournis par l’instance de vue. Ces 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.