Je souhaite pouvoir calculer la direction d'une coordonnée entre les lignes et stocker cette valeur pour chaque pixel de la ligne à l'aide d'un vertex et d'un fragment shader. Mon idée était de calculer le gradient de direction en utilisant atan2 (Gy/Gx) après une transformation modelview pour chaque paire de sommets puis de quantifier cette valeur comme une intensité de couleur pour passer à un fragment shader. Comment puis-je avoir accès aux positions des paires de sommets pour y parvenir ou y a-t-il une autre méthode que je devrais utiliser?
MerciDétermination de l'orientation de la ligne à l'aide des vertex shaders
3
A
Répondre
1
Comment puis-je avoir accès aux positions des paires de sommets?
Vous ne pouvez pas faire cela simplement si vous utilisez simplement un vertex et un fragment shader. Un moyen facile est d'utiliser geometry shaders. À l'intérieur de cette étape de shader, vous pouvez avoir accès à la paire de sommets qui composent votre segment de ligne. Il est alors facile de déterminer l'orientation de la ligne et de la transmettre au fragment shader. Si geometry shader n'est pas une option (en raison de votre public cible), vous pouvez dupliquer votre géométrie (en stockant dans chaque sommet le sommet réel plus le sommet suivant), puis effectuer le calcul dans le vertex shader.
Nous aurions dû dire utiliser OpenGL 2.1 donc pas d'accès aux geometry shaders. Je comprends que je pourrais passer le sommet suivant au shader mais comment déterminer le vertex en cours de rendu. J'utilise actuellement la fonction drawElements. Aurais-je besoin de faire quelque chose comme lister tous les sommets en utilisant glVertex3f après un glBegin (GL_QUADS), puis après chaque appel passant un vec3 uniforme avec la position vertex suivante? – Brett
@Brett vous voulez utiliser un attribut vertex supplémentaire, dans lequel vous placerez toujours le sommet suivant. Donc, votre tableau de vertex serait deux fois plus gros maintenant, et votre vertex shader a accès aux deux valeurs. –