如何解决Pyglet-一次移动多个形状
我正在制作一个 langton 的 ant 细胞自动机程序,我希望用户能够平移和缩放。现在,我将所有矩形(网格方块)存储为字典,要移动/缩放,我遍历所有矩形并应用所需的转换。
def zoom(self,factor,center_x,center_y):
for x in range(WIDTH):
for y in range(HEIGHT):
rect = self.rects[x][y]
self.rects[x][y].x = (rect.x - center_x)*factor + center_x
self.rects[x][y].y = (rect.y - center_y)*factor + center_y
self.rects[x][y].width = rect.width * factor
self.rects[x][y].height = rect.height * factor
但是,对于矩形数量(32,000),需要一秒钟或进行平移和缩放。有没有比这更好的方法呢?谢谢!
Here 是完整代码
解决方法
是的。使用 OpenGL 变换矩阵来应用变换。这些将在 GPU 上计算以提高性能。
pyglet.graphics.Group 允许您将此类转换组合在一起,以便在绘制它们时将它们自动应用于 Pyglet 基元。
示例
我们创建了一个 AND c.lft Between b.lft AND b.rgt
来平移和缩放对象。
CameraGroup
该示例假设您的窗口具有 import pyglet.gl as gl
import pyglet.shapes
class CameraGroup(Group):
def __init__(self,window,*args,**kwargs):
super().__init__(*args,**kwargs)
self.win = window
def set_state(self):
gl.glPushMatrix()
x = -(self.win.x - self.win.width // 2)
y = -(self.win.y - self.win.height // 2)
gl.glTranslatef(x,y,0.0)
gl.glScalef(self.win.factor,self.win.factor,1.0)
def unset_state(self):
gl.glPopMatrix()
、center_x
和 center_y
属性。
通过将组附加到 Pyglet 对象来应用该组。
factor
当 cam_group = CameraGroup(main_win)
rect = pyglet.shapes.Rectangle(250,300,400,200,color=(255,22,20),batch=batch,group=cam_group)
被渲染时,组转换区域会自动应用。
如果需要,您还可以构建更复杂的组。
,examples 文件夹中有一个用于 pyglet 的相机示例。
https://github.com/pyglet/pyglet/blob/pyglet-1.5-maintenance/examples/camera.py
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。