Como encontrar um vetor normal apontando diretamente do mundo virtual para a tela em Java3D?
Pergunta
Eu acho que isso pode ser feito aplicando-se a matriz de transformação do grafo de cena para z-normal (0, 0, 1), mas ele não funciona.Meu código é este:
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);
Então eu tentei algo parecido com isso:
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();
Mas ainda isso não funcionar corretamente.Eu acho que deve haver uma maneira fácil de criar tal vetor.Você sabe o que está de errado com o meu código ou o melhor caminho para fazer isso?
Solução 2
Sim, você tem a minha pergunta direito.Pena que eu estava um pouco confuso ontem.Agora eu ter corrigido o código a seguir a sua sugestão e a mistura de duas partes de código no juntos a pergunta:
Vector3f toScreenVector = new Vector3f(0, 0, 1);
Transform3D t3d = new Transform3D();
canvas.getImagePlateToVworld(t3d);
t3d.transform(toScreenVector);
tg.getTransform(t3d); //tg is Transform Group of all objects in a scene
t3d.transform(toScreenVector);
Obrigado.
Outras dicas
Se eu tenho esse direito, você quer um vetor normal ao ecrã plano, mas em coordenadas do mundo?
No caso de você querer INVERT
a transformação de World -> Screen and do Screen -> World
de (0,0,-1)
ou (0,0,1)
dependendo de qual eixo a tela aponta para baixo.
Desde o ModelView matrix é apenas uma matriz de rotação (ignorando a transformação homogênea parte), você pode simplesmente puxar isso tomando a transposta de a rotação da parte, ou simples leitura na linha de fundo - como este transpõe para a Z
coordenadas coluna, sob a transposição.