當我創建Z緩衝質地像這樣:渲染Z緩衝到紋理的WebGL
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值不正確?
你是對的,這是一個精確的問題。我試圖使用顏色紋理來獲得深度值的完整32位精度。出於某種原因,你的解決方案似乎創造了更多的文物,我似乎無法擺脫它們。它也會隨機產生陰影。我認爲openGL會做一些額外的優化。 – spearmunkie