【发布时间】:2021-08-18 00:37:54
【问题描述】:
我知道gl_FragDepth 将从 opengl wiki 获取 gl_FragCoord.z 的值。
https://www.khronos.org/opengl/wiki/Fragment_Shader/Defined_Outputs
但是我有一个问题。如果我启用 MSAA 并在片段着色器中写入gl_FragDepth = gl_FragCoord.z,则显示将无法正常工作。您可以在白色三角形上看到一条黑线,如下所示:
如果我不在片段着色器中写gl_FragDepth,它会正常工作。
如果我禁用 MSAA,无论我写gl_FragDepth,它都可以正常工作。
正确的显示图像没有黑线:
渲染场景很简单,我只画了两个白色三角形,它们相交在一条边上。
我在顶点着色器中添加了一个简单的灯光。代码如下:
const char *vertexShaderSource[] = {
"#version 120\n",
"varying vec4 lightColor;\n",
"void main()\n",
"{\n",
" vec3 n = normalize(gl_NormalMatrix * gl_Normal);\n",
" vec3 l = normalize(vec3(0.0, 1.0, 1.0));\n",
" float NdotL = clamp(dot(n, l), 0.001, 1.0);\n",
" lightColor = vec4(1.0)*(NdotL + 0.2);\n",
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n",
"}\n"
};
const char *fragmentShaderSource[] = {
"#version 120\n",
"varying vec4 lightColor;\n",
"void main(void)\n",
"{\n",
" gl_FragColor = vec4(lightColor.rgb, 1.0);\n",
" gl_FragDepth = gl_FragCoord.z;\n"
"}\n"
};
2个三角形的6个顶点的位置是(-5,-5,0),(5,-5,0),(-5,5,0),(-5,0,0),( 5,0,0),(-5,0,-10)。 法线垂直于三角形。
如果我在片段着色器中写gl_FragDepth,我想知道为什么显示图像不同?
【问题讨论】: