我有一个飞机物体,我希望它能够向前移动并左右旋转。我希望飞机朝着它面向的方向前进。
这是我的代码,但它不起作用,我哪里出错?
directionX=sin(heading*M_PI/180.0);
directionZ=-cos(heading*M_PI/180.0);
if(keys['W']){
eyeX += directionX;
eyeZ += directionZ;
}
if(keys['S']){
eyeX -= directionX;
eyeZ -= directionZ;
}
if(keys[VK_LEFT])
heading -= 1;
if(keys[VK_RIGHT])
heading += 1;
使用航向旋转飞机,并使用eyeX& EYEZ。
//Aircraft
glPushMatrix();
glRotatef(-heading, 0,1,0);
glTranslatef(eyeX,eyeY,eyeZ);
model.speedDisplayFaceNormals();
//model.drawBoundingBox();
//model.drawOctreeLeaves();
glPopMatrix();
答案 0 :(得分:2)
这是一种在黑暗中拍摄而不知道您所获得的实际行为,但您可能会尝试将调用顺序切换为glRotatef
和glTranslatef
。
答案 1 :(得分:0)
在OpenGL中,Eye位于0,0,0并向下看负Z轴。因此,如果您想使用基于眼睛/摄像机协调的系统,那么您需要在开始时按以下顺序执行两项操作:
1 - 根据系统中相机的方向旋转场景 2 - glTranslatef(-EyeX,-EyeY,-EyeZ)这会将您带到场景坐标系中的0,0,0。
然后,您可以转换为对象的位置,相应地旋转和渲染它们。几年前我对此做了一些注意事项,这就是我当时看到代表玩家位置第一人称风格的The Eye坐标的方式。