小编Mic*_*ver的帖子

什么导致我的光线跟踪器中的工件?

编辑:我现在已经解决了这个问题; 你可以在答案中看到我的解决方案.

我正在使用OpenGL(在GLSL计算着色器中)编写实时光线跟踪器,我遇到了一些线三角交叉点的问题(或者至少,我相信它们是罪魁祸首) .这是一张正在发生的事情的图片:

球体在一个房间里有一些文物

如您所见,一些像素在图像顶部附近的两个三角形的交叉点处被涂成黑色.它可能与我正在处理花车或其他东西的方式有关,我尝试在线搜索解决方案,但找不到类似的情况.也许我错过了一个重要的关键词?

无论如何,重要的代码是这一个:

#define EPSILON 0.001f
#define FAR_CLIP 10000.0f
float FindRayTriangleIntersection(Ray r, Triangle p)
{
    // Based on Moller-Trumbone paper
    vec3 E1 = p.v1 - p.v0;
    vec3 E2 = p.v2 - p.v0;
    vec3 T = r.origin - p.v0;
    vec3 D = r.dir;
    vec3 P = cross(D, E2);
    vec3 Q = cross(T, E1);

    float f = 1.0f / dot(P, E1);
    float t = f * dot(Q, E2);
    float u = f * dot(P, T);
    float v = …
Run Code Online (Sandbox Code Playgroud)

c++ opengl 3d raytracing glsl

18
推荐指数
1
解决办法
1751
查看次数

标签 统计

3d ×1

c++ ×1

glsl ×1

opengl ×1

raytracing ×1