【发布时间】:2013-09-03 10:35:44
【问题描述】:
我有以下着色器
顶点着色器
#version 330
layout (location = 0) in vec3 inPosition;
layout (location = 1) in vec4 inColour;
layout (location = 2) in vec2 inTex;
layout (location = 3) in vec3 inNorm;
uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
out vec4 ShadowCoord;
void main()
{
gl_Position = projectionMatrix * transformationMatrix * vec4(inPosition, 1.0);
ShadowCoord = gl_Position;
}
片段着色器
#version 330
in vec4 ShadowCoord;
out vec4 FragColor;
uniform sampler2D heightmapTexture;
void main()
{
FragColor = vec4(vec3(clamp(ShadowCoord.x/500,0.0,1.0),clamp(gl_FragCoord.y/500,0.0,1.0),0.0),1.0);
}
我希望这样做是绘制场景,左上角为绿色,右上角为黄色,右下角为红色,左下角为黑色。事实上,当我在片段着色器中将ShadowCoord.x 替换为gl_FragCoord.x 时,就会发生这种情况。那么,为什么我只能得到垂直渐变的绿色呢?显然,我的 ShadowCoord 发生了一些奇怪的事情。有人知道是什么吗?
【问题讨论】:
-
"有人知道它是什么吗?" 没有。因为
ShadowCoord的内容完全取决于我们拥有的两个矩阵的内容不知道它们是什么。我们甚至不知道您使用的是透视项目还是正交项目。 -
好的,但关键是,如果我在片段着色器中用 gl_FragCoord 替换 ShadowCoord,那么它就可以工作。 gl_FragCoord 不是从 gl_Position 派生的吗?如果是这样,为什么 ShadowCoord 不进行相同的插值?
仅供参考,它是相机变换的透视投影。