c ++ Trasformazione delle coordinate OpenGL
-
05-07-2019 - |
Domanda
Non riesco proprio a capirlo nella mia testa. Sto cercando di spostare un oggetto nello spazio 3D.
Se ho un punto a 5,15,5 e utilizzo le funzioni opengl per cambiare la vista del modello ....
glTranslatef( 10.0f, 4.0f, 4.0f );
glRotatef( 33.0f, 1.0f, 0.0f, 0.0f );
glTranslatef( 10.0f, 4.0f, 4.0f );
C'è un modo in cui posso scoprire dove finisce quel punto (in coordinate globali / globali)? Posso fare una sorta di calcoli con matrici che mi restituiranno 20,26,23 (o quale sia ogni nuova posizione delle coordinate)?
Per favore aiutatemi, sono rimasto bloccato per così tanto tempo!
Soluzione
Prova quanto segue:
1) Inserire la matrice corrente nello stack; 2) Carica identità e applica le tue trasformazioni; 3) Ottieni la matrice di trasformazione risultante in qualche variabile temp. glGet o qualcosa del genere aiuterà; 4) Pop la matrice dalla pila;
Ora hai la tua matrice di trasformazione. Moltiplica il tuo punto per questa matrice per prevedere le coordinate del punto dopo la trasformazione.
Altri suggerimenti
Sicuramente: controlla http: //research.cs.queensu .it / ~ jstewart / 454 / note / conduttura /
In breve, tutte queste chiamate si riducono a una singola matrice, che viene moltiplicata sul punto.
Il metodo SadSido ti darà sicuramente la matrice risultante, ma potrebbe non far male capire davvero cosa sta succedendo dietro le quinte. I calcoli sopra mostreranno un'equazione di algebra lineare di quanto segue:
pOut = [mTranslate] * [mRotate] * [mTranslate] * pIn
dove mTranslate = le chiamate di traduzione (matrice per la traduzione) e mRotate = ruota la chiamata (matrice per la rotazione attorno ad un asse arbitrario). Calcolalo e sei a posto!