Pyglet调用Batch类绘图报ValueError: Can only assign sequence of same size求助
错误产生原因
- 触发该报错的根本原因是顶点数据格式不符合Pyglet的
Batch.add()方法要求:- 你为
v3f类型传入的顶点数据是嵌套结构:(self.add(...), self.add(...), ...),每个add()方法返回长度为3的坐标列表,所以整体是包含4个列表的嵌套序列,总长度仅为4 v3f代表每个顶点用3个float类型坐标表示,4个顶点总共需要传入长度为12的一维平铺序列,序列长度不匹配触发了该报错。
- 你为
解决方案
只需要将嵌套的顶点坐标列表展开为一维序列即可,最简单的方式是用*运算符解包每个add()返回的坐标列表,修改后的代码如下:
self.batch.add(4, GL_QUADS, self.top, ('v3f', (*self.add(pos, [0, 1, 0]), *self.add(pos, [0, 1, 1]), *self.add(pos, [1, 1, 1]), *self.add(pos, [1, 1, 0]))), tex_coords)
解包后v3f对应的序列就是12个独立的浮点数值,完全符合Pyglet的参数要求,即可正常运行。
内容的提问来源于stack exchange,提问作者FallenGalaxy_
相关产品推荐
相关产品推荐

