【发布时间】:2011-11-06 15:38:05
【问题描述】:
我有完全填充的深度纹理,但似乎没有从中获得适当的值。
GLSL 代码,片段着色器:
uniform sampler2D depth_tex;
uniform float viewport_w;
uniform float viewport_h;
void main()
{
vec2 coord = vec2(gl_FragCoord.xy);
float depth = texture2D(depth_tex, vec2(coord.x / viewport_w, coord.y / viewport.h)).r;
float c = material_amb * depth; // material_amb is preset by host
out_color = vec4(c, c, c, 1.0f);
}
我希望模型的颜色会因顶点的深度而改变,但我看不到所有内容。当然,我可以在不增加深度的情况下看到模型。深度纹理的类型是 GL_DEPTH_COMPONENT、GL_FLOAT。有什么问题?我认为从纹理中获取深度值的解决方案是错误的,但我不知道原因。深度值存储在哪里?以及如何获得深度值?
【问题讨论】:
-
调试这类东西的一个有用技巧:与其直接乘以
depth,不如乘以fract(depth),这样您就可以确定值是否超出[0..1]范围开始。 -
顺便说一句,你的代码中还有一个错字,
viewport.h应该是viewport_h...也许你使用depth时着色器没有编译?