Je pense que cela peut être fait en appliquant la matrice de transformation de la scenegraph à z-normal (0, 0, 1), mais cela ne fonctionne pas. Mon code va comme ceci:Comment trouver un vecteur normal pointant directement du monde virtuel à l'écran dans Java3D?
Vector3f toScreenVector = new Vector3f(0, 0, 1);
Transform3D t3d = new Transform3D();
tg.getTransform(t3d); //tg is Transform Group of all objects in a scene
t3d.transform(toScreenVector);
Alors j'ai essayé quelque chose comme ça aussi:
Point3d eyePos = new Point3d();
Point3d mousePos = new Point3d();
canvas.getCenterEyeInImagePlate(eyePos);
canvas.getPixelLocationInImagePlate(new Point2d(Main.WIDTH/2, Main.HEIGHT/2), mousePos); //Main is the class for main window.
Transform3D motion = new Transform3D();
canvas.getImagePlateToVworld(motion);
motion.transform(eyePos);
motion.transform(mousePos);
Vector3d toScreenVector = new Vector3f(eyePos);
toScreenVector.sub(mousePos);
toScreenVector.normalize();
Mais encore cela ne fonctionne pas correctement. Je pense qu'il doit y avoir un moyen facile de créer un tel vecteur. Savez-vous ce qui ne va pas avec mon code ou une meilleure façon de le faire?