问题一:从深度值获取世界坐标
我确定很多的例子也是这么干的。
但是结果位置歪曲了并且当从原点移动camera的时候变得更糟糕,破坏了光照。
回答一:
你应该用 glfragcoord的z来计算或者预先算出z坐标
A.z应该是索要的z值
回答二:
你的代码看起来运行的很慢,但是是比较好的解决方式。 screenUVs是如何算出来的
你是否传递的是渲染场景的世界坐标?也许可以试试在CPU上计算 inverse-view-proj并且传给着色器。
由深度恢复坐标一般在后处理/延迟着色系统较为常见,上个回答中 glfragcoord是不能获取的,并且像素的世界坐标没有其它办法可以获取。
追问:
screenuvs是屏幕坐标上的0-1值,
当我使用一个明确的世界坐标下的缓存并且正确显示,我认为是读取到了正确的uv。
我使用了cpu inverse view proj但是并没有什么改变。
这很奇怪了,因为当相机很远时又正常了。
。。。。。
后来提问者找到了原因,原来是:
glDepthRangef被设置为 0.1f and 1000.0f
设置为 0.0f and 1000.0f.固定了位置重建。
回答三:
glDepthRangef用于NDC-》 depth-texture transform,通常取值0-1,最好不要动它。
回答四:
引用了定义:
我确定很多的例子也是这么干的。
但是结果位置歪曲了并且当从原点移动camera的时候变得更糟糕,破坏了光照。
回答一:
你应该用 glfragcoord的z来计算或者预先算出z坐标
A.z应该是索要的z值
回答二:
你的代码看起来运行的很慢,但是是比较好的解决方式。 screenUVs是如何算出来的
你是否传递的是渲染场景的世界坐标?也许可以试试在CPU上计算 inverse-view-proj并且传给着色器。
由深度恢复坐标一般在后处理/延迟着色系统较为常见,上个回答中 glfragcoord是不能获取的,并且像素的世界坐标没有其它办法可以获取。
追问:
screenuvs是屏幕坐标上的0-1值,
当我使用一个明确的世界坐标下的缓存并且正确显示,我认为是读取到了正确的uv。
我使用了cpu inverse view proj但是并没有什么改变。
这很奇怪了,因为当相机很远时又正常了。
。。。。。
后来提问者找到了原因,原来是:
glDepthRangef被设置为 0.1f and 1000.0f
设置为 0.0f and 1000.0f.固定了位置重建。
回答三:
glDepthRangef用于NDC-》 depth-texture transform,通常取值0-1,最好不要动它。
回答四:
引用了定义:
"The setting of (0,1) maps the near plane to 0 and the far plane to 1. With this mapping, the depth buffer range is fully utilized."
意味着无需改变。