gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:48 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com