2012-07-13 44 views
1

研究的另一個3D遊戲GL的代碼,我決定嘗試創建一個非常簡單的,走動之類的話。OpenGL的:相機theta和縮放

一切似乎工作確定,但只在一個軸上。當一個方向向前和向後走時,一切都很好。雖然,如果你轉過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) 

而且,相機THETA旋轉:

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

什麼會導致這樣的問題呢?

回答

1

你還沒有把太多的細節,但在任何情況下,我建議你看看所謂gluLookAt(..)一個驚人的穀氨酸API。它需要9個參數,3個位置,3個方向和3個方向。

進口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/gluLookAt.3G.html

+0

謝謝你的提示,但我不認爲這涉及到它面對的方向移動相機。 – 2012-07-13 16:35:53

+0

是的,它的確如此。如果你可以看到我的老C++代碼,[這裏是你如何使用gluLookAt(https://bitbucket.org/thrustmaster/firstpersonshooter/src/393e18698c3e/Player.cpp)在3D空間走動。是的,我明白這不是一個直接的答覆,你將不得不挖掘一點。如果你不能,請告訴我,我會在答覆中更新我的答案。 – SuperSaiyan 2012-07-13 16:43:36