【问题标题】:Pyglet 2d Camera OpenGLPyglet 2d 相机 OpenGL
【发布时间】: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 获得更多性能

标签: python opengl pyglet


【解决方案1】:

pyglet/examples 文件夹中有一个摄像头示例: https://github.com/pyglet/pyglet/blob/pyglet-1.5-maintenance/examples/window/camera.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2011-02-14
    • 2010-11-20
    相关资源
    最近更新 更多