0

基本的に、XNA (C#/.NET) でレイとプレーンを使用して、モデル間の衝突を検出したいと考えています。しかし、それを行う前に、それらがどのように機能するかを必死に知る必要があります.

Ray/Plane の例をどこかに探しに行くと、チュートリアルを選択するしかありません - チュートリアルを選択するつもりはありません...

私がやろうとしているのは、平面を取り、それに 3 つの Vector3 を供給して、3D プリミティブ三角形を表し、それに Ray を発射することです。光線は、空間と方向の単なるポイントです。

私の問題は、Ray at the Plane を発射すると、理解できない結果が得られることです。例えば:

座標 {0,0,0}{1,0,0}{0,0,1} を持つプリミティブを表す Plane があるとします。

ここで、{0.5,1,0.5} (三角形の平面のほぼ中心より上) にレイを配置し、方向を指定します。{0,-1,0}

これにより、1 が得られます。これは、Plane が Ray の 1 単位下にあり、Ray が下を向いているためです。しかし、{2,0,0} にレイ ポイントを設定すると、{2,0,0} は三角形上にないポイントであるため、意味をなさない数値が得られます。

これは私が使用しているコードです。

Plane plane = new Plane(Vector3.Zero, Vector3.Right, Vector3.Backward);
Vector3 rayPos = new Vector3(0.5f, 1f, 0.5f);
Vector3 direction = new Vector3(1f, 0f, 1f) - rayPos;
direction.Normalize();
Ray ray = new Ray(rayPos, direction);
Console.WriteLine(ray.Intersects(plane));

私は何か本当に重要なことを忘れてしまったように感じています。どんな助けでも本当に感謝しています。

4

1 に答える 1

0

2,0,0 は平面上にありませんが、方向 ((2,0,0) - rayPos) は (現在の rayPos から開始する場合) 平面と交差する方向であり、1.87 の結果を返します。 .

于 2013-04-23T20:06:24.397 に答える