현재 경로 추적기를 작성 중입니다. 이제 광선 - 삼각형 교차를 구현하고 싶습니다. 그래서 내 삼각형은 세 개의 점 (v0, v1, v2)으로 구성됩니다. 이 주제에 대한 다른 게시물 (Raytracing - Ray/Triangle Intersection)을 보았습니다. 슬프게도 제대로 작동하지 않기 때문에 문제가 교차로에 있는지 확인하고 싶습니다. 다음은 두 개의 삼각형 함수입니다.Pathtracing 레이 삼각형 교차점
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;
}
이 코드가 맞습니까?