预期 LP_c_float 实例而不是 glVertex3fv 中的元组
Posted
技术标签:
【中文标题】预期 LP_c_float 实例而不是 glVertex3fv 中的元组【英文标题】:expected LP_c_float instance instead of tuple in glVertex3fv 【发布时间】:2019-12-27 02:32:26 【问题描述】:我正在使用 Python、OpenGL 和 Pyglet 渲染一个 3D 立方体,所以我在一个元组中定义了 vertices
和 edges
变量
vertices = (
(1, -1, -1),
(1, 1, -1),
(-1, 1, -1),
(-1, -1, -1),
(1, -1, 1),
(1, 1, 1),
(-1, -1, 1),
(-1, 1, 1))
edges = (
(0, 1),
(0, 3),
(0, 4),
(2, 1),
(2, 3),
(2, 7),
(6, 3),
(6, 4),
(6, 7),
(5, 1),
(5, 4),
(5, 7))
之后我定义了一个函数def Cube()
,使用我上面定义的这些坐标创建这个 3D 立方体
def Cube():
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(vertices[vertex])
glEnd()
所以我用on_draw()
函数创建了一个窗口,它调用Cube()
函数。
当我在我的 Linux 终端上使用命令 python3 main.py
运行此应用程序时,我收到以下错误
ctypes.ArgumentError: 参数 1: : 预期的 LP_c_float 实例而不是元组
所以我猜这段代码的主要错误是glVertex3fv(vertices[vertex])
这一行
我想知道正确绘制这个 3D 立方体需要什么。
【问题讨论】:
【参考方案1】:glVertex3fv
的参数必须是 float
s 的数组。
要解决问题,请使用 glVertex3f
并传递 3 个分隔值:
glVertex3f(vertices[vertex][0], vertices[vertex][1], vertices[vertex][2])
或者使用pythonsctypes
模块生成float
s的数组。
元素的数据类型是c_float
,Array可以通过*
-operator生成:
import ctypes
glVertex3fv( (ctypes.c_float * 3)(*vertices[vertex]) )
【讨论】:
以上是关于预期 LP_c_float 实例而不是 glVertex3fv 中的元组的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate Query.list 返回实际的 Object 实例而不是预期的类型
为啥 JSLint 要我使用双引号而不是单引号?预期为 '"' 而看到的是 '''