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