Когда я создаю текстуру z-буфера следующим образом:
gl.bindTexture(GL_TEXTURE_2D, texBuff);
gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_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);
gl.texImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, frameBuff.width, frameBuff.height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, null);
Я получаю правильный z-буфер, который затем могу использовать для теней (и мои тени хорошо отображаются). Однако, если я создаю цветную текстуру и раскрашиваю текстуру с помощью z-значения, в моих тенях появляется много артефактов (даже при большом смещении). Цветовой буфер создается следующим образом:
gl.bindTexture(GL_TEXTURE_2D, colorBuff);
gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_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);
gl.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, frameBuff.width, frameBuff.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, null);
Это программа фрагментного шейдера, которая записывает в цветовой буфер:
precision highp float;
void main() {
float z = gl_FragCoord.z;
gl_FragColor = vec4(z, z, z, 1.0);
}
Когда я визуализирую две текстуры на какую-либо поверхность, они выглядят одинаково.
Итак, мой вопрос: почему моя цветовая текстура не работает? Является ли gl_FragCoord.z неверным значением z, записанным в z-буфер? Согласно http://www.opengl.org/sdk/docs/manglsl/xhtml/gl_FragCoord.xml да. Координация текстуры отличается, когда я привязываю цветовой буфер? Или значение z неверно?