通过QBuffer到QGeometry的Numpy数组

2024-04-28 23:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是创建一个numpy数组,并将其字节数据转换为QBuffer。我想知道如何正确设置DataSizeByteStrideCount。请参见下面的代码:

self.mesh = Qt3DRender.QGeometryRenderer()
self.mesh.setPrimitiveType(Qt3DRender.QGeometryRenderer.Points)
self.geometry = Qt3DRender.QGeometry(self.mesh)

vertex_data_buffer = Qt3DRender.QBuffer(Qt3DRender.QBuffer.VertexBuffer, self.geometry)
data = np.random.rand(1000, 3)
vertex_data_buffer.setData(QByteArray(data.tobytes()))

self.position_attribute = Qt3DRender.QAttribute()
self.position_attribute.setAttributeType(
    Qt3DRender.QAttribute.VertexAttribute)
self.position_attribute.setBuffer(vertex_data_buffer)
self.position_attribute.setDataType(Qt3DRender.QAttribute.Float)
self.position_attribute.setDataSize(3)  # ??
self.position_attribute.setByteOffset(0)
self.position_attribute.setByteStride(6)  # ??
self.position_attribute.setCount(1000)  # ??
self.position_attribute.setName(
    Qt3DRender.QAttribute.defaultPositionAttributeName())

self.geometry.addAttribute(self.position_attribute)

Tags: selfnumpy目标databufferpositionattribute数组
1条回答
网友
1楼 · 发布于 2024-04-28 23:06:04

我们设法解决了这个问题。你知道吗

首先,这两行下面的复制是不赞成的。它们可以被移除。你知道吗

self.position_attribute.setDataType(Qt3DRender.QAttribute.Float)
self.position_attribute.setDataSize(3)

增加一行: 你知道吗

self.position_attribute.setVertexSize(3)

ByteStride应设置为123是坐标数,4float32的长度(字节)。注意设置numpyarraydata = np.random.rand(1000, 3).astype(np.float32)。你知道吗

self.position_attribute.setByteOffset(0)
self.position_attribute.setByteStride(3*4)
self.position_attribute.setCount(1000)

相关问题 更多 >