1

別の 3D GL ゲームのコードを調べて、非常にシンプルで歩き回るようなゲームを作成することにしました。

すべてが正常に動作しているように見えますが、1 つの軸でのみ動作します。一方向に前進後退するときは、すべて順調です。ただし、90 度回転して前後に歩き始めると、後進は前進として機能し、前進は後退として機能します。

地面の描画コードは次のとおりです。

def drawground(self):
        glPushMatrix()

        glTranslate(-1, -1, -3)
        glRotate(90, True, False, False)

        glBegin(GL_QUADS)
        glColor(0.6, 0.6, 0.6)
        glVertex(0, 0)
        glVertex(0, self.winmain.world.xlen)
        glVertex(self.winmain.world.ylen, self.winmain.world.xlen)
        glVertex(self.winmain.world.ylen, 0)
        glEnd()

        glPopMatrix() 

移動コード:

if pygame.key.get_pressed()[K_w]:
                self.campos[0] -= 0.005*math.sin(self.camtheta * 3.14159 / 180)
                self.campos[1] -= 0.005*math.cos(self.camtheta * 3.14159 / 180)

if pygame.key.get_pressed()[K_s]:
                self.campos[0] += 0.005*math.sin(self.camtheta * 3.14159 / 180)
                self.campos[1] += 0.005*math.cos(self.camtheta * 3.14159 / 180)

そして、カメラのシータ回転:

if event.type == MOUSEMOTION:
                    self.camtheta -= 2 * event.rel[0] #Subtracting 2 * the relative moved pixels from the last position.

この問題の原因は何ですか?

4

1 に答える 1

1

詳細についてはあまり触れていませんが、いずれにせよ、 という素晴らしい glu API を調べることをお勧めしますgluLookAt(..)。位置に 3 つ、方向に 3 つ、方向に 3 つの 9 つのパラメーターが必要です。

GLU のインポート:

from OpenGL.GLU import *

そして、言います:

gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ)

ウォークアラウンドのようなものでは、upX、upY、upZ は 0,1,0 になります。

ドキュメントはこちら:
http://pyopengl.sourceforge.net/documentation/manual-3.0/gluLookAt.html

于 2012-07-13T04:21:03.620 に答える