我目前正在寫一個路徑追蹤器。現在我想要實現光線 - 三角形的交集。所以我的三角形由三個點組成(v0,v1,v2)。我看了關於這個主題的其他帖子(Raytracing - 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;
}
那麼這段代碼是否正確?