私が取り組んでいるゲームには、動く円筒形のキャラクターと三角形で作られた静的メッシュの間で、かなり初歩的な物理エンジンがあります。意図された動作は、キャラクターがサーフェスを横切ってスライドすることであり、ほとんどの場合、問題なく動作します。しかし、エンジンは正面衝突と斜め衝突を区別しません。
私が提供できる情報が役立つかどうかは完全にはわかりません。とにかく、任意の円柱と三角形の間の「接触角」を決定する方法である数学的な解決策を探しています。私の本能は、三角形と円柱の間の接点を見つける必要があることを教えてくれます。次に、その点が三角形の内部にあるか (三角形の通常の法線を使用して)、またはそのエッジの 1 つに沿っているか (角度を使用して) を判断します。接触点とシリンダー上のある点の間のどちらかはわかりません。)しかし、より良い解決策があると確信しています。
リクエストに応じて、ここにいくつかの例を示します。この最初の画像では、円柱が三角形に向かって下向きに移動します (この例では、三角形は垂直で、線に単純化されています)。式を使用して、速度ベクトルを三角形の平面に投影しVf = V - N * (dot(V,N))
ます。これは、このタイプの衝突の意図された動作です。
このイメージでは、円柱の軸は三角形の法線と平行です。現在の実装では、Vf は依然として三角形の自然な法線を使用して決定されます。これにより、円柱が垂直方向に動き始めます。意図した動作では、N は三角形の衝突エッジに対して垂直になります。
しかし、これらは衝突の両極端にすぎません。間にたくさんの中間があるので、もっと恣意的な解決策が必要です。
これは、より 3D の例での私の試みです。視点が悪くてすみません。この三角形の一番下の頂点は「カメラ」に近いです。円柱と三角形の間の衝突点は、赤い X でマークされています。意図した動作では、円柱がカメラから直接離れる方向に移動している場合、円柱は三角形のエッジの長さに沿って左にスライドします。接触点がキャップではなく、シリンダーのチューブ セクションに沿っているため、垂直方向の動きは与えられません。
現在の動作では、三角形の法線が使用されます。円柱は、三角形の面を横切って滑るように上向きに押されますが、三角形への移動を防ぐことはほとんどありません。
これが難しい要求であることは理解しています。そのため、質問を絞り込むのに役立つ提案に感謝します。