1

だから私は平らな2Dポリゴンを持っていて、ポリゴンの各ポイントを2つの2Dポイントで定義された軸を中心に回転させたいと思います。これらの回転されたポイントは、後でフラットな 2D ポリゴンから 3D 回転オブジェクトを生成するために使用されます。だから私は現時点でこれを得ました:

  1. 1 つのポリゴン ポイントの軸の法線位置を計算します。
  2. この時点から、matrixLookAt(pointOnLine, polygonPoint, upVec) 関数を使用して行列を計算します。
  3. 次に、マトリックスを Z 軸上で 45° 回転させます。
  4. そして最後に、polygonPoint に計算された行列を掛けます。

しかし、この方法では、有用な結果は得られません。

理解を深めるために:P1とP2は軸を定義しています PsrcはpolygonPointであり、Pdestは3Dの最終点です ここに画像の説明を入力

4

1 に答える 1

4

はるかに簡単に実行できます。を使用して描画する前に、モデル マトリックスを変更するだけglRotatef()です。

glRotatef(angle, vx, vy, vz);
  • angleは明らかに角度です。
  • vxvy、およびvzは、回転軸を定義するベクトルです。

または、指定された 2 つのポイントで使用するには:

glRotatef(p1.x - p2.x, p1.y - p2.y, p1.z - p1.z);

回転軸がワールドの原点を通過しない場合は、以下を使用して軸が原点を通過するようにすべてを調整する必要がありますglTranslatef()

glTranslatef(-p1.x, -p1.y, -p1.z); // move one point on the vector into the origin
glRotatef(p1.x - p2.x, p1.y - p2.y, p1.z - p1.z); // rotate everything
glTranslatef(p1.x, p1.y, p1.z); // move everything back into position
于 2013-07-23T09:37:35.423 に答える