2010-08-08 4 views

Répondre

0

Ceci est appelé "sélection 3D". Vous devez traduire les coordonnées de l'écran en coordonnées mondiales. À partir de là, effectuez un test d'intersection rayon/objet collision (boîte englobante?). Si elles se croisent, c'est là que l'utilisateur a cliqué.

Vous devrez en faire un peu plus pour résoudre le problème de l'ordre de profondeur, comme trouver la première fois à l'intersection de chaque objet, puis sélectionner celui avec l'heure (positive) la plus basse.

Si vous effectuez une recherche sur "3D picking", vous pourriez trouver ce que vous cherchez.

Voici un tutoriel: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=32

Notez que ce n'est pas spécifique à toute forme d'objet bondissant, que ce soit un cadre de sélection, un polygone, une courbe, etc. Il vous suffit de comprendre les maths pour le test d'intersection pour chaque type d'objet que vous voulez prendre en charge.

Edit:

Je ne l'ai pas lu ce tutoriel avant reliaient, je viens de comprendre NEHE est l'endroit où tous les enfants cool apprendre OpenGL (il y a certes dix ans ...).

Voici quelque chose de la FAQ OpenGL à propos de la cueillette:

http://www.opengl.org/resources/faq/technical/selection.htm

+0

Le tutoriel NeHe est un mauvais exemple, il ne fonctionne pas à distance dans OpenGL ES. –

+0

@Matias Valdenegro: En fin de compte l'algorithme de sélection 3D lui-même est agnostique API 3D. Je suis d'accord que le didacticiel que j'ai lié est trop coincé dedans, et je ne l'ai pas lu pour voir s'il utilise l'API pour faire des calculs de sélection ou non. Le but de fournir un lien était de montrer qu'il y a au moins un tutoriel de sélection 3D là-bas. NEHE a souvent des tutoriels faciles à suivre pour les nouveaux programmeurs OpenGL, qu'ils soient corrects sur tous les fronts ou non. Si vous en avez un meilleur, veuillez fournir un lien. –

0

waldecir, recherchez une fonction raypick. C'est le nom pour envoyer un rayon du centre de la caméra à travers le pixel sur lequel vous avez cliqué (en réalité, la position de ce pixel sur le plan de la caméra représente la "surface de verre de l'écran") ray hits avec quelques informations. Habituellement coordonnée à l'intérieur des axes de surface du polygone, par ex. Coordonnées UV ou texture. En vérifiant les coordonnées, vous pouvez déterminer sur quelle case l'utilisateur a cliqué.

Les rayons peuvent être envoyés de n'importe quelle position et dans n'importe quelle direction, il est donc probable que vous deviez obtenir la position de la caméra et son centre de l'avion, mais la documentation devrait pouvoir vous y aider.