片段着色器中的GLSL精度

时间:2015-10-06 09:24:43

标签: opengl glsl

我的声明声明如下:

    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F, win.width, win.height, 0,GL_RGBA, GL_FLOAT, 0);

我想在颜色通道中转储z-buffer值, 我使用以下片段着色器执行此操作:

#version 330
precision highp float;
layout(location = 0) out vec4 color_out;

void main()
{
float z = gl_FragCoord.z;
color_out = vec4(z,z,z, 0); 
}

不幸的是,我在使用glreadpixel读取的Z缓冲区值和我被转储到纹理颜色通道中的Z缓冲区值之间存在很高的精度损失,任何想法为什么?

这是我期望的值:

depth value 0.996680 : at pixel 274300 
depth value 0.996690 : at pixel 274301 
depth value 0.996701 : at pixel 274302 
depth value 0.996712 : at pixel 274303 
depth value 0.996722 : at pixel 274304 
depth value 0.996733 : at pixel 274305 
depth value 0.996743 : at pixel 274306 

这是我得到的:

color 0.996078 : at pixel 274300 
color 0.996078 : at pixel 274301 
color 0.996078 : at pixel 274302 
color 0.996078 : at pixel 274303 
color 0.996078 : at pixel 274304 
color 0.996078 : at pixel 274305 
color 0.996078 : at pixel 274306

0 个答案:

没有答案