python - PyOpenGL。 x = glGetDoublev(GL_MODELVIEW_MATRIX) 返回内存地址

标签 python pygame pyopengl

我正在尝试将立方体的位置存储在值 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)

我的 PC 上有管理员权限,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>是一个二维迭代器。 ;)

>>> 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/

相关文章:

python - 在方法中使用断言 - Python

python - 使用 numpy.ma 屏蔽空白值

python - 在 Tensorflow 中计算权重更新比率

python - Pygame 弹雨碰撞和残像

python - 如何放置这些船舶图像?

python - 找不到匹配的 GLX 视觉

python - 具有 XPath 支持的快速 python XML 验证器

python - 如何在 PyGame 中滚动背景表面?

python - 如何在 PyOpenGL 中面向对象进行击退?

python - 从另一个文件 PyQt4 访问操作按钮