Question

Je construis un simple glisser 3D et déposer l'interface dans le traitement, et que vous voulez détecter les rouleaux de la souris sur un objet. Je suppose que je dois faire des traductions de la matrice pour les coordonnées pour les obtenir le modèle 3D dans l'espace de l'écran et ainsi de suite ...

J'ai une version simple de ce travail, le problème est que lorsque l'appareil photo est déplacé autour de la scène les coordonnées que je reçois se détraquer.

Alors, comment puis-je traduis le carreau les coordonnées dans l'espace de l'écran (depuis le screenX et screenY ne fonctionnent pas correctement)?

Mise à jour: J'ai finalement trouvé deux exemples tirés du site de traitement sur la façon de le faire. Merci à villintehaspam .

http://processing.org/hacks/hacks:picking

Était-ce utile?

La solution

Ce problème est appelé la cueillette. Recherche pour la cueillette de la souris et vous obtenez beaucoup et beaucoup de succès.

Théorie de base est la suivante:

  1. Get x, y coords du clic de la souris.
  2. convertir en x, y, z les coordonnées en coordonnées oculaires (par exemple -1 <= x <= 1, -1 <= y <= 1, z = proche / lointain distance de pince, si vous avez une projection normale) .
  3. Transformer ces coordonnées par l'inverse de la matrice de projection pour obtenir les coordonnées monde.
  4. Vous avez maintenant un rayon de la position de la caméra, avec la direction vers le monde coordonnées avez juste.
  5. un test d'intersection objet de rayons avec les objets que vous voulez examiner. Choisissez l'objet qui coupe le rayon qui est plus proche de l'origine des rayons (position de la caméra).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top