gpt4 book ai didi

c - Raytracing: Ray/Triangles intersection 3D (背面剔除问题)

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:05 24 4
gpt4 key购买 nike

我正在用 C 语言开发光线追踪引擎。到目前为止,一切正常,但是当我围绕 3D 对象(如三角形)移动相机时,当相机进入另一个“180 度范围”时,它会消失,无论X 或 Y。

当我“面对”(前面)三角形时,一切正常。但是当我拿着相机转一圈时,就像绕着物体转了一圈,当我走到后面时,它就不再画了,除非我回去。

路口代码:

static int ray_checkTriangleIntersection(Ray *ray, Triangle *t, double *distance) {
Vector3 pvec, tvec, qvec;
VEC3_CROSS(pvec, ray->direction, t->edges[0]);
double det = VEC3_DOT(t->edges[1], pvec);
if (det < EPSILON) {
return 0;
}
VEC3_SUB(tvec, ray->origin, t->a);
double u = VEC3_DOT(tvec, pvec);
if (u < 0.0 || u > det) {
return 0;
}
VEC3_CROSS(qvec, tvec, t->edges[1]);
double v = VEC3_DOT(ray->direction, qvec);
if (v < 0.0 || u + v > det) {
return 0;
}
double d = VEC3_DOT(t->edges[0], qvec);
double inv_det = 1.0 / det;
d *= inv_det;

*distance = d;
return 1;
}

我不太明白为什么会这样,我认为这 3 个点的顺序无关紧要。

最佳答案

改变 if (det < EPSILON)到: if (fabs(det) < EPSILON)

关于c - Raytracing: Ray/Triangles intersection 3D (背面剔除问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57172595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com