我正在使用 OpenGL 4.0,并且正在尝试编写具有两个属性的游戏相机。“攻角”和“旋转”
我正在尝试构建一个与其他 RTS 游戏非常相似的相机,例如魔兽争霸 3 或星际争霸 II,其中相机(默认情况下)以相当陡峭的角度面向地面。
我正在使用一些支持代码,其行为与旧的 opengl glTranslatef、glRotatef 非常相似 我当前的尝试如下所示:
shaders->Model.Translate(-cameraPosition.x,-cameraPosition.y,-cameraPosition.z);
//Apply rotation
//shaders->Model.Rotate(rotation/M_PI*180.0f,0,0,1);
//Apply AOA
float aX = cos(2*3.141592 - rotation - 3.141592/2.0);
float aY = sin(2*3.141592 - rotation - 3.141592/2.0);
shaders->Model.Rotate(90.0f-(float)angleOfAttack/M_PI*180.0f,aY,aX,0);
在那之后,地面被绘制为从 (0,0,0) 到 (width,height,0) 的矩形。这种尝试主要是功能性的,除非当 y 增加时,地面变得更远。我不确定是什么原因造成的,但我认为它与这段代码有关,因为当我将 AOA 设置为 90(因此相机直接指向下方)时,它不会发生。
注意:出于必要,我使用模型矩阵而不是视图矩阵来处理相机的运动。