Qt 3D QML几何体渲染器

Qt 3D QML几何体渲染器,qml,qt3d,Qml,Qt3d,我试图使用QML GeometryRenderer绘制自己的3D几何图形,但出现了一些问题。我添加了其他3D元素来检查它们是否被显示,这会发生。有人有什么建议吗?我认为这个问题与几何定义有关。当我在GeometryRenderer中使用著名的球体测量法更改自己的几何体时,球体将正确显示。我在Qt网站上找不到完整的文档,甚至找不到一个简单的示例来测试和用作启动项目 以下是我的代码: GeometryRender.qml import Qt3D.Core 2.12 import Qt3D.Rende

我试图使用QML GeometryRenderer绘制自己的3D几何图形,但出现了一些问题。我添加了其他3D元素来检查它们是否被显示,这会发生。有人有什么建议吗?我认为这个问题与几何定义有关。当我在GeometryRenderer中使用著名的球体测量法更改自己的几何体时,球体将正确显示。我在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 ]
}

属性中的
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计数变量是顶点总数,而不是三角形数。