理解片段

时间:2012-10-21 07:47:49

标签: glsl fragment-shader

我刚刚开始使用片段着色器,在我完成了一些简单的等离子效果后,我被卡住了。我已经知道你可以检索一个片段的X,Y和Z,我正在考虑建立一个着色器,它会根据Z的颜色对它们进行着色。

这是我到目前为止所拥有的:

void main() {
    float z = gl_FragCoord.z;
    float t = (sin(z) + 1) * 0.5;

    gl_FragColor = vec4(t, t, t, 1);
}

问题在于我用三角形测试它,无论我如何旋转它,它都有相同的恒定颜色所以我开始问自己(和SO):为什么一个三角形颜色?这个Z应该是每片吗?

1 个答案:

答案 0 :(得分:2)

gl_FragCoord中的z坐标在0和1之间归一化(其中0对应于近平面,1对应于远平面)。使用透视投影,此映射是非线性的,有利于近平面。这意味着即使旋转,三角形也可能会映射到相同的颜色。

值得指出的是,你的一般想法很好(在我的GLSL着色器编辑器中创建): http://goo.gl/32Voo

请注意,我在这里使用正交投影来获得更好的深度可视化 - 切换到投影使颜色几乎相同(仅变化几个百分点)。