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.