Pregunta

Parece que no puedo resolver esto en mi cabeza. Estoy tratando de mover un objeto en el espacio 3D.

Si tengo un punto en 5,15,5 y uso las funciones de opengl para cambiar la vista del modelo ...

glTranslatef( 10.0f, 4.0f, 4.0f );
glRotatef( 33.0f, 1.0f, 0.0f, 0.0f );
glTranslatef( 10.0f, 4.0f, 4.0f );

¿Hay alguna manera de averiguar dónde termina ese punto (en coordenadas mundiales / globales)? ¿Puedo hacer algún tipo de cálculos matriciales que me devuelvan 20,26,23 (o cuál es la nueva posición de coordenadas)?

¡Por favor, ayuda, he estado estancado en esto durante tanto tiempo!

¿Fue útil?

Solución

Prueba lo siguiente:

1) Empuje la matriz actual en la pila; 2) Cargar identidad y aplicar sus transformaciones; 3) Obtener la matriz de transformación resultante en alguna variable temporal. GlGet o algo así ayudará; 4) Extraiga la matriz de la pila;

Ahora tienes tu matriz de transformación. Multiplique su punto por esta matriz para predecir las coordenadas del punto después de la transformación.

Otros consejos

Definitivamente: echa un vistazo a http: //research.cs.queensu .ca / ~ jstewart / 454 / notes / pipeline /

En resumen, todas estas llamadas se reducen a una sola matriz, que se multiplica sobre el punto.

El método de SadSido definitivamente te dará la matriz resultante, pero puede que no te haga daño entender realmente lo que está sucediendo detrás de la escena. Los cálculos anteriores darán como resultado una ecuación de álgebra lineal de lo siguiente:

pOut = [mTranslate] * [mRotate] * [mTranslate] * pIn

donde mTranslate = las llamadas de traducción (matriz para la traducción), y mRotate = rotate call (matriz para la rotación sobre un eje arbitrario). Calcula eso, ¡y listo!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top