Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Drácula en 01 de Enero de 1970, 01:00:00 AM

Título: Hacer volar un avión...
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                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?
                               
Título: Hacer volar un avión...
Publicado por: Cronodragón en 01 de Enero de 1970, 01:00:00 AM
                               
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
                               
Título: Hacer volar un avión...
Publicado por: KILE en 01 de Enero de 1970, 01:00:00 AM
                                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:                                
Título: Hacer volar un avión...
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                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!                                
Título: Hacer volar un avión...
Publicado por: Zaelsius en 01 de Enero de 1970, 01:00:00 AM
                                Para esta clase de cosas sirven las mates de la carrera.. :sonriendo:                                
Título: Hacer volar un avión...
Publicado por: KILE en 01 de Enero de 1970, 01:00:00 AM
                                ... 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                                
Título: Hacer volar un avión...
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Puedes darme un buen link sobre quaternions? En Google aparecen un montón!!                                
Título: Hacer volar un avión...
Publicado por: metaxas en 01 de Enero de 1970, 01:00:00 AM
                                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                                
Título: Hacer volar un avión...
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                Yo las rotaciones de la cámara las hago con matrices y no hay ningún tipo de problema :sonriendo:

Saludos
                               
Título: Hacer volar un avión...
Publicado por: KILE en 01 de Enero de 1970, 01:00:00 AM
                                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                                
Título: Hacer volar un avión...
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                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.
                               
Título: Hacer volar un avión...
Publicado por: NeLo en 01 de Enero de 1970, 01:00:00 AM
                                Drácula has usado D3DX?
                               
Título: Hacer volar un avión...
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                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.
                               
Título: Hacer volar un avión...
Publicado por: KILE en 01 de Enero de 1970, 01:00:00 AM
                                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                                
Título: Hacer volar un avión...
Publicado por: NeLo en 01 de Enero de 1970, 01:00:00 AM
                                Ya se porque mis quaterniones hacian cosas extrañas: D3DXMatrixAffineTransformation xDDD

Gracias Drácula
                               
Título: Hacer volar un avión...
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                Emotion.dissapear=FALSE;
Emotion.razones=VARIAS;
Emotion.Create(Engine)=ENCURSO|90%;
Emotion.ImagenesDelEngine=ALTERMINO_DEL_MISMO;
Emotion.razones=NO_COMMENT

No, ya en serio... No he desaparecido, simplemente he tenido algunos problemas que me han obligado a retirarme un poco de la escena, nada mas. Las razones ya las explicare cuando ponga todas mis ideas en orden, pero espero que nadie se sienta mal o decepcionado, pues no he engañado a nadie (malpensados :sonriendo:), sino que simplemente he decidido que es mejor hacer las cosas asi, con el plazo que yo mismo me impuse para las imagenes del engine acabe sintiendome incomodo y decidi hacerlo asi, aunque entiendo que debia haberos dado una buena explicacion, y lo siento... pero cuando esto acabe ya os dare los detalles...

Para Sync:

He eliminado tu contacto del MSN porque se me llenaba mucho de mierda por culpa del spam y otras mierdas... mi nuevo correo es dsemotion@hotmail.com. intentare actualizar mi perfil de stratos para reflejarlo

Y nada mas por ahora, ya os haer llegar noticias a su debido tiempo

Un saludo y disculpas por si alguien se ha sentido ofendido,

Julio Meca                                
Título: Hacer volar un avión...
Publicado por: synchrnzr en 01 de Enero de 1970, 01:00:00 AM
                                Ese pedaso de Julio...

Muy ausente se te veía, tomo nota de ello. Parece q te dejaste las casillas esas q añadieron los de Hotmail activadas por defecto (q putos los de M$...) por lo q dices del spam... :ojo:

Sync :guay:

PD: Pos al final parece que !Emotion.Dissapear

[ Este Mensaje fue editado por: synchrnzr el 2002-07-17 18:16 ]                                
Título: Hacer volar un avión...
Publicado por: NeLo en 01 de Enero de 1970, 01:00:00 AM
                                Ese Emotiooooooooon!!!!!!

Menos mal que has regresado, tenias a todo internet buscándote e impaciente por ver tu motor, pero que sigan esperando!!! :lengua:

Un saludo.
                               
Título: Hacer volar un avión...
Publicado por: Grugnorr en 01 de Enero de 1970, 01:00:00 AM
                                Dios!, estás vivo! :lengua:

Tranquilo, tienes razón te metiste mucha presión con lo de las fotos y lo que se hace por hobby, si no disfrutas malo.

Todos andamos igual, cuando estamos con ganas y haciendo cosas wapas... o la novia, los estudios,etc, etc... despacito y sin agobios.

Eso sí, seguimos esperando las imágenes :lengua: y las discusiones técnicas, me da que el multithreading que usas te empeora en vez de mejorar y te complica muchísimo el código, pero ya lo habrás evaluado tú...
                               
Título: Hacer volar un avión...
Publicado por: Ithaqua en 01 de Enero de 1970, 01:00:00 AM
                                Hombre, eso de que no intentabas engañar a nadie... Deja tu orgullo a un lado y limítate a programar que es lo que creo que hacemos todos. No intentes hacer creer que sabes cosas que demuestras una y otra vez con tus mensajes que desconoces totalmente.
No es cuestión de que te marcaras unos plazos y no pudieras cumplirlos, es que estabas viviendo una gran mentira en sí.
Todo lo que hiciste fue ridículo, y al menos a mí me causaba una enorme vergüenza ajena. Veamos ahora si han cambiado las cosas.


                               
Título: Hacer volar un avión...
Publicado por: Ithaqua en 01 de Enero de 1970, 01:00:00 AM
                                Perdón por seguir el offtopic.
Sobre la duda en cuestión, yo lo haría renderizándolo a textura con una cámara mirando a (0, 1, 0) desde debajo del avión y luego aplicándola al agua con multitextura. Lo más complicado sería asignar las coordenadas de textura, pero si el agua es procedural no debería ser complicado ver qué grupo de vértices sobrevuela exactamente el avión.
                               
Título: Hacer volar un avión...
Publicado por: fiero en 01 de Enero de 1970, 01:00:00 AM
                                estooo... ups.... yo tambien me he colao, lo de la sombra del avión era en el otro hilo.... perdón..... :riendo:

un saludo