2012-06-14 67 views
1

我正在OpenGL(只是一個小項目)中製作賽車遊戲,我在試圖讓我的車跟隨攝像頭視圖時遇到問題。使對象跟隨OpenGL中的攝像頭

隨着相機向前和/或向後移動,使相機跟隨相機並不難,但是當我旋轉相機(看右或左)時,汽車仍然保持靜止。我的意思是,它仍然向前和向後移動,但它不在攝像機前面(它在側面)。

這裏是我的代碼(這裏我嘗試實現它的部分):

void updateCam() { 
    gluLookAt(posX,posY + 0.025 * std::abs(sin(headPosAux*PI/180)),posZ, 
     posX + sin(roty*PI/180),posY + 0.025 * std::abs(sin(headPosAux*PI/180)) + cos(rotx*PI/180),posZ -cos(roty*PI/180), 
     0.0,1.0,0.0); 

    listenerPos[0] = posX; 
    listenerPos[1] = posY; 
    listenerPos[2] = posZ; 

    source0Pos[0] = posX; 
    source0Pos[1] = posY; 
    source0Pos[2] = posZ; 

    GLfloat distD; 

    distD = posZ - 3.3; 


    //makes the car "follow" the camera 
    modelPOR.Translate(posX,posY,distD); 

} 

回答

1

我認爲這個問題是您更改,而不是在modelPOR.Translate

在gluLookAt中心位置gluLookAt的三個中間參數設置了視圖的中心,所以汽車應該位於完全相同的位置,但是您不必修改汽車的位置即可修改中心。

gluLookAt(posX,posY + 0.025 * std::abs(sin(headPosAux*PI/180)),posZ, 

    // center x 
    posX + sin(roty*PI/180), 
    // center y 
    posY + 0.025 * std::abs(sin(headPosAux*PI/180)) + cos(rotx*PI/180), 
    // center z 
    posZ -cos(roty*PI/180), 

    0.0,1.0,0.0); 

你應該翻譯那些相同的值的汽車。那麼它將被集中。

該代碼中似乎存在的另一個問題是,您旋轉相機而不是汽車,因此汽車可能不會保持指向與相機相同的方向。 (是你想要的還是你在別處呢?)

但你真的確定你想讓汽車跟着相機?反過來說可能會更好。