我正在尝试使用GeometryRenderer程序生成多维数据集。为什么将GeometryRenderer.primitiveType设置为LineLoop,Lines或TriangleFan时一切正常,但是使用Triangles或TrianglesStrip却完全不画任何东西?
query = ("INSERT INTO billed_items(item_name,billed_qty,price,item_bill_series) VALUES(%s,%s,%s,%s)")
c.execute(query,((name),(no),(price),(series))
conn.commit()
答案 0 :(得分:3)
如果我按照以下方式修改您的QML,那么我可以看到两个三角形:
import QtQuick 2.2
import Qt3D.Core 2.0
import Qt3D.Render 2.0
import Qt3D.Extras 2.0
Entity {
id: root
PhongMaterial { id: material; diffuse: Qt.rgba(0.8, 0., 0., 1.0) }
GeometryRenderer {
id: renderer
primitiveType: GeometryRenderer.Triangles
instanceCount: 1
geometry: Geometry {
Attribute {
name: defaultPositionAttributeName
attributeType: Attribute.VertexAttribute
vertexBaseType: Attribute.Float
vertexSize: 3
byteOffset: 0
byteStride: 3 * 4
count: 6
buffer: Buffer {
type: Buffer.VertexBuffer
data: new Float32Array([
// #1 triangle
-0.9, -0.5, 0.0,
-0.0, -0.5, 0.0,
-0.45, 0.5, 0.0,
// #2 triangle
0.0, -0.5, 0.0,
0.9, -0.5, 0.0,
0.45, 0.5, 0.0,
])
}
}
}
}
components: [ renderer, material ]
}
我认为该错误与GeometryRenderer和Entity的错误层次结构有关。
要获得正确的照明,您还需要为GeometryRenderer提供顶点法线。
编辑:
由于GeometryRenderer
是否总是需要indexBuffer
,primitiveType: Triangles
和TriangleStrip
的{{1}}的常见问题,我将提出更为详细的答案。
TriangleFan
中的GeometryRenderer
不一定不需要索引数组(我不确定primitiveType: Triangles
的源代码)。
看不到三角形的原因是:您以错误的顺序定义了顶点!更改Qt3D
中顶点的顺序,以使在沿三角形逆时针旋转时,每三个连续的顶点都形成一个三角形。然后,三角形法线将指向您。
或者,从相反的方向看一下您的实体:您将看到两个三角形。
在使用巨大的缓冲区时,由于内存/效率的原因,您不想重复大量的顶点,因此,您绝对应该考虑使用vertexBuffer
。