Я просто пытаюсь отобразить значения глубины моей сцены с помощью WebGL2 следующим образом:
//Texture
depthTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, depthTexture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT24,
width, height, 0,
gl.DEPTH_COMPONENT, gl.UNSIGNED_INT, null);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
//FBO
fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, depthTexture, 0);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
Затем я делаю это так:
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.useProgram(shaderProgram);
//Just a torus...
gl.bindVertexArray(vao);
gl.colorMask(false, false, false, false);
gl.enable(gl.DEPTH_TEST);
gl.clear(gl.DEPTH_BUFFER_BIT);
...
gl.drawElements(gl.TRIANGLES, indices.length, gl.UNSIGNED_SHORT,0);
//Then I draw a full screen quad that simply samples the depth texture
gl.bindFramebuffer(gl.FRAMEBUFFER, null)
....
Кажется, это работает нормально, однако при выборке прикрепленной текстуры глубины я получаю то, что выглядит как линейная глубина...
Программы, которые я использую для рендеринга в FBO, очень просты.
Верт:
#version 300 es
layout(location = 0) in vec3 position;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
void main() {
gl_Position = projection * view * model * vec4(position, 1.);
}
Фрагмент:
#version 300 es
precision highp float;
layout(location = 0) out vec4 outColor;
void main() {
outColor = vec4(1,0,0,1)
}
Я ожидал, что буфер глубины будет логарифмическим, и даже если я не могу точно сказать, что то, что я сейчас получаю, действительно линейно или нет, оно также не выглядит логарифмическим... Если оно действительно линейное, и каким-то образом это то, что вы должны получить от привязки глубины, меня это вполне устраивает, так как мне, вероятно, понадобится линейная, а не логарифмическая глубина, но в настоящее время я не уверен, является ли это ожидаемым поведением, или я делаю что-то не так (скорее всего последнее)
Ваше здоровье
mat4.perspective([], Math.PI/3, width / height, 1, 1000)
из этой библиотеки glmatrix.net - person Doc   schedule 05.12.2017