3

これは私のgluLookAtセットアップです:

 glu.gluLookAt(x,y,z,    // eye location
               x + Math.cos(Math.toRadians(eyeAngle)),
               y,
               z - Math.sin(Math.toRadians(eyeAngle)), // point to look at (near middle)
               0.f,1.f,0.f); // the "up" direction

x、y、z は座標であり、左右に回転したり、前後に移動したりするときに変化します。しかし、私は機銃掃射を左右に実行するのに苦労しています。どんな助けでも大歓迎です。

4

2 に答える 2

4

最終的にすべてを理解しました。前方に移動して左右に曲がる場合、strafeは実際には単純です。たとえば、Strafe rightは、基本的に、右に90度回転し、前方に移動してから、左に90度回転します。

私のフォワードは:

x += distance*Math.cos(Math.toRadians(eyeAngle)); 
z += -distance*Math.sin(Math.toRadians(eyeAngle));

同じ方向を見たいので、eyeAngleを変更したくありません。右のストラフの場合は、左に同じように、右に90度回転してから前進したかのように移動します。したがって、上記のフォワードメソッドは、元のeyeAngleの右側に90度の角度がありますが、eyeAngleを同じに保ちたいので、変数を変更せずに、90を追加するだけです。

したがって、正しいstrafeメソッドは次のようになります。

    x += distance*Math.cos(Math.toRadians(eyeAngle+90)); 
    z += -distance*Math.sin(Math.toRadians(eyeAngle+90));

左は90を引くことになります。前に進み、全体的なglulookatを設定した後は、実際には非常に簡単です。皆さんの助けに感謝します、それはそれがすべてどのように機能するかを理解するのに私を助けました。

于 2012-11-03T13:37:53.797 に答える
0

GLU API についてはわかりませんが、X、Y、Z 座標が与えられた場合、

a Left relative to it's current Y rotation is,
    position of X -= distance*Math.sin(Math.toRadians(Y-90));
    position of Z += distance*Math.cos(Math.toRadians(Y-90));


a Right relative to it's current Y rotation is,
    position of X -= distance*Math.sin(Math.toRadians(Y+90));
    position of Z += distance*Math.cos(Math.toRadians(Y+90));

Y を eyeAngle に置き換えてみてください。回転点は何ですか。

于 2012-11-03T02:57:53.490 に答える