我正在尝试将多维数据集的位置存储在值 x 中,当我尝试使用 print(x) 而不是打印位置时,它会打印

<OpenGL.arrays.ctypesarrays.c_double_Array_4_Array_4 object at 0x043E63A0>

额外信息:
Windows 8.1 64-Bit
Python 3.4.3 32-Bit
PyOpenGL 3.1.1 32-Bit
PyGame 32-Bit (Can't find the version)

我的电脑上有管理员权限,PyOpenGL 和 PyGame 的安装似乎没问题。谢谢。如果你还有什么想看的,例如我的脚本的完整代码,请问。

编辑:
这个问题不再需要答案,因为我已经从这个开始了。感谢所有试图提供帮助的人,你们都是了不起的人,他们花时间这样做。

最佳答案

我真的很喜欢那些提供对新手不友好的答案的人。

Rafael Cardoso 似乎希望您知道如何使用 VBO 等。
(从你的措辞,我可以假设你几乎不知道你在做什么)

我对 ctypes 或 OpenGL.arrays 不太熟练,
(我昨晚刚开始尝试从 GLSL 3D 查看器中删除 numpy)
但是根据我的 Python 经验,他说的是您需要执行以下操作:

from OpenGL import GL, arrays
x = GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX)
handler = arrays.ctypesarrays.CtypesArrayHandler()
print handler.asArray(x,typecode=None)

我真的无能为力,因为我安装了 PyOpenGL 识别的 cruddy numpy...
所以对我来说,glGetDoublev(GL_MODELVIEW_MATRIX) 返回一个恶心的 numpy.array() 对象而不是一个 OpenGL.arrays.ctypesarrays.c_double_Array_4_Array_4 对象......

我对上面的测试打印了这个:
>>> h = arrays.ctypesarrays.CtypesArrayHandler()
>>> x = GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX)
>>> x
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> h.asArray( x, ctypes.c_double )
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

从它的外观来看,它不是很有用。

编辑:
忘了我的虚拟机,它有一个没有 numpy 的 python 安装:)

虽然结果相同:
>>> from OpenGL import GL, arrays
>>> h = arrays.ctypesarrays.CtypesArrayHandler()
>>> x = GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX)
>>> x
<OpenGL.arrays.lists.c_double_Array_4_Array_4 object at 0x015FEE90>
>>> h.asArray( x )
<OpenGL.arrays.lists.c_double_Array_4_Array_4 object at 0x015FEE90>

编辑2:
这有效:
>>> [[ c for c in r] for r in x]
[[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]

你甚至不需要重新格式化,因为 <OpenGL.arrays.lists.c_double_Array_4_Array_4 object at 0x015FEE90> 是一个 2D 迭代器。 ;)
>>> for r in x: print r

<OpenGL.constants.c_double_Array_4 object at 0x01605CB0>
<OpenGL.constants.c_double_Array_4 object at 0x01605D50>
<OpenGL.constants.c_double_Array_4 object at 0x01605CB0>
<OpenGL.constants.c_double_Array_4 object at 0x01605D50>

另一个例子:
>>> list(x)
[<OpenGL.constants.c_double_Array_4 object at 0x01605CB0>, <OpenGL.constants.c_double_Array_4 object at 0x01605D00>, <OpenGL.constants.c_double_Array_4 object at 0x01605DA0>, <OpenGL.constants.c_double_Array_4 object at 0x01605DF0>]

关于python - PyOpenGL。 x = glGetDoublev(GL_MODELVIEW_MATRIX) 返回内存地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29681457/

10-11 15:22