Qt 3D QML几何体渲染器
我试图使用QML GeometryRenderer绘制自己的3D几何图形,但出现了一些问题。我添加了其他3D元素来检查它们是否被显示,这会发生。有人有什么建议吗?我认为这个问题与几何定义有关。当我在GeometryRenderer中使用著名的球体测量法更改自己的几何体时,球体将正确显示。我在Qt网站上找不到完整的文档,甚至找不到一个简单的示例来测试和用作启动项目 以下是我的代码: GeometryRender.qmlQt 3D QML几何体渲染器,qml,qt3d,Qml,Qt3d,我试图使用QML GeometryRenderer绘制自己的3D几何图形,但出现了一些问题。我添加了其他3D元素来检查它们是否被显示,这会发生。有人有什么建议吗?我认为这个问题与几何定义有关。当我在GeometryRenderer中使用著名的球体测量法更改自己的几何体时,球体将正确显示。我在Qt网站上找不到完整的文档,甚至找不到一个简单的示例来测试和用作启动项目 以下是我的代码: GeometryRender.qml import Qt3D.Core 2.12 import Qt3D.Rende
import Qt3D.Core 2.12
import Qt3D.Render 2.12
import Qt3D.Extras 2.12
Entity {
id: root
PhongMaterial { id: material; diffuse: Qt.rgba(1.0, 0., 0., 1.0) }
GeometryRenderer {
id: geometry
primitiveType: GeometryRenderer.Triangles
geometry: Geometry {
boundingVolumePositionAttribute: position
Attribute {
id: position
attributeType: Attribute.VertexAttribute
vertexBaseType: Attribute.Float
vertexSize: 3
count: 2
byteOffset: 0
byteStride: 3 * 4// 5
name: defaultPositionAttributeName
buffer: vertexBuffer
}
}
Buffer {
id: vertexBuffer
type: Buffer.VertexBuffer
data: new Float32Array([
-2.0, -2.0, -2.0,
2.0, -2.0, -2.0,
2.0, 2.0, -2.0,
-2.0, -2.0, -2.0,
2.0, 2.0, -2.0,
2.0, -2.0, -2.0,
])
}
}
components: [geometry, material ]
}
属性中的count
变量需要设置为vertexBuffer中提供的顶点数
Attribute {
id: position
attributeType: Attribute.VertexAttribute
vertexBaseType: Attribute.Float
vertexSize: 3
count: 6
byteOffset: 0
byteStride: 3 * 4// 5
name: defaultPositionAttributeName
buffer: vertexBuffer
}
另一种可能是避免顶点重复,而是提供indexBuffer。
相关部分如下所示:
geometry: Geometry {
boundingVolumePositionAttribute: position
Attribute {
attributeType: Attribute.VertexAttribute
vertexBaseType: Attribute.Float
vertexSize: 3
count: 3
byteOffset: 0
byteStride: 3 * 4 // 1 vertex (=3 coordinates) * sizeof(float)
name: defaultPositionAttributeName
buffer: vertexBuffer
}
Attribute {
attributeType: Attribute.IndexAttribute
vertexBaseType: Attribute.UnsignedInt
vertexSize: 1
count: 6
byteOffset: 0
byteStride: 1 * 4 // 1 index * sizeof(Uint32)
buffer: indexBuffer
}
}
Buffer {
id: vertexBuffer
type: Buffer.VertexBuffer
data: new Float32Array([
-2.0, -2.0, -2.0,
2.0, -2.0, -2.0,
2.0, 2.0, -2.0
])
}
Buffer {
id: indexBuffer
type: Buffer.IndexBuffer
data: new Uint32Array([
0, 1, 2,
0, 2, 1
])
}
AFAIK计数变量是顶点总数,而不是三角形数。