OpenGL旋转并翻译问题

时间:2011-12-06 14:48:04

标签: opengl

我有一个飞机物体,我希望它能够向前移动并左右旋转。我希望飞机朝着它面向的方向前进。

这是我的代码,但它不起作用,我哪里出错?

    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();

2 个答案:

答案 0 :(得分:2)

这是一种在黑暗中拍摄而不知道您所获得的实际行为,但您可能会尝试将调用顺序切换为glRotatefglTranslatef

答案 1 :(得分:0)

在OpenGL中,Eye位于0,0,0并向下看负Z轴。因此,如果您想使用基于眼睛/摄像机协调的系统,那么您需要在开始时按以下顺序执行两项操作:

1 - 根据系统中相机的方向旋转场景 2 - glTranslatef(-EyeX,-EyeY,-EyeZ)这会将您带到场景坐标系中的0,0,0。

然后,您可以转换为对象的位置,相应地旋转和渲染它们。几年前我对此做了一些注意事项,这就是我当时看到代表玩家位置第一人称风格的The Eye坐标的方式。