私の Plane クラスには 2 つのフィールドがあります。
public Vector3 Norm; //normal vector
public double Offset; //signed distance to origin
これは交差点に使用するコードで、正しいかどうかはわかりません。方程式とすべてを再確認しましたが、これについてより経験豊富な人からフィードバックを得たいと思います.
public override Intersection Intersect(Ray ray)
{
// Create Intersection.
Intersection result = new Intersection();
// Find t.
double t = - (Vector3.Dot(Norm,ray.Start) + Offset) / (Vector3.Dot(Norm, ray.Dir));
if (t < 0) // the ray does not hit the surface, that is, the surface is "behind" the ray
return null;
// Get a point on the plane.
Vector3 p = ray.Start + t * ray.Dir;
// Does the ray intersect the plane inside or outside?
Vector3 planeToRayStart = ray.Start - p;
double dot = Vector3.Dot (planeToRayStart, Norm);
if (dot > 0) {
result.Inside = false;
} else {
result.Inside = true;
}
result.Dist = t;
return result;
}
また、t が 0 に近い場合はどうすればよいかわかりません。イプシロンで確認する必要があり、イプシロンの大きさを確認する必要がありますか? また、光線が平面と交差するかどうかを正しく確認できるかどうかもわかりません。
ありがとう