c ++ OpenGL transformação de coordenadas
-
05-07-2019 - |
Pergunta
Eu só não parece ser capaz de descobrir isso na minha cabeça. Eu estou tentando mover um objeto no espaço 3D.
Se eu tiver um ponto em 5,15,5 e usar funções OpenGL para mudar a vista do modelo ....
glTranslatef( 10.0f, 4.0f, 4.0f );
glRotatef( 33.0f, 1.0f, 0.0f, 0.0f );
glTranslatef( 10.0f, 4.0f, 4.0f );
Existe uma maneira que eu possa descobrir onde esse ponto acaba (no mundo coordenadas / globais)? Posso fazer algum tipo de cálculos matriciais que vai me dar de volta 20,26,23 (ou o que todo o novo coordenar a posição é)?
Por favor, ajuda, eu estive preso sobre isso por tanto tempo!
Solução
Tente o seguinte:
1) Empurrar a matriz de corrente na pilha; 2) identidade de carga e aplicar suas transformações; 3) Obter a matriz de transformação que resulta em alguma variável Temp. glGet ou algo parecido vai ajudar; 4) Pop a matriz a partir da pilha;
Agora você tem sua matriz de transformação. Multiplique o seu ponto por esta matriz para prever as coordenadas do ponto após a transformação.
Outras dicas
Definitivamente: confira http: //research.cs.queensu .pt / ~ jstewart / 454 / notas / gasoduto /
Em suma, todas estas chamadas reduzir a uma única matriz, que é multiplicado para o ponto.
O método de SadSido vai ficar definitivamente você a matriz resultante, mas não pode ferir para realmente entender o que está acontecendo nos bastidores. Os cálculos acima vai resultar em uma equação de álgebra linear do seguinte:
Pout = [mTranslate] * [mRotate] * [mTranslate] * PIN
= onde mTranslate as chamadas de tradução (tradução) para matriz, e chamada mRotate = rotação (matriz para rotação em torno de um eixo arbitrário). Calculam que, e você está pronto para ir!