C
Q3DSGeometry 类
表示一个网格几何体。 更多...
头文件 | #include <Q3DSGeometry> |
自从 | Qt 3D Studio 2.4 |
此类是在 Qt 3D Studio 2.4 中引入的。
公共类型
枚举 | PrimitiveType { UnknownType, Points, LineStrip, LineLoop, Lines, …, Patches } |
公共函数
Q3DSGeometry() | |
虚拟 | ~Q3DSGeometry() |
void | addAttribute(Attribute::Semantic semantic, Attribute::ComponentType componentType = Attribute::DefaultType) |
void | addAttribute(const Q3DSGeometry::Attribute &att) |
Q3DSGeometry::Attribute | attribute(int idx) const |
int | attributeCount() const |
void | clear() |
const QByteArray & | indexBuffer() const |
QByteArray & | indexBuffer() |
Q3DSGeometry::PrimitiveType | primitiveType() const |
void | setIndexData(const QByteArray &data) |
void | setPrimitiveType(Q3DSGeometry::PrimitiveType type) |
void | setVertexData(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::UnknownType | 0 | 未知的原语类型。 |
Q3DSGeometry::Points | 1 | 几何体使用点原语。 |
Q3DSGeometry::LineStrip | 2 | 几何体使用线条带原语。 |
Q3DSGeometry::LineLoop | 3 | 几何体使用线条环原语。 |
Q3DSGeometry::Lines | 4 | 几何体使用线条原语。 |
Q3DSGeometry::TriangleStrip | 5 | 几何体使用三角形带原语。 |
Q3DSGeometry::TriangleFan | 6 | 几何体使用三角形扇原语。 |
Q3DSGeometry::Triangles | 7 | 几何体使用三角形原语。这是默认的原语类型。 |
Q3DSGeometry::Patches | 8 | 几何体使用补丁原语。 |
成员函数文档
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 的已添加属性。
另请参阅addAttribute 和 attributeCount。
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
的属性。
另请参阅addAttribute、indexBuffer 和 Attribute::Semantic。
void Q3DSGeometry::setPrimitiveType(Q3DSGeometry::PrimitiveType type)
设置此几何体的基本类型为类型。
另请参阅primitiveType。
void Q3DSGeometry::setVertexData(const QByteArray &data)
将顶点缓冲区设置为data。数据必须包含所有属性数据,并且格式为交错格式。您还必须向几何体添加属性来指定顶点缓冲区数据的解释方式。
const QByteArray &Q3DSGeometry::vertexBuffer() const
返回当前设置的顶点缓冲区数据。
另请参阅设置顶点数据。
QByteArray &Q3DSGeometry::vertexBuffer()
这是一个重载函数。
在某些Qt许可证下可用。
了解更多信息。