通过 QBuffer 到 QGeometry 的 Numpy 数组
Numpy array via QBuffer to QGeometry
我的目标是创建一个 numpy
数组并将其字节数据转换为 QBuffer
。我想知道如何正确设置 DataSize
、ByteStride
和 Count
。请参阅下面的代码:
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)
我们设法解决了这个问题。
首先,下面复制的这两行已被弃用。它们可以被移除。
self.position_attribute.setDataType(Qt3DRender.QAttribute.Float)
self.position_attribute.setDataSize(3)
添加一行:
self.position_attribute.setVertexSize(3)
ByteStride
应设置为 12
。 3
是坐标数,4
是 float32
的字节长度。注意设置 numpy
的 array
: data = np.random.rand(1000, 3).astype(np.float32)
.
self.position_attribute.setByteOffset(0)
self.position_attribute.setByteStride(3*4)
self.position_attribute.setCount(1000)
我的目标是创建一个 numpy
数组并将其字节数据转换为 QBuffer
。我想知道如何正确设置 DataSize
、ByteStride
和 Count
。请参阅下面的代码:
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)
我们设法解决了这个问题。
首先,下面复制的这两行已被弃用。它们可以被移除。
self.position_attribute.setDataType(Qt3DRender.QAttribute.Float)
self.position_attribute.setDataSize(3)
添加一行:
self.position_attribute.setVertexSize(3)
ByteStride
应设置为 12
。 3
是坐标数,4
是 float32
的字节长度。注意设置 numpy
的 array
: data = np.random.rand(1000, 3).astype(np.float32)
.
self.position_attribute.setByteOffset(0)
self.position_attribute.setByteStride(3*4)
self.position_attribute.setCount(1000)