14

このスクリーンショットからわかるかもしれませんが、私は自分が取り組んでいるプラットフォーマー用の物理エンジンを作ろうとしていますが、明確な問題に遭遇しました:私はいずれかの角度を見つけることができる必要があります表示されている三角形がこのメッシュを構成しているので、その三角形でのプレーヤーの回転と角加速度を計算できます。

スクリーンショット

作成したアルゴリズムを使用して、プレーヤーが接触している三角形の3つのポイントすべての位置を見つけることができますが、これらのポイントを使用して三角形の回転を計算する方法がわかりません。

回転とは、顔の中心から離れる法線の方向、つまり、人がその表面に立った場合に傾く角度を意味します。誰かがこの問題を解決することを可能にする一連の方程式を思い付くことができますか?

4

4 に答える 4

34

2つのベクトルの外積を取る場合:

p1 - p0

p2 - p0

ここp0で、、は三角形の3つの頂点でp1ありp2、法線を取得します。頂点がその外向きの法線に対して時計回りに並べられている場合、三角形はあなたの方を向いていると見なされます。これは左手の法則と呼ばれます。p0指をからに丸めて左手を握るとp1、親指が通常の顔の方向に突き出たと想像してください。

カメラから離れて指している顔 カメラの方を向いている顔

于 2009-10-04T12:44:30.287 に答える
10

クロス積が正解です。結果を正規化することを忘れないでください。また、三角形の面積がゼロの場合、明確に定義された法線がないため、結果が無効になることを忘れないでください。基本的に、3つの頂点がp0、p1、p2の場合:

vector temp = cross(p1 - p0, p2 - p0);
if (length(temp) < epsilon) then
    Degenerate_triangle_error;
else
    return normalize(temp);

また、他の答えが言うように、「上向き」または「下向き」のどちらが正常になるかは、頂点の順序によって異なります。

于 2009-10-05T10:17:31.700 に答える
3

質問への回答を完了するには、三角形の単位法線ベクトルを取得したら、内積を使用して角度を計算できます。

2つの単位ベクトルの内積は、それらの間の角度のコサインに等しいため、単位法線ベクトルと単位アップベクトルの内積の内積を計算すると、三角形の傾斜角(角度が離れる)が得られます。水平から)。

また、OpenGLは従来、右手座標系を使用しているため、これを使用している場合、三角形の頂点は反時計回りの順序になります。

于 2009-10-06T02:50:34.150 に答える
2

三角形には2つの法線があり(もちろん)、標準のアルゴリズムから得られる法線は、頂点の順序によって異なります。ウィキの引用

「ポリゴン(三角形など)の場合、サーフェス法線は、ポリゴンの2つの(平行でない)エッジのベクトル外積として計算できます。」

ただし、法線の方向は選択したポイントの順序によって異なります。それを計算し、他のヒューリスティックを使用して、逆ベクトルが目的の法線であるかどうかを判断できます。

于 2009-10-04T12:43:02.040 に答える