2009-07-27 6 views
0

D'après ce que j'ai pu voir sur Internet, ce problème ne peut pas vraiment être résolu avec mon approche.Sélection Opengl avec test alpha

Je suis en train d'écrire un programme qui utilise un buffer de sélection sur tous les objets de la scène. Cependant, l'un des objets est une texture dans laquelle une grande partie a alpha 0. Cela fonctionne très bien lors du rendu, les valeurs alpha ne sont pas affichées, mais en mode de sélection, le test alpha est ignoré et survolant la souris les zones transparentes sélectionnent l'objet à la place de ce qu'il y a derrière.

Est-il possible d'activer le test alpha en mode de sélection?

Répondre

1

Je pense que ce que vous entendez est le mélange alpha est sautée. Je ne l'ai pas testé, mais il apparaît du commentaire here, que les tests alpha sont toujours utilisés en mode GL_SELECT. Donc, vous voudrez glEnable (GL_ALPHA_TEST), puis utilisez glAlphaFunc() pour définir votre seuil pour combien d'alpha constitue un hit. Pour tester avant de simplement essayer aveuglément de sélectionner ces objets, il suffit de le rendre. Vous verrez qu'OpenGL ne rend qu'une partie de votre polygone; et n'importe laquelle de ces parties constituerait un clic, tandis que n'importe quelle partie non dessinée ne serait pas touchée avec votre GL_SELECT.

S'il vous plaît commenter et laissez-moi savoir comment cela fonctionne. Si vous n'arrivez toujours pas à le faire fonctionner, je peux prendre le temps d'écrire un test pour vous, mais je préfère ne pas passer le temps si vous pouvez le faire fonctionner seul. :)

Aussi, pour référence, the OpenGL docs for Alpha test et the manpage for glAlphaFunc.

0

On dirait glReadPixels est ce que vous cherchez

http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml

Utilisez quelque chose comme:

glReadPixels (0, 0, XSCREEN, YSCREEN, GL_ALPHA, GL_UNSIGNED_BYTE, buffer); 
+0

Comment cela vous aide-t-il? Je ne veux pas savoir ce qu'il y a dans le tampon, je veux juste que le code picking ne renvoie rien si c'est une zone vide qui est sous la souris. –

+0

buffer contiendra alpha (opacité) pour pixel donné – Stanislav