En esta página

Qt 3D Renderizar geometría

Qt 3D Render proporciona una forma genérica de almacenar datos de geometría y especificar cómo deben ser leídos por el renderizador.

Buffer

La clase Qt3DCore::QBuffer almacena los datos en bruto. Esto actúa puramente como un array de memoria. En la mayoría de los casos un Qt3DCore::QBuffer será usado indirectamente al ser referenciado por uno o más Qt3DRender::QAttributes. Sin embargo hay ocasiones en las que un QBuffer puede ser utilizado directamente como la propiedad de valor de un QParameter cuando se trata de Objetos Buffer Uniformes (UBO) u Objetos Buffer de Almacenamiento Shader (SSBO).

Buffer {
    id: vertexBuffer
    type: Buffer.VertexBuffer
    data: buildVertexBufferData()
}

El atributo

Qt3DCore::QAttribute especifica cómo los datos contenidos en el buffer referenciado deben ser extraídos y pasados a una entrada de un vertex shader. Hace referencia a Qt3DCore::QBuffer y puede especificar la disposición de los atributos definiendo el tamaño del vértice, el tipo de datos, la distancia entre dos vértices y un desplazamiento inicial. El tipo de atributo también definirá si se va a utilizar como búfer de vértices o como búfer de índice. Esto te permite una completa flexibilidad de cómo estructurar tus datos en buffers. Es posible utilizar búferes separados para cada atributo de vértice, un búfer intercalado que contenga datos para todos los atributos o una combinación de búferes separados e intercalados.

Attribute {
    attributeType: Attribute.VertexAttribute
    vertexBaseType: Attribute.Float
    vertexSize: 3
    byteOffset: 0
    byteStride: 9 * 4
    count: 4
    name: defaultPositionAttributeName()
    buffer: vertexBuffer
}

Geometría

Un Qt3DCore::QGeometry agrega varios atributos para formar una pieza de geometría. Normalmente, una geometría adecuada proporcionará un atributo para las posiciones de los vértices, un atributo para las normales de los vértices y un atributo para las coordenadas de la textura. Si quieres que tu geometría funcione también con materiales de mapeado normal, necesitará proporcionar también un conjunto consistente de vectores tangentes de vértice.

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

Un Qt3DCore::QGeometryView toma un Qt3DCore::QGeometry. Proporciona propiedades para controlar la llamada a dibujo como el número de instancias a dibujar, la instancia inicial, el tipo de Qt3DCore::QGeometryView::PrimitiveType a utilizar, etc.

Define completamente los detalles de una malla, de modo que operaciones como el cálculo del volumen delimitador y el picking pueden realizarse en una malla sin necesidad de renderizarla.

GeometryView {
    instanceCount: 1
    indexOffset: 0
    firstInstance: 0
    primitiveType: GeometryRenderer.Triangles
    geometry: Geometry { ... }
}

GeometryRenderer

Qt3DRender::QGeometryRenderer es un QComponent que cuando es agregado por una QEntity permite dibujar el Qt3DCore::QGeometryView al que hace referencia. Un Qt3DRender::QGeometryRenderer se traduce en una llamada de dibujo a la API gráfica subyacente.

GeometryRenderer {
    view: GeometryView { ... }
}

Nota: Antes de Qt 6, Qt3DRender::QGeometryRenderer incluía detalles que ahora deben ser proporcionados por la instancia de la vista. Las propiedades siguen ahí en Qt 6 pero serán obsoletas y eliminadas en Qt 7.

© 2026 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.