2010-11-11 8 views
5

Possible en double:
How do I determine what is touched in 3D space from the screen?détecter les touches de l'utilisateur sur un carré OpenGL

Je développe une application Android. Je travaille également avec les graphismes OpenGL.

J'ai un carré dessiné sur l'écran et je veux que l'utilisateur le déplace lorsqu'il le touche. En d'autres termes, l'utilisateur devrait pouvoir se déplacer lorsqu'il place son doigt sur le carré. S'il touche à l'extérieur de la place rien ne se passe.

Comment puis-je détecter si l'utilisateur touche un carré?

Merci.

Répondre

3

Les tutoriels de sélection et de sélection fournis dans d'autres réponses ne sont pas applicables ici; entre autres glSelectBuffer et glRenderMode ne font pas partie d'OpenGL ES. Il y a, comme indiqué ailleurs, essentiellement deux approches. Vous pouvez comprendre comment le toucher correspond à votre scène et tester vos objets mathématiquement. Si votre carré est plat, comme si vous le dessiniez en 2d, alors vous pouvez le faire assez facilement. Alternativement, vous pouvez faire quelque chose essentiellement comme le choix mais adapté pour la fonctionnalité disponible sous OpenGL ES. Par exemple, effacez votre scène au noir et dessinez votre carré en bleu uni. Utilisez glReadPixels pour obtenir la valeur de couleur à l'emplacement tactile. Si c'est bleu alors le toucher est sur le carré. C'est probablement une façon plus coûteuse de tester car cela signifie un tirage supplémentaire de la scène, mais cela signifie que vous n'avez pas à implémenter de maths supplémentaires ou d'autres codes au-delà de ce que GL fournit. La seule petite chose à garder à l'esprit est que OpenGL utilise la même manière d'adresser les pixels partout - (0, 0) est le bas à gauche, le positif y monte et le positif x va à gauche. Ainsi, quels que soient les axes sur lesquels vous avez vos coordonnées tactiles, vous devez les transformer pour être relatif à cela avant de faire les glReadPixels.

+0

Cela semble si difficile. Je vais mettre quelques boutons sur l'écran et les utiliser pour déplacer des objets OpenGL. – VansFannel

+0

@VansFannel ce n'est pas si difficile du tout, il suffit de suivre le tutoriel pour la sélection des couleurs. Un bouton pour faire ce que le doigt peut faire sur l'iPhone est une très mauvaise idée – rano

+0

@rano: Je le fais pour Android pas pour iPhone. – VansFannel

0

Si vous n'avez qu'un carré, vous pouvez vérifier si les coordonnées tactiles se trouvent à l'intérieur de l'espace formé par les quatre sommets du carré. Dans le cas d'un carré non parallèle au carré de l'axe x, vous devez projeter ses sommets à l'aide de la matrice de projection.

Plus généralement, il existe plusieurs techniques pour « choisir » un modèle OpenGL: ray picking et couleur cueillette étant le plus utilisé. Assurez-vous de jeter un oeil à this doc

4

Les touches de détection peuvent être mises en œuvre en utilisant la sélection de rayons. J'ai eu le même problème et j'ai utilisé le code sur cette page: Android OpenGL ES ray picking. Méthode getViewRay() calcule la direction du rayon. Si vous connaissez la direction de [0,0,0] à rayon [x, y, z], il est assez facile de simuler un lancer de rayons et de détecter la collision avec un objet englobant.

Questions connexes