|
本帖最后由 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里取眼色乘回去看看对不对
|
|