GLSL: vertex shader pour le fragment shader sans variant
Comment transférer des données de vertex shader pour le fragment shader sans modifications?
J'ai besoin de dire au sommet de pixels qu'ils ont cette couleur. Cette couleur je peut obtenir que dans le vertex shader.
- Qu'entendez-vous par "Cette couleur je peux obtenir une couleur que dans le vertex shader.?" Normalement, vous pouvez utiliser les valeurs de couleur dans le fragment shader qui sont créés par le vertex shader. Donc, je ne suis pas sûr de ce que vous demandez.
- Désolé, c'est une faute de frappe.) @DasBoot "Normalement, vous pouvez utiliser les valeurs de couleur dans le fragment shader qui sont créés par le vertex shader." - Comment faire? Je veux dire comment faire pour le transférer.
- À l'aide de varyings.
Vous devez vous connecter pour publier un commentaire.
Voici un bon tutoriel sur GLSL: NeHe GLSL tutoriel
Si vous souhaitez partager des données entre le vertex et fragment shaders utiliser l'une de la construit par types, par exemple
gl_Color
Si vous voulez passer par la couleur calculée par le vertex shader à travers le fragment shader pour créer un fragment shader avec la ligne suivante:
gl_FragColor = gl_Color
gl_Color
sera automatiquement réglé pour vous de les couleurs, écrit par le vertex shader. Vous écrivez une couleur dans le vertex shader en définissant l'une des variables intégrées, commegl_FrontColor
, ou l'un de ses pairs:gl_BackColor
etc.Vous devez utiliser une variable, car chaque fragment est "influencée" par plus d'un vertex (sauf si vous êtes rendu
GL_POINTS
), de sorte que vous avez à interpoler sur l'ensemble de la ligne/polygone. Les versions récentes de GLSL permet de spécifier le plat de l'ombrage d'interpolation, ce qui ne veut pas interpoler la valeur tout au long de la primitive, en ignorant les valeurs des autres sommets.Je soupçonne la pensée que ce que vous voulez faire est de rendre les pixels correspondant aux sommets d'une couleur différente, est-ce correct? Dans ce cas, il n'est pas si facile, vous auriez probablement eu envie de rendre les polygones pleins d'abord, et ensuite re-rendre comme
GL_POINTS
. À ce stade, différentes variables ne sont pas interpolées parce que chaque fragment est influencée par un seul sommet.