0

カメラとゲーム オブジェクトでうまく機能する 3D ワールドがあります。カメラが「レンダリング」すると、マトリックスがカメラの位置に配置されます。これを行うには、次のコードを呼び出します。

gl.glMultMatrixf(rotationArray,0);
gl.glTranslatef(position.getX(), position.getY(), position.getZ());

各オブジェクトがレンダリングされると、オブジェクトごとにこれを呼び出します。(行列を適切にプッシュおよびポップすることに注意してください)

gl.glTranslatef(position.getX(), position.getY(), position.getZ());
gl.glMultMatrixf(rotationArray,0);

ここで、モデルを世界に持ち込むときに、特定のメッシュを 0,0,0 ポイントの周りではなく、別のポイントの周りにピボットする必要があるという質問が出てきます。サブメッシュの ArrayList を持つ Mesh というオブジェクトがあります。各メッシュ (およびサブメッシュ) にはピボット ポイントの位置があります。(x、y、z float)。

指定された点を中心にピボットするために行列をどこに変換すればよいですか? あらゆる組み合わせを試しましたが、うまくいきません!

例:

gl.glTranslatef(position.getX(), position.getY(), position.getZ());                     
gl.glMultMatrixf(rotationArray,0);
gl.glTranslatef(pivotPoint.getX(),pivotPoint.getY(),pivotPoint.getZ()); 

そして私は試しました

gl.glTranslatef(pivotPoint.getX(),pivotPoint.getY(),pivotPoint.getZ());                     
gl.glMultMatrixf(rotationArray,0);
gl.glTranslatef(position.getX(), position.getY(), position.getZ());
4

1 に答える 1

1

これは、任意の点を中心とした回転に帰着します。従来、オブジェクトを回転させる場合、通常はオブジェクトの中心を中心に回転させますが、この場合は別のピボット ポイントがあります。

任意の点を中心にオブジェクトを回転させるプロセスは次のとおりです。

  1. -(RotationPoint) で翻訳
  2. 回転する
  3. +(RotationPoint) で移動
于 2013-08-15T02:18:06.830 に答える