Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Rotaciones en OpenGL

Iniciado por fgutierrez, 17 de Octubre de 2007, 07:14:48 PM

« anterior - próximo »

fgutierrez

Hola, buenas tardes. Estoy inmerso en mi Proyecto Fin de Carrera que consiste en la implementación de un L-System para modelar el crecimiento de árboles. Bien, teniendo una primera versión de la parte lógica(aquella que va generando la cadena de símbolos resultante tras cada paso de derivación) más o menos resuelta, a la hora de interpretar gráficamente los símbolos me he encontrado el siguiente problema:

Mi alfabeto consta de un símbolo '+(a1,a2,a3)' que consta de 3 parámetros, que especifican los Ángulos de Euler  de una determinada rotación. Es decir, la idea es que en este símbolo puede especificar como quiero rotar mi sistema de coordenadas local alrededor de cada uno de los 3 ejes. Bien, la dificultad que me encuentro es la de conseguir que los 3 giros sean simúltaneos, es decir, que sean tratados como un único giro. Si simplemente interpreto este símbolo llamando secuencialmente a los comandos:

glRotate(a1,1,0,0);
glRotate(a2,0,1,0);
glRotate(a3,0,0,1);  

Me encuentro que la primera rotación afecta a la segunda, y esta a la tercera. Yo busco el efecto de que los 3 ejes de rotación se refieran a la ModelView anterior a la interpretación del símbolo, es decir, a un sistema de coordenadas más global por asi decirlo. No se si  he explicado bien mi problemática, en todo caso si alguién se aclara ante todo este embrollo y es capaz de aportarme alguna idea, se lo agradeceria eternamente.

Muchas gracias por anticipado

Fernando Gutiérrez
eamos realistas: Exijamos lo imposible

ajmendoza

La verdad no me he enterado muy bien de la pregunta, pero tiene pinta de que tienes que jugar con la pila de transformaciones (puede que me esté confundiendo, evidentemente). Si no te suena y puede que sea los funciones creo que eran glpush y glpop para que los busques en alguna documentación :)

Un saludo.

fgutierrez

La verdad es que me explico de pena, jeje, pero es algo complicado de expresar. En todo caso, mañana intento exponerlo de forma más clara que hoy estoy ya un poco oxidado, aunque creo que la solución a mi problema por lo que he estado investigando por ahí puede tener algo que ver con un invento llamado Cuaterniones.Tengo que mirarlo más tranquilamente, como he dicho mañana intentaré ser más claro a la hora de exponer mi problema
eamos realistas: Exijamos lo imposible

tamat

Yo hace tiempo me encontré con un problema similar al tuyo, me pasé dias perdido y finalmente lo solucioné pero primero una breve introduccion:

Creo que el problema de la gente es no entender correctamente lo que es una rotacion y querer equipararla al concepto posicion, es decir, traslacion en X, Y y Z, usando la vieja formula de pitch,yaw,roll, sin embargo la gente no se da cuenta de que eso son 3 rotaciones, y cualquier concatenacion de rotaciones se puede simplificar con una unica rotacion, por lo tanto, ¿por qué necesitar 3 si se puede hacer con una?.

Lo que trato de decir es que no es coherente descomponer el problema en tres rotaciones (aunque al aprendiz de geometría le pueda resultar más sencillo al principio), lo logico es descomponer en una unica rotacion sobre un eje que varia en cada caso, eso es más coherente.

Otro problema que la gente tiene es que no es capaz de concebir la orientacion espacial de un objeto si no es con las tres rotaciones básicas, ya que solo saben guardar rotaciones usando angulo+axis ortonormal, y eso de por si está mal, porque como bien dices las rotaciones se afectan entre ellas.

La solucion pasa por guardar la orientacion en un contenedor especial preparado para ello, uno que pueda contener cualquier orientacion posible, esto es o una Matriz o un Cuaternion. Y cualquier cambio de orientacion lo vamos acumulando en ese contenedor.

Espero que haya servido para algo.
Por un stratos menos tenso

xeex







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.