В настоящее время я пишу трайтре. Теперь я хочу реализовать пересечение лучей треугольника. Таким образом, мой треугольник состоит из трех точек (v0, v1, v2). Я смотрел другие сообщения по этой теме (Raytracing - Ray/Triangle Intersection). К сожалению, он работает неправильно, поэтому я хочу проверить, есть ли проблема на стороне пересечения. Вот мои две функции треугольника:Pathtracing Ray Triangle Intersection
public float intersect(Ray ray){
Vector3D e1 = v1.sub(v0);
Vector3D e2 = v2.sub(v0);
Vector3D e1e2 = e1.cross(e2).normalize();
Vector3D p = ray.direction.cross(e2);
float a = e1.dot(p);
if(a < 0.0)
return -1.0f;
float f = 1.0f/a;
Vector3D s = ray.origin.sub(v0);
float u = f*(s.dot(p));
if(u < 0.0 || u > 1.0)
return -1.0f; //no hit
Vector3D q = s.cross(e1);
float v = f * (ray.direction.dot(q));
if(v < 0.0 || v > 1.0)
return -1.0f; //no hit
float t = f * (e2.dot(q)); //distance
return t;
}
public Vector3D normal(Vector3D nVec){
Vector3D e1 = v1.sub(v0);
Vector3D e2 = v2.sub(v0);
Vector3D e1e2 = e1.cross(e2).normalize();
return e1e2;
}
Так выглядит этот код правильно?