我不想为我的 3D 世界使用复杂的三角函数来计算旋转和类似的东西,所以 gluLookAt 似乎是一个不错的选择。根据文档,我需要做的就是为相机位置放置 3 个坐标,三个用于我应该查看的位置和一个“向上”位置。最后一个是没有意义的,直到我认为它必须与屏幕顶部的视线方向成直角。
它根本不像那样工作。我有一些python代码。这是当我进入游戏的这一部分时初始化一些数据和一些模式代码的代码:
def init(self):
self.game_over = False
self.z = -30
self.x = 0
def transfer(self):
#Make OpenGL use 3D
game.engage_3d(45,0.1,100)
gluLookAt(0,0,-30,0,0,0,0,1,0)
“game.engage_3d(45,0.1,100)” 基本上将投影矩阵设置为具有 45 度视角和 0.1 和 100 的近远坐标。
第一个 gluLookAt 很好地将相机放置在正确的位置。
我有一个以(0,0,0)为中心绘制的立方体,没有gluLookAt它可以正常工作。在我绘制它之前,我有这个代码:
gluLookAt(self.x,0,self.z,0,0,0,0,1,0)
if game.key(KEY_UP):
self.z += 2.0/game.get_fps()
if game.key(KEY_DOWN):
self.z -= 2.0/game.get_fps()
if game.key(KEY_LEFT):
self.x += 2.0/game.get_fps()
if game.key(KEY_RIGHT):
self.x -= 2.0/game.get_fps()
从那以后,向上的位置应该始终与它始终成直角相同。我原以为它会做的是用上下键在z轴上前后移动,用左右键在x轴上左右移动。实际发生的是,当我使用左右键时,立方体将围绕被按键加速的“眼睛”旋转。向上键使另一个立方体从无处穿过屏幕并击中第一个立方体。向下键将神秘的克隆立方体带回来。这可以与轮换相结合,以产生与文档所述完全不同的结果。
到底怎么了?
谢谢你。