Auf dieser Seite

Qt 3D Geometrie rendern

Qt 3D Render bietet eine generische Methode zum Speichern von Geometriedaten und zum Festlegen, wie diese vom Renderer gelesen werden sollen.

Puffer

Die Klasse `Qt3DCore::QBuffer` speichert die Rohdaten. Sie fungiert dabei lediglich als Speicherarray. In den meisten Fällen wird ein `Qt3DCore::QBuffer` indirekt verwendet, indem er von einem oder mehreren `Qt3DRender::QAttributes` referenziert wird. Es gibt jedoch Fälle, in denen ein ` QBuffer ` direkt als Wert-Eigenschaft eines `QParameter` verwendet werden kann, beispielsweise beim Umgang mit Uniform Buffer Objects (UBO) oder Shader Storage Buffer Objects (SSBO).

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

Das Attribut

Qt3DCore::QAttribute legt fest, wie die im referenzierten Puffer enthaltenen Daten extrahiert und an einen Eingang eines Vertex-Shaders übergeben werden sollen. Es verweist auf einen Qt3DCore::QBuffer und kann das Layout der Attribute durch die Definition der Vertex-Größe, des Datentyps, des Abstands zwischen zwei Vertexen und eines Start-Offsets festlegen. Der Typ des Attributs legt zudem fest, ob es als Vertex-Puffer oder als Index-Puffer verwendet werden soll. Dies ermöglicht Ihnen vollständige Flexibilität bei der Strukturierung Ihrer Daten in Puffern. Es ist möglich, separate Puffer für jedes Vertex-Attribut zu verwenden, einen verschachtelten Puffer, der Daten für alle Attribute enthält, oder eine Kombination aus separaten und verschachtelten Puffern.

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

Geometrie

Ein Qt3DCore::QGeometry fasst verschiedene Attribute zu einer Geometrie zusammen. In der Regel verfügt eine korrekte Geometrie über ein Attribut für Scheitelpunktpositionen, ein Attribut für Scheitelpunktnormalen und ein Attribut für Texturkoordinaten. Wenn Ihre Geometrie auch mit normalgemappten Materialien funktionieren soll, muss sie zudem einen konsistenten Satz von Scheitelpunkt-Tangentialvektoren bereitstellen.

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

Ein Qt3DCore::QGeometryView nimmt ein Qt3DCore::QGeometry entgegen. Er stellt Eigenschaften zur Steuerung des Draw-Calls bereit, wie beispielsweise die Anzahl der zu zeichnenden Instanzen, die Startinstanz, die Art der zu verwendenden „ Qt3DCore::QGeometryView::PrimitiveType “ usw.

Es definiert die Details eines Meshes vollständig, sodass Operationen wie die Berechnung des Begrenzungsvolumens und das Auswählen (Picking) an einem Mesh durchgeführt werden können, ohne dass dieses gerendert werden muss.

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

GeometryRenderer

Qt3DRender::QGeometryRenderer ist eine QComponent, die, wenn sie von einer QEntity aggregiert wird, das Zeichnen der von ihr referenzierten Qt3DCore::QGeometryView ermöglicht. Ein Qt3DRender::QGeometryRenderer wird in einen Zeichenaufruf an die zugrunde liegende Grafik-API übersetzt.

GeometryRenderer {
    view: GeometryView { ... }
}

Hinweis: Vor Qt 6 enthielt Qt3DRender::QGeometryRenderer Details, die nun von der View-Instanz bereitgestellt werden sollen. Die Eigenschaften sind in Qt 6 zwar noch vorhanden, werden jedoch in Qt 7 als veraltet markiert und anschließend entfernt.

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