查看: 1197|回复: 1

FBO深度反算坐标

[复制链接]

该用户从未签到

发表于 2014-4-14 22:27:12 | 显示全部楼层 |阅读模式
本帖最后由 wo370506875 于 2014-4-14 22:30 编辑

现在在研究实体光,大体的思路是在场景渲染后保存场景深度图    depthtex;
在一个PASS里计算每个像素点的从近平面到当前深度的一条线段于光源求交集。

着色代码不太标准,函数记不住。
uniform sample2d depthtex;
uniform mat4         projmatinverse; //主相机的逆投影矩阵
void main(){
  vec2 uv= gltexcoords[0].st; //取纹理坐标
  vec2 coord = uv*2 - vec2(1.0);  //转换成窗口坐标(0,1)->(-1,1)
float depth = texture2d(uv,depthtex).x;
   vec4 near = vec4(coord, -1,1)  ; //这里取-1还是0?
  vec4 far = vec4(coord,depth*2-1,1);  //这里depth到底该怎么算,网上有说法是 depth = pow(2,(mvp*v).w/z)-1;

near = projmatinverse*near;
far = projmatinverse*far;
vec3 ecnear = near.xyz/near.w;
vec3 ecfar   = far.xyz/far.w;

...求交集
}
  首先是上面的近平面点计算正不正确,还有就是从FBO关联出来的深度图怎么反算回view坐标。
我试过depth*2-1 和 log2(depth+1)都不对。

  还有就是在GLSL里当某个值很大以后有什么好的调试手段么,现在只会把值估计一下缩放到1以内再截图从BMP里取眼色乘回去看看对不对

该用户从未签到

 楼主| 发表于 2014-4-15 10:29:45 | 显示全部楼层
已经解决了,是后面的求交集部分有错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表