GLSL - en Passant en coordonnées fragment shader?

J'ai le texte suivant shaders

VertexShader

#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;
}

FragmentShader

#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);
}

Ce que je m'attends à ce à faire est de dessiner la scène, avec du vert en haut à gauche, en jaune, en haut à droite, en rouge, en bas à droite et noir en bas à gauche. En effet, c'est ce qui se passe lorsque je remplace ShadowCoord.x avec gl_FragCoord.x dans mon fragment shader. Pourquoi, alors, ne puis-je obtenir un gradient vertical de vert? De toute évidence quelque chose de tordu qui se passe à mon ShadowCoord. Quelqu'un sait ce que c'est?

"quelqu'un sait ce que c'est?" Pas de. Parce que le contenu de ShadowCoord dépendent entièrement sur le contenu de deux matrices que nous n'avons aucune idée de ce qu'ils sont. Nous ne savons même pas si vous êtes en utilisant un point de vue ou orthographique projet.
Ok, mais le point est que si je remplace ShadowCoord avec gl_FragCoord dans le frag shader, alors il fonctionne. Est gl_FragCoord ne proviennent pas de l'gl_Position? Si oui, pourquoi ne ShadowCoord subissent pas de la même interpolation? <EDIT> pour info, c'est une projection en perspective d'un appareil de transformation.

OriginalL'auteur rspencer | 2013-09-03