2011-09-26 7 views
3

J'ai un objet VBO 2D qui représente des points dans l'espace 2D. Quelle est la meilleure façon de dessiner une forme arbitraire à ce moment-là? Disons que je voulais dessiner un 'X' rouge à chacun. Est-ce que je peux utiliser un shader pour cela?OpenGL VBO shader

Répondre

1

Vous n'avez pas besoin d'un shader spécial pour cela, vous pouvez simplement utiliser des sprites ponctuels. Cela signifierait dessiner le VBO comme un ensemble de points (en utilisant glDrawArrays(GL_POINTS, ...)) et permettre aux sprites de dessiner un carré texturé (avec une texture du 'X') à la position de chaque point, en supposant une taille de point supérieure à 1 pixel.

Pour générer une géométrie réelle à l'emplacement de chaque point, vous pouvez utiliser le shader de géométrie. De cette façon, vous rendez également le VBO comme ensemble de points et générez deux lignes (le 'X') ou n'importe quelle géométrie pour chaque point à l'intérieur du shader de géométrie.

Une alternative à la géométrie shader sont des tableaux instanciés (nécessitant le même matériel GL3/DX10 que nécessaire pour les geometry shaders). De cette façon, vous dessinez plusieurs instances de la forme 'X' et vous obtenez les positions individuelles des instances à partir du point VBO en utilisant un attribut dont l'index est avancé une fois par instance. La dernière alternative serait de générer les géométries des formes manuellement sur la CPU, de sorte que vous vous retrouviez avec un ensemble de lignes ou un ensemble de quatre conatining tous les X comme des lignes ou des sprites ou quoi que ce soit. Mais le moyen le plus facile (et peut-être le plus rapide, pas sûr) devrait être l'approche par points mentionnée en premier, car leurs problèmes habituels d'écrêtage ne devraient pas être un problème dans votre cas et vous ne semblez pas avoir besoin de formes 3D de toute façon. De cette façon, vous n'avez pas besoin de générer la géométrie vous-même sur le CPU, ni besoin de shaders spéciaux ou de matériel GL3/DX10 (bien que cela soit assez courant de nos jours). Tout ce dont vous avez besoin est une texture de la forme et activez les sprites de points (qui devraient être essentiels depuis GL 1.5).

Si toutes ces idées générales ne vous disent rien, vous pouvez vous plonger un peu plus dans OpenGL et les infographies en temps réel en général.