Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Hacer volar un avión...

Iniciado por Drácula, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Drácula

                                Llevo horas pegandome con el problema y ya no sé si lo que hago es correcto o no. Tengo que hacer el efecto de que el avión rote en los ejes X(subir y bajar el morro),Y(rotar). El Z no lo utilizo por ahora.

Pues bien, al rotar en X,Y me hace un efecto super raro el avión, como si TAMBIEN rotara en Z!!

Lo que yo hago es rotar en X. Luego tengo que rotar en Y respecto al vector perpendicular con X, es decir:
VY=(0,1,0)*Matriz_Rotación X

RotarPorVector(Vy,angulo de rotación Y)

Sin embargo, sigue haciéndome locuras!! ¿Alguina idea?
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Cronodragón

                               
CitarPues bien, al rotar en X,Y me hace un efecto super raro el avión, como si TAMBIEN rotara en Z!!
Eso es porque estás rotando el avión en ambos ejes simultaneamente... ehmm, lo que pasa con esas rotaciones es que la dirección no está especificada. A menos que uno viva en la dimensión desconocida, las rotaciones siempre se dan entre dos ejes. Por ejemplo, puedes acostar un lapiz sobre la mesa y suponer que su punta es el origen de los ejes XYZ, ahora trata de rotarlo 90 grados pero sólo en X... no hay forma!! El lápiz pasa al eje Y o al eje Z. Eso quiere decir sólo una cosa: mi querido amigo, nos han estado engañando con el nombre de las rotaciones. No existe la rotación en X, ni la rotación en Y, ni la rotación en Z. En cambio sí existen la rotación de X a Y, de Y a Z y de Z a X. Y la combinación de estas rotación permite girar un objeto en todas las direcciones.
CitarLuego tengo que rotar en Y respecto al vector perpendicular con X
A mi me parece que simplemente deberías rotar de X a Y, y luego de Y a Z, pero aún te faltará la rotación de Z a X. Para que lo veas mejor, la rotación de X a Y hará el efecto de que el avión se inclina hacia una de sus alas; la rotación entre Y y Z permite que el avión baje en picada o que suba apuntando al cielo; y la rotación entre Z y X hará que el avión de la vuelta como un carro. Juega un rato con cada rotación independiente y verás como trabajan.
Saludos!
- Marco
                               

KILE

                                Dracula el problema que te pasa es conocido como Gimbal Lock, seguramente las rotaciones que uses sean por medio de los angulos de euler en lugar de quaterniones, sino no me explico porque te pasa eso. Si no tienes implementado quateriones es un buen momento para hacerlo aunque creo que d3d tiene ya una implementación por medio de las d3dx o como se llamen :sonriendo:                                

Drácula

                                No, el problema es muy extraño. Roto en X, luego en Y y ...¡en algunos ángulos me aparece rotado en Z!! Es muy extraño, me da la sensación de que hago algo mal con las matrices. De todas formas, miraré los docs sobre quaternions!                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Zaelsius

                                Para esta clase de cosas sirven las mates de la carrera.. :sonriendo:                                

KILE

                                ... o.O gimbal lock se le llama al efecto que se produce cuando al hacer varias rotaciones sucesivas sobre los dos ejes (por ejemplo X e Y), llegas a un estado en el que rotar sobre el eje X por ejemplo es equivalente a rotar sobre el eje Z y produce cosas batante desagradables a la vista :lengua: Estas seguro de que no se debe a esto? Te comentaba que con quaternions se arregla porque el problema recae en la multiplicación de sucesivas rotaciones usando angulos de euler, por medio de matrices por eso me sonaba mucho a lo que tu comentabas
Un saludo                                

Drácula

                                Puedes darme un buen link sobre quaternions? En Google aparecen un montón!!                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

metaxas

                                El problema del Gimbal Lock no es un problema inherente a las matrices, sino al uso de ángulos de Euler. No hace falta que uses quaterniones para evitar el problema, de hecho, Diana Gruber tiene un artículo muy famoso donde los pone a parir:

http://www.gamedev.net/reference/programmi...tures/whyquats/

y este es el link con la discusión del artículo en los foros, para que veas la que se armó:

http://www.gamedev.net/community/forums/to...?topic_id=25314

si eres capaz de leerte las 9 páginas de la discusión en el foro, una de dos: o tendrás todo mucho más claro, o estarás más liado que al principio... :ojo:
Yo te recomiendo que te lo leas enteriro si tienes tiempo, se aprende un montón :sonriendo:

Metaxas                                

BeRSeRKeR

                                Yo las rotaciones de la cámara las hago con matrices y no hay ningún tipo de problema :sonriendo:

Saludos
                               
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

KILE

                                B3RS3RK3R como bien han dicho anteriormente no es problema implicito de las matrices sino de usar angulos de euler. Aunque seguramente tu uses angulos de euler y matrices en lugar de un quaternion y luego pasarlo a matriz. En juegos del estilo del quake 3 no hay porque usar quaterniones puesto que no tienes libertad total en todos los grados por lo que no se peude llegar a producir este efecto, pero en todos los simuladores de vuelo que he podido mirar usan quatenriones para ese problema. Mirad los articulos de Flight of fantasies o como se llame X'DD  Un saludillo                                

Drácula

                                Bien, he resuelto el problema. Ciertamente era el Gimbal Lock. Ahora puedo decir que lo he sufrido en mis carnes. Lo he solucionado...¡con Quaternions! En fin, muchas gracias a todos, porque la verdad es que ya me estaba volviendo loco. Pero serenamente lo he analizado y me he dado cuenta del maldito efecto.

Muchas gracias a todos por vuestra ayuda.
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

NeLo

                                Drácula has usado D3DX?
                               
Drowning deep in my sea of loathing

Drácula

                                Sí, he aquí el código:

D3DXQUATERNION qR;CXMatriz m_matOrientation;

D3DXQuaternionRotationYawPitchRoll( &qR, avioneta.yaw, avioneta.pitch, avioneta.roll);

D3DXMatrixAffineTransformation( &m_matOrientation, 1, NULL, &qR, &avioneta.pos );


Y el resultado está en la matriz m_matOrientation.
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

KILE

                                El diablo sabe mas por viejo que por diablo }:)  Para aquellos que no tengan el placer o desdicha de usar las D3DX pueden mirar en http://www.magic-software.com/ que tiene una clase para manejar quaterniones de lo mas fashion X'DDD
Enga saludos                                

NeLo

                                Ya se porque mis quaterniones hacian cosas extrañas: D3DXMatrixAffineTransformation xDDD

Gracias Drácula
                               
Drowning deep in my sea of loathing






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.