Question

Ok, dans mon fragment shader GLSL Je veux être en mesure de calculer la distance du fragment d'une ligne particulière dans l'espace.

Le résultat de ceci est que je suis d'abord essayé d'utiliser une vec2 variable définie dans mon vertex shaders pour refléter ce qui se retrouve dans gl_FragCoord:

varying vec2 fake_frag_coord;
//in vertex shader:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
fake_frag_coord=(gl_ModelViewProjectionMatrix * gl_Vertex).xy;

dans le fragment shader je pense:

gl_FragCoord.xy==fake_frag_coord

Mais il ne fonctionne pas. Quelle opération ne le pipeline faire sur gl_Position pour le transformer en gl_FragCoord que je néglige de le faire sur fake_frag_coord?

Était-ce utile?

La solution

gl_FragCoord est coordonnées d'écran, de sorte que vous aurez besoin d'avoir des informations sur la taille de l'écran et ce pour le produire en fonction de la position. Le fake_frag_coord vous avez produit correspondra à un point dans l'écran dans le dispositif normalisé coordonnées Je pense que (-1 à 1). Donc, si vous deviez multiplier par moitié la taille de l'écran dans une dimension particulière, puis ajoutez cette taille, vous obtiendrez des pixels de l'écran réel.

Autres conseils

Le problème que vous avez est que gl_ModelViewProjectionMatrix * gl_Vertex calculé dans un shader est pas toujours ce que les rendements des pipelines de fonction fixes. Pour obtenir des résultats identiques, do = fake_frag_coord ftransform ().

Edit:

Et l'échelle puis avec les dimensions de votre écran.

Je voudrais avoir plus représentant pour que je puisse pinailler aussi. Voici ce que je sais. OpenGL effectue la division par W automatiquement pour vous, donc au moment où une position arrive dans un fragment shader, il est déjà en coordonnées NDC, et alors W sera 1.0, la seule fois que vous devez diviser par W est si vous voulez faire la même chose en mathématiques sur le côté du processeur, et obtenir les mêmes résultats, ou, si vous pour une raison étrange, a voulu obtenir les coordonnées de votre NDC vertex shader.

varying vec2 fake_frag_coord;
//in vertex shader:

fake_frag_coord=(gl_ModelViewMatrix * gl_Vertex).xy
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top