Qt 3D Geometrie rendern

Qt 3D Render bietet eine allgemeine Möglichkeit, Geometriedaten zu speichern und festzulegen, wie sie vom Renderer gelesen werden sollen.

Puffer

Die Klasse Qt3DCore::QBuffer speichert die Rohdaten. Sie fungiert als reines Array für den Speicher. In den meisten Fällen wird ein Qt3DCore::QBuffer indirekt verwendet, indem es von einem oder mehreren Qt3DRender::QAttributes referenziert wird. Es kann jedoch vorkommen, dass ein QBuffer direkt als Werteigenschaft eines QParameters verwendet wird, wenn es um Uniform Buffer Objects (UBO) oder Shader Storage Buffer Objects (SSBO) geht.

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

Das Attribut

Qt3DCore::QAttribute gibt an, wie die im referenzierten Puffer enthaltenen Daten extrahiert und an einen Eingang eines Vertex-Shaders übergeben werden sollen. Es referenziert eine Qt3DCore::QBuffer und kann das Layout der Attribute spezifizieren, indem es die Scheitelpunktgröße, den Datentyp, den Abstand zwischen zwei Scheitelpunkten und einen Startoffset definiert. Der Typ des Attributs bestimmt auch, ob es als Scheitelpunktpuffer oder als Indexpuffer verwendet werden soll. Dies gibt Ihnen völlige Flexibilität, wie Sie Ihre Daten in Puffern strukturieren. Es ist möglich, separate Puffer für jedes Scheitelpunktattribut, einen verschachtelten Puffer mit Daten für alle Attribute oder eine Kombination aus separaten und verschachtelten Puffern zu verwenden.

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

Geometrie

Eine Qt3DCore::QGeometry fasst verschiedene Attribute zu einer Geometrie zusammen. Normalerweise enthält eine Geometrie ein Attribut für Scheitelpunktpositionen, ein Attribut für Scheitelnormalen und ein Attribut für Texturkoordinaten. Wenn Ihre Geometrie auch mit normal gemappten Materialien arbeiten soll, muss sie auch einen konsistenten Satz von Scheitelpunkttangentenvektoren 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

Eine Qt3DCore::QGeometryView nimmt eine Qt3DCore::QGeometry entgegen. Sie bietet Eigenschaften zur Steuerung des Zeichenaufrufs, wie z. B. die Anzahl der zu zeichnenden Instanzen, die Startinstanz, den zu verwendenden Typ von Qt3DCore::QGeometryView::PrimitiveType, usw.

Sie definiert die Details eines Netzes vollständig, so dass Operationen wie die Berechnung von Begrenzungsvolumina und das Picken auf einem Netz durchgeführt werden können, ohne dass es 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 Qt3DCore::QGeometryView ermöglicht, auf die sie verweist. Eine 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 jetzt von der View-Instanz bereitgestellt werden sollen. Die Eigenschaften sind in Qt 6 noch vorhanden, werden aber in Qt 7 veraltet sein und dann entfernt werden.

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