【发布时间】:2021-10-21 03:11:37
【问题描述】:
关于如何在 Pyglet 中制作 2d 相机的信息并不多。我认为移动所有精灵不是一个好主意,所以我在 Pygame 中寻找类似于 Surface 的东西,我可以移动它。但是Pyglet中没有这样的东西吗? 这是应该在openGl中完成的方式吗?还是我错过了一些重要的东西? 我不知道 gl 命令的作用,但它正在工作。
def on_draw(self):
#camera start
glMatrixMode(gl.GL_PROJECTION)
glLoadIdentity()
glOrtho(self.camera.x, self.camera.x2, self.camera.y, self.camera.y2, -1, 1)
#camera end
self.clear()
self.batch.draw()# draw stuff
【问题讨论】:
-
你应该移动所有的精灵。不过,在软件中执行此操作通常不是一个好主意,因此您应该在 GPU 上执行此操作(通过 OpenGL)。您可以通过将它们的位置乘以GL_MODELVIEW 矩阵来移动精灵(视图基本上是“相机”)。我不记得旧管道是如何工作的。
-
正如我所说,您使用的是旧的固定管道。我建议改用可编程版本。这有点难,但给你更多的控制,更明确。然后你可以跟随Learn OpenGL(尽管他们使用C++)。我在pyglet here中做了一个简单的一步一步的可编程管道,虽然它只是代码和小cmets,所以你需要在其他地方复习基础知识。
-
然后移动精灵。我认为这会更占用 CPU 资源 thx
-
对于许多精灵来说,这会占用大量 CPU,这通常是您在 GPU 上执行此操作的原因。可以在 CPU 上完成(除非你有数千个精灵),如this popular pygame example 所示。
-
Pyglet sprite 有一个更新函数可以改变它的位置。生病试试,应该没问题。我在我的一些 Pygame 项目中使用了那个相机,但正如你所说,如果面对更大的瓷砖地图,它会有点受限。如果文档更清楚什么是硬件加速,什么不是。您的代码很有趣,但对我来说很难理解,因为我从未使用过其他库。我会尝试像使用 Pygame 一样编写代码,并尝试使用 pypy 获得更多性能