首页 > 解决方案 > 预期 LP_c_float 实例而不是列表

问题描述

我需要在函数中放置一个数组

material_diffuse = [1.0, 1.0, 1.0, 1.0]
pgl.glMaterialfv(pgl.GL_FRONT_AND_BACK, pgl.GL_DIFFUSE, material_diffuse) 

or 

material_diffuse = [1.0, 1.0, 1.0, 1.0]
pgl.glMaterialfv(pgl.GL_FRONT_AND_BACK, 
pgl.GL_DIFFUSE,ctypes.c_float(material_diffuse))

在第一种情况下,我得到:预期的 LP_c_float 实例而不是列表在第二种情况下:TypeError:必须是实数,而不是列表

标签: pythonopenglpygletopengl-compat

解决方案


基于[MS.Docs]: glMaterialfv 函数pyglet通过[Python 3.Docs]: ctypes - A foreign function library for Python包装),您应该使用:

pgl.glMaterialfv(pgl.GL_FRONT_AND_BACK, pgl.GL_DIFFUSE, (pgl.GLfloat * len(material_diffuse))(*material_diffuse))

其他参考:[searchcode]: pyglet - /experimental/buffer/torus.py


推荐阅读