OpenGL:相机theta和缩放

时间:2012-07-13 04:03:04

标签: python math opengl pygame

研究另一个3D GL游戏的代码,我决定尝试创建一个非常简单的,四处走动的东西。

所有东西都可以正常工作,但只能在一个轴上运行。向前和向后走一个方向时,一切都很顺利。但是,如果你转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.

什么可能导致这个问题?

1 个答案:

答案 0 :(得分: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-3.0/gluLookAt.html