小さな Pyglet ゲームで OpenGL を使用してカメラ ズームを実行しましたが、現在問題に直面しています。マウスイベントに正しく。何千ものオブジェクトのプロパティを変更するのは少し遅いかもしれないので、代わりにマウスの位置を変更できないかと考えていました。方法がわかりません。ズームはglOrtho()
、パラメータを乗算して によって行われます。
ズーム コード (self.dx
とself.dy
は、これまでのカメラの合計移動であり、self.zoom
0.1 から 2 までの乗数です):
pyglet.gl.glMatrixMode(pyglet.gl.GL_PROJECTION)
pyglet.gl.glLoadIdentity()
pyglet.gl.glOrtho(-screen.width / (2 * self.zoom), screen.width / (2 * self.zoom), -screen.height / (2 * self.zoom), screen.height / (2 * self.zoom), -1, 1)
pyglet.gl.glTranslatef(self.dx - screen.width / 2, self.dy - screen.height / 2, 0)
pyglet.gl.glMatrixMode(pyglet.gl.GL_MODELVIEW)
編集
マウス座標のズーム計算を逆にするのはどうですか?
編集 2
ゲーム オブジェクトとのマウスの衝突を処理する方法は、少なくとも悪名高いものです。私は実際にpygame.Rect
オブジェクトを使用してオブジェクトの位置を表し、それをマウスの位置と衝突させています。今までズームを行っていなかったので、これまでのところうまくいきました。OpenGL/3D の世界により適した方法があるのではないでしょうか?