我正在尝试使用OpenGL为iOS应用程序渲染一个阿甘场景。为了使它更好一点,我想在场景中实现深度效果。但是,我需要从OpenGL深度缓冲区获得线性化的深度值。目前,我正在片段着色器(在此处找到)中使用计算。
因此,我的地形片段着色器如下所示:
#version 300 es
precision mediump float;
layout(location = 0) out lowp vec4 out_color;
float linearizeDepth(float depth) {
return 2.0 * nearz / (farz + nearz - depth * (farz - nearz));
}
void main(void) {
float depth = gl_FragCoord.z;
float linearized = (linearizeDepth(depth));
out_color = vec4(linearized, linearized, linearized, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
但是,这将导致以下输出:
如您所见,越远,您得到的深度值越“条纹”(尤其是在船后)。如果地形图块靠近相机,那么输出就可以了。
我什至尝试了另一种计算:
float linearizeDepth(float depth) {
return 2.0 * nearz * farz / (farz + nearz - (2.0 * depth - 1.0) * (farz - …Run Code Online (Sandbox Code Playgroud)