Spec-Zone.ru › Qt 6.1

Геометрия отрисовки Qt 3D

Qt 3D Render предоставляет универсальный способ хранения данных геометрии и указания, как их следует считывать рендерером.

  • Буфер
  • Атрибут
  • Геометрия
  • Рендерер геометрии

Буфер

Класс Qt3DCore::QBuffer хранит исходные данные. Он действует как массив памяти. В большинстве случаев Qt3DCore::QBuffer используется косвенно, на него ссылаются один или несколько объектов Qt3DRender::QAttributes. Однако бывают случаи, когда QBuffer может использоваться непосредственно в качестве свойства value объекта 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 — это QComponent, который, когда агрегируется 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.0/qt3drender-geometry.html

Spec-Zone.ru

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