Геометрия рендеринга Qt 3D
Qt 3D Render предоставляет универсальный способ хранения данных геометрии и определения, как их должен считывать рендерер.
Буфер
Класс Qt3DRender::QBuffer хранит исходные данные. Он работает как массив памяти. В большинстве случаев Qt3DRender::QBuffer используется косвенно, ссылается на один или несколько объектов Qt3DRender::QAttributes. Однако бывают случаи, когда QBuffer используется напрямую в качестве свойства value объекта QParameter при работе с Uniform Buffer Objects (UBO) или Shader Storage Buffer Objects (SSBO).
Buffer {
id: vertexBuffer
type: Buffer.VertexBuffer
data: buildVertexBufferData()
} Атрибут
Qt3DRender::QAttribute определяет, как данные, содержащиеся в ссылающемся буфере, должны быть извлечены и переданы на вход шейдера вершин. Он ссылается на Qt3DRender::QBuffer и может указывать структуру атрибутов, определяя размер вершины, тип данных, шаг между двумя вершинами и начальный смещение. Тип атрибута также определяет, будет ли он использоваться как буфер вершин или как буфер индексов. Это позволяет вам полностью гибко структурировать данные в буферах. Возможно использование отдельных буферов для каждого атрибута вершины, интерлизованного буфера, содержащего данные для всех атрибутов, или сочетания отдельных и интерлизованных буферов.
Attribute {
attributeType: Attribute.VertexAttribute
vertexBaseType: Attribute.Float
vertexSize: 3
byteOffset: 0
byteStride: 9 * 4
count: 4
name: defaultPositionAttributeName()
buffer: vertexBuffer
} Геометрия
Объект Qt3DRender::QGeometry агрегирует различные атрибуты для формирования части геометрии. Обычно правильная геометрия предоставляет атрибут для координат вершин, атрибут для нормалей вершин и атрибут для координат текстур. Если вы хотите, чтобы ваша геометрия также работала с материалами с нормальным отображением, она также должна предоставить согласованный набор векторов касательных вершин.
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
} Геометрия рендерер
Qt3DRender::QGeometryRenderer — это QComponent, который, когда агрегируется QEntity, позволяет отображать Qt3DRender::QGeometry, на которое он ссылается. Он предоставляет свойства для управления вызовом отрисовки, такие как количество экземпляров для отрисовки, начальный экземпляр, тип Qt3DRender::QGeometryRenderer::PrimitiveType, который следует использовать и т. д. Qt3DRender::QGeometryRenderer преобразуется в вызов отрисовки для базового графического API.
GeometryRenderer {
instanceCount: 1
indexOffset: 0
firstInstance: 0
primitiveType: GeometryRenderer.Triangles
geometry: Geometry { ... }
}
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qt3drender-geometry.html