Como encontrar um vetor normal apontando diretamente do mundo virtual para a tela em Java3D?

StackOverflow https://stackoverflow.com/questions/40028

  •  09-06-2019
  •  | 
  •  

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top