Spec-Zone.ru › Qt

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API