1

私は 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);

}
4

1 に答える 1

1

問題は、modelPOR.Translate ではなく、gluLookAt の中心位置を変更することだと思います。

gluLookAt の 3 つの中間パラメーターはビューの中心を設定するため、車はまったく同じ位置にあるはずですが、車の位置を変更せずに中心を変更します。

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

おそらく同じ値で車を変換する必要があります。すると中央になります。

そのコードにあると思われる別の問題は、車ではなくカメラを回転させることです。そのため、車はおそらくカメラと同じ方向を向いたままにはなりません。(それは望ましいですか、それとも他の場所で行いますか?)

しかし、車をカメラに追従させたいと本当に思っていますか? それはおそらく逆の方が良いでしょう。

于 2012-07-30T18:38:15.420 に答える