问题描述
我设置了着色器,以根据来自GLM的视图和投影矩阵生成光线,GLSL函数如下所示:
Ray Camera_getRay(inout uvec4 useed) {
vec3 rayNDC = vec3(
((2.0f * fragCoord.x) / iResolution.x - 1.0f),(1.0f - (2.0f * fragCoord.y) / iResolution.y),1.0f
);
vec4 rayClip = vec4( rayNDC.x,rayNDC.y * -1,-1.0f,1.0f );
vec4 rayCamera = inverse(projection) * rayClip;
rayCamera.z = -1.0f,rayCamera.w = 0.0f;
vec3 direction = normalize((inverse(view) * rayCamera).xyz);
return Ray(position,direction);
}
我正在尝试按照Defocus Blur chapter中所述添加随机偏移。
我已经走了这么远:
float aperture = 0.1;
float lens_radius = aperture / 2;
vec3 rd = lens_radius * sampleUnitdisk(useed);
但是我不确定接下来如何处理rd
,我是否只是将其添加到射线的位置?我还需要将其添加到射线方向吗?我会改变视图矩阵吗?任何帮助表示赞赏。
解决方法
在光线跟踪器中,我将(2D)随机偏移量添加到眼睛位置(确保运动在与虚拟视图平面平行的平面中),然后然后计算通过最初打算的投影点。
https://github.com/raybellis/RRT/blob/master/rrt/camera.cpp#L66