我想在javascript中为oculus rift实现桶形着色器.
根据这个视频(http://youtu.be/B7qrgrrHry0?t=11m26s),桶形失真的半径函数是:
newr = 0.24 * r ^ 4 0.22 * r ^ 2 1
结果:
参考图片:Shader之后:
如果我将函数更改为newr = r我得到原始图像.
如果我将函数设置为:newr = 0.022 * r ^ 2我得到:
这个是接近但不是正确的解决方案(用眼睛测试)
所以它不是程序的错…半径函数就是问题所在.
在这里你可以尝试一个小提琴:http://jsfiddle.net/s175ozts/2/
为什么原始功能不起作用?
谢谢 :)
解决方法:
尝试了很多东西……我终于得到了解决方案.
诀窍是首先将r标准化,然后将barrelfunction与原始r相乘
var sf = pr / rMax; //Scaling factor
var newR = pr*(0.24*Math.pow(sf,4)+0.22*Math.pow(sf,2)+1); //barrel distortion function
请看这里的小提琴:http://jsfiddle.net/s175ozts/4/
结果: