【发布时间】:2019-04-12 04:35:50
【问题描述】:
我目前正在编写一个路径跟踪器。现在我想实现射线 - 三角形相交。所以我的三角形由三个点 (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;
}
那么这段代码正确吗?
【问题讨论】:
标签: graphics geometry raytracing