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
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.
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
Vous devez vous connecter pour publier un commentaire.
Oui,
gl_FragCoord
est "dérivé degl_Position
". Qui ne pas dire que c'est égal à.gl_Position
est le clip de l'espace-position du vertex.gl_FragCoord.xyz
contient la fenêtre de l'espace de la position du fragment. Ce ne sont pas les mêmes espaces. Pour passer de l'un à l'autre, le matériel graphique effectue un certain nombre de transformations.Transformations qui ne pas se produire à d'autres valeurs. C'est pourquoi le fragment shader ne pas l'appeler
gl_Position
; car il n'est pas de cette valeur plus. C'est une nouvelle valeur calculée à partir de l'original basé sur l'état de divers (de la fenêtre d'affichage & gamme de profondeur) que l'utilisateur a défini.Définis par l'utilisateur vertex paramètres sont interpolées comme ils sont. Rien de "tordu" qui se passe avec votre nom d'utilisateur défini par l'interpolation de paramètres. Le système est en train de faire exactement ce qu'il doit: interpolation de la valeur que vous avez passé à travers le triangle de la surface.
"Comment pourrait-on dire que le système n'ces processus par rapport à une autre variable?" Vous n'avez pas; vous aurez à le calculer vous-même. C'est juste une autre matrice multipliez, vous pouvez le replier dans l'extrémité arrière de la matrice que vous utilisez déjà.
OriginalL'auteur Nicol Bolas