1

サードパーソンパースペクティブゲームの場合と同じように、カメラが回転するときにモデルの後ろにカメラを移動させて、常にモデルの背面に「見える」ようにします。フレームワークが提供されているため、構文は通常のopenglとは少し異なる場合があります。標準カメラを使用しています

Mat4 mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);

そして私が試したカメラを回転させるために

this.mouseRotation += 20.0f;
this.eyeX = (float) Math.sin(this.mouseRotation / 180.0f * 3.14f) * 2.0f; this.eyeZ = (float) Math.cos(this.mouseRotation / 180.0f * 3.14f) * 2.0f;

mouseRotationはモデルが配置されている角度であるため、明らかにカメラも「円」上でさらに20度の位置に移動する必要があります。しかし、これの代わりに、オブジェクトはそれ自体の周りを回転し、カメラは円を描くように動きますが、モデルの周りではなく、モデルの隣で、同じポイントを見ています。

これを機能させる方法はありますか?

4

1 に答える 1

1

あなたの例から、簡単な答えは、目がオブジェクトに対して配置this.atされるように(オブジェクトの位置である必要があります)を追加することだと思いthis.eyeます。

より詳細には、オブジェクトの位置がにthis.atあり、カメラがオブジェクトの「後ろ」にある距離でオブジェクトを追跡するようにします。オブジェクトの正面を指す単位ベクトル(つまり、長さが1.0の単位ベクトル)がある場合this.at - dは、カメラの位置(つまり、this.eye)である必要があります。カメラをオブジェクトの周りで回転させるには、最初に「d」に回転を適用します(上記の例では、「Y」軸を中心に回転しているように見えます[eyeXとeyeZのみを変更しているため))、となることによって

this.eye = this.at - rotation(Y) * d; 
于 2013-01-28T02:51:53.360 に答える