我正在尝试使用QML GeometryRenderer绘制自己的3D几何,但是出了点问题。我添加了其他3D元素以检查它们是否显示,并且发生这种情况。有任何建议吗?我认为问题在于几何定义。当我在GeometryRenderer中使用众所周知的SphereGeometry更改自己的几何时,将正确显示球体。我无法在Qt网站上找到完整的文档,甚至无法找到一个简单的示例来进行测试并用作初始项目。
在以下我的代码中:
GeometryRender.qml
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 ]
}
答案 0 :(得分:0)
count
中的Attribute
变量需要设置为您在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
])
}