使用偏移时,从屏幕空间转换为世界空间(webgl)

时间:2016-10-30 14:55:13

标签: glsl webgl antialiasing coordinate-transformation

我一直在从屏幕空间转变为世界空间:

//convert the window coordinates from gl_fragCoord to NDC coordinates: 
ndc.x = 2.0*((gl_FragCoord.x)/width-0.5); 
ndc.y = 2.0*((gl_FragCoord.y)/height-0.5);
ndc.z = (2.0*gl_FragCoord.z-far-near)/(far-near);

//convert the NDC coordinates to clip coordinates - gl_FragCoord.w = 1/w_clip: 
clip = vec4(ndc,1.0)/gl_FragCoord.w;   

//convert the clip coordinates to eye coordinates: 
eye = invproject*clip;

//convert eye coordinates to world space (with inverse view matrix)
objectpos = invmodel*eye;

这很好用,但问题是我正在尝试执行一些抗锯齿,我将屏幕坐标偏移som随机值,以便新坐标仍在屏幕像素内。我想这可以这样做:

ndc.x = 2.0*((gl_FragCoord.x+half_pixelsize*random.x)/width-0.5);   
ndc.y = 2.0*((gl_FragCoord.y+half_pixelsize*random.y)/height-0.5);
ndc.z = (2.0*gl_FragCoord.z-far-near)/(far-near);
...

但问题是我仍然使用相同的z坐标,当改变屏幕空间中的坐标时,它应该在眼睛空间上有所不同。

我被告知这可以通过重新投影z坐标来处理:如果给出一个原始点,那么通过使用毕达哥拉斯,应该重新投射从原点到新点的距离。但我无法真正理解它的含义,或者是否有其他方法可以解决这个问题?

0 个答案:

没有答案