2010-05-21 15 views
0

Mon but est de déplacer une forme dans le monde virtuel de telle sorte qu'elle se termine là où se trouve le pointeur de la souris sur la toile.Comment traduire le mouvement sur le Canvas3D en mouvement dans le monde 3D virtuel

Ce que je: la position -mouse (x, y) sur un objet Canvas3D objet -Point3d où un rayon de sélection à partir de la fenêtre Canvas3D coupe le premier objet de la scène. Ce que je veux: -Certains moyens de traduire les coordonnées de Point3d de sorte que le point d'intersection initial (l'objet Point3d) chevauche toujours la position de la souris sur la toile (comme lorsque j'ai utilisé le rayon de sélection pour déterminer ce sur quoi l'utilisateur a cliqué depuis l'objet Canvas3D).

Merci!

+0

Vous devrez spécifier le comportement du mouvement en 3D, c'est-à-dire comment le mouvement de la souris 2D correspond à un mouvement 3D, par ex. vous pouvez définir une sorte de plan en 3D que l'objet doit déplacer. Avez-vous eu des idées à ce sujet ou est-ce ce que vous demandez vraiment? – Troubadour

+0

maintenant j'ai un cube de fond (0 profondeur le long de l'axe z) et j'ai des formes en face de lui. Je veux déplacer la forme ou déformer le maillage en fonction de l'endroit où l'utilisateur clique et du point d'intersection avec la forme. Ce code est très bien. Ce que je veux faire, c'est voir la forme bouger ou déformer vers l'endroit où la souris est sur la toile pendant que je fais glisser la souris. En ce moment, la forme traîne derrière la souris, disons 3 fois la distance de la souris sur la toile. En ce moment je fais aussi la distorsion basée sur l'intersection de la souris avec l'image de fond ... – Coder

+0

qui a un autre inconvénient de ne pas être capable de faire glisser la forme au-delà du fond (mon arrière-plan ne prend pas le monde virtuel entier, c'est intentionnel). – Coder

Répondre

1

Il semble que vous souhaitiez utiliser le plan parallèle au plan du fond et contenant le point d'intersection avec l'objet. Vous pouvez utiliser ce plan même lorsque la souris se déplace au-delà de l'arrière-plan réel car c'est juste un concept mathématique qui s'étend à l'infini.

Je ne suis pas un programmeur Java, donc je ne peux pas vous donner le code, mais je suis un mathématicien si l'équation est ici que vous avez besoin;)

Soit P le point d'intersection d'origine et appeler l'unité plan de fond n normale . Cette normale est aussi la normale de notre plan d'intérêt. Soit R un point sur le rayon et l désigne son vecteur de direction unitaire.

Ensuite, l'équation du plan est (x-P) .n = 0 pour un point x dans le plan (le point indique le produit scalaire de deux vecteurs). L'équation d'un point sur le rayon est x = R + t * l où t est un nombre réel. Le rayon coupe donc le plan lorsque

(t * l + R - P) .n = 0

-à-dire lorsque

t = (P - R) .n/(ln)

Cela vous donne la valeur de brancher dans votre équation de rayon pour donner le point d'intersection.

+0

Ok, mais pouvez-vous me fournir un code étant donné que je connais le point d'intersection avec la forme (Point3d intersectionWithShape) et les positions début et fin x, y sur le canvas3D, appelez-les Point start et Point end? J'ai aussi le plan de l'arrière-plan, maintenant c'est le plan x-y et c'est z = 0, mais il pourrait bouger dans le futur. – Coder

+0

Avez-vous les moyens de calculer le rayon 3D à partir de votre coordonnée 2D? – Troubadour

+0

Si vous voulez dire le pic de la toile, alors oui. C'est ainsi que j'ai obtenu le point d'intersection avec la forme de ma scène. – Coder