C

Q3DSGeometry 类

表示一个网格几何体。 更多...

头文件 #include <Q3DSGeometry>
自从Qt 3D Studio 2.4

此类是在 Qt 3D Studio 2.4 中引入的。

公共类型

枚举PrimitiveType { UnknownType, Points, LineStrip, LineLoop, Lines, …, Patches }

公共函数

Q3DSGeometry()
虚拟~Q3DSGeometry()
voidaddAttribute(Attribute::Semantic semantic, Attribute::ComponentType componentType = Attribute::DefaultType)
voidaddAttribute(const Q3DSGeometry::Attribute &att)
Q3DSGeometry::Attributeattribute(int idx) const
intattributeCount() const
voidclear()
const QByteArray &indexBuffer() const
QByteArray &indexBuffer()
Q3DSGeometry::PrimitiveTypeprimitiveType() const
voidsetIndexData(const QByteArray &data)
voidsetPrimitiveType(Q3DSGeometry::PrimitiveType type)
voidsetVertexData(const QByteArray &data)
const QByteArray &vertexBuffer() const
QByteArray &vertexBuffer()

详细描述

此类描述了用于动态网格创建的网格几何体。该几何体由顶点缓冲区和可选的索引缓冲区组成。几何体属性用于定义如何解释这些缓冲区中的数据。

例如,创建一个简单的纹理金字塔几何体

// A vertex in vertex buffer consists of position, normal, and texture coordinates
struct Vertex {
    QVector3D position;
    QVector3D normal;
    QVector2D uv;
};

// The vertex buffer
QVector<Vertex> vertices;

// Creates a triangle into the vertex buffer
auto createTriangle = [&](const QVector3D &xyz1, const QVector2D &uv1,
                          const QVector3D &xyz2, const QVector2D &uv2,
                          const QVector3D &xyz3, const QVector2D &uv3) {
    QVector3D n = QVector3D::crossProduct(xyz2 - xyz1, xyz3 - xyz1).normalized();
    vertices.append({xyz1, n, uv1});
    vertices.append({xyz2, n, uv2});
    vertices.append({xyz3, n, uv3});
};

// Pyramid corner coordinates in local space
QVector3D xyz[5] = {{0, 0, 50}, {50, 50, -50}, {50, -50, -50}, {-50, -50, -50}, {-50, 50, -50}};

// Possible texture coordinates for triangle corners
QVector2D uv[4] = {{1, 1}, {1, 0}, {0, 0}, {0, 1}};

// Pyramid consists of four side triangles and a bottom quad made of two triangles
createTriangle(xyz[0], uv[0], xyz[1], uv[1], xyz[2], uv[2]);
createTriangle(xyz[0], uv[0], xyz[2], uv[1], xyz[3], uv[2]);
createTriangle(xyz[0], uv[0], xyz[3], uv[1], xyz[4], uv[2]);
createTriangle(xyz[0], uv[0], xyz[4], uv[1], xyz[1], uv[2]);
createTriangle(xyz[1], uv[0], xyz[4], uv[2], xyz[3], uv[1]);
createTriangle(xyz[1], uv[0], xyz[3], uv[3], xyz[2], uv[2]);

// Make a byte array out of the vertex buffer
QByteArray vertexBuffer(reinterpret_cast<const char *>(vertices.constData()),
                        vertices.size() * int(sizeof(Vertex)));

// Create the geometry. Triangle is the default primitive type, so we don't specify it.
// The order of the added attributes must match the order of the attribute data in the
// vertex buffer.
Q3DSGeometry pyramid;
pyramid.setVertexData(vertexBuffer);
pyramid.addAttribute(Q3DSGeometry::Attribute::PositionSemantic);
pyramid.addAttribute(Q3DSGeometry::Attribute::NormalSemantic);
pyramid.addAttribute(Q3DSGeometry::Attribute::TexCoordSemantic);

另请参阅Q3DSPresentation::createMesh

成员类型文档

枚举 Q3DSGeometry::PrimitiveType

此枚举指定了几何体的可能渲染原语。有关渲染原语及其如何影响顶点数据的信息,请参阅 OpenGL 文档。

常量描述
Q3DSGeometry::UnknownType0未知的原语类型。
Q3DSGeometry::Points1几何体使用点原语。
Q3DSGeometry::LineStrip2几何体使用线条带原语。
Q3DSGeometry::LineLoop3几何体使用线条环原语。
Q3DSGeometry::Lines4几何体使用线条原语。
Q3DSGeometry::TriangleStrip5几何体使用三角形带原语。
Q3DSGeometry::TriangleFan6几何体使用三角形扇原语。
Q3DSGeometry::Triangles7几何体使用三角形原语。这是默认的原语类型。
Q3DSGeometry::Patches8几何体使用补丁原语。

成员函数文档

Q3DSGeometry::Q3DSGeometry()

构造一个新的 Q3DSGeometry 实例。

[虚拟] Q3DSGeometry::~Q3DSGeometry()

析构函数。

void Q3DSGeometry::addAttribute(Attribute::Semantic semantic, Attribute::ComponentType componentType = Attribute::DefaultType)

设置此几何体的属性。几何体属性指定了顶点索引缓冲区中的数据应该如何解释。每个属性由一个语义组成,表明这个属性引用的是哪个顶点属性,以及componentType,它指示属性数据的每个元素的数据类型。该语义还确定该属性在顶点缓冲区中的组件数量。对于TexCoordSemantic组件数量为两个,对于其他顶点缓冲区语义数量为三个。索引缓冲区的组件数量始终为一个。

例如,PositionSemantic指定局部空间中的顶点位置,因此它由三个组件组成:x、y和z坐标。

addAttribute 调用的顺序必须与顶点数据中属性的顺序匹配。顺序很重要,因为它用于计算每个属性的偏移和步长。

void Q3DSGeometry::addAttribute(const Q3DSGeometry::Attribute &att)

将属性 att 设置到此几何体。

另请参阅addAttribute

Q3DSGeometry::Attribute Q3DSGeometry::attribute(int idx) const

返回索引为 idx 的已添加属性。

另请参阅addAttributeattributeCount

int Q3DSGeometry::attributeCount() const

返回设置为此几何体的属性数量。

另请参阅addAttribute

void Q3DSGeometry::clear()

移除所有添加的属性和缓冲区,并将几何体重置为未初始化状态。

另请参阅primitiveType

const QByteArray &Q3DSGeometry::indexBuffer() const

返回当前设置的索引缓冲区数据。

另请参阅setIndexData

QByteArray &Q3DSGeometry::indexBuffer()

这是一个重载函数。

Q3DSGeometry::PrimitiveType Q3DSGeometry::primitiveType() const

返回此几何体的原始类型。

另请参阅setPrimitiveType

void Q3DSGeometry::setIndexData(const QByteArray &data)

将索引缓冲区设置为 data。您必须还向几何体添加一个带有 IndexSemantic 的属性。

另请参阅addAttributeindexBufferAttribute::Semantic

void Q3DSGeometry::setPrimitiveType(Q3DSGeometry::PrimitiveType type)

设置此几何体的基本类型为类型

另请参阅primitiveType

void Q3DSGeometry::setVertexData(const QByteArray &data)

将顶点缓冲区设置为data。数据必须包含所有属性数据,并且格式为交错格式。您还必须向几何体添加属性来指定顶点缓冲区数据的解释方式。

另请参阅添加属性顶点缓冲区

const QByteArray &Q3DSGeometry::vertexBuffer() const

返回当前设置的顶点缓冲区数据。

另请参阅设置顶点数据

QByteArray &Q3DSGeometry::vertexBuffer()

这是一个重载函数。

在某些Qt许可证下可用。
了解更多信息。