2013-03-30 2 views
2

Je crée une petite application OpenGL Mac qui utilise des sprites ponctuels. J'utilise un tableau de vertex pour les dessiner, et je veux utiliser une fonction "array" similaire pour leur donner toutes les tailles différentes.Comment dessiner des sprites ponctuels de différentes tailles dans OpenGL?

En OpenGL ES, il existe un état client appelé GL_POINT_SIZE_ARRAY_OES, et une fonction correspondante glPointSizePointerOES() qui fait exactement ce que je veux, mais je n'arrive pas à trouver un équivalent en OpenGL standard.

Est-ce que OpenGL le supporte de quelque façon que ce soit?

Répondre

2

Pour développer un peu sur la réponse de Fen, le pipeline OpenGL fonction fixe ne peut pas faire exactement ce que vous voulez. Il peut faire des points de «perspective» qui deviennent plus petits à mesure que la distance Z augmente, mais c'est tout.

Pour la taille de point arbitraire à chaque sommet, vous avez besoin d'un vertex shader personnalisé pour définir la taille de chacun. Passez les tailles des points soit en tant que tableau d'attributs (réutilisez les normales de surface ou les coordonnées tex, ou utilisez votre propre index d'attributs) ou dans une texture, par exemple une texture 1D avec largeur égale à la taille des points array. L'exemple de code de shader mentionné par Fen utilise la technique de la texture.

+0

Merci pour les conseils! Je n'ai jamais utilisé de shaders auparavant, et je n'ai qu'une connaissance de base, donc cela me semble être une excellente occasion de me mouiller les pieds. –

2

OpenGL ne prend pas en charge cette extension Apple, mais vous pouvez le faire d'autre autre manière:

Pour pipeline fixe: (opengl 1.4 et plus)

Vous devez paramètres du point de configuration:

float attenuation[3] = {0.0f, 1.0f, 0.0f};  
glPointParameterfvEXT(GL_POINT_DISTANCE_ATTENUATION, attenuation); 

glPointParameterfEXT(GL_POINT_SIZE_MIN, 1.0f); 
glPointParameterfEXT(GL_POINT_SIZE_MAX, 128.0f); 

glEnable(GL_POINT_SPRITE); 

OpenGL calcule la taille du point pour vous de cette façon

Shaders

Voici quelques informations pour le rendu en utilisant les shaders: http://en.wikibooks.org/wiki/OpenGL_Programming/Scientific_OpenGL_Tutorial_01

+0

Salut, merci d'avoir répondu! La route de paramètres de point semble être une solution sale pour ce que j'essaie d'accomplir (il s'agit de la taille réelle, pas de la perspective). Je suppose que je vais devoir commencer à lire sur les shaders. Il est temps de toute façon. –

+0

pipeline fixe est l'ancienne façon ... mais fonctionnera. Si vous avez encore un peu de temps, je vous suggère de l'implémenter de manière shader – fen

1

Si par "Est-ce que OpenGL supporte cela", vous voulez dire "Puis-je faire quelque chose comme ça dans OpenGL", absolument.

Utiliser des shaders. Passez un attribut de vertex générique en 1 dimension qui représente la taille de votre point. Et dans votre vertex shader, définissez cette taille en tant que sortie gl_PointSize du vertex shader. C'est vraiment très simple.

Si vous vouliez dire "Est-ce que OpenGL à fonction fixe le supporte", non.

Questions connexes