He estado leyendo algo sobre ellos y me preguntaba si valía la pena el implementarlos (para rotaciones, cámara y demás), más que nada porque sé poco de ellos.
--saludos
En mi opinión, úsalos seguro, pero no es necesario que los implementes. No creo que sea muy importante saber bien como funcionan y saber implementarlos. Usarlos sí.
Así que tienes las D3DX si usas DX, sino busca código por ahí. No sé donde ví yo los Quaternions del Unreal....
Una vez Tim Sweeney contribuyó en el COTD de Flipcode con una libreria matemática que incluía el manejo de quaternions
http://www.flipcode.com/cgi-bin/msg.cgi?sh...orum=cotd&id=-1de todas formas, si utilizas DX, no dudes en utilizar D3DX que seguramente estén más optimizadas y además más integradas con D3D :ojo:
Saludos
coñe, no me refería a implemntar una librería matemática de quaterniones XDDD
sino a utilizarlos
sonoro me ha estado informando un poco sobre el tema. Y para una cámara en 3º Persona, si tengo el quaternion de rotacion del objeto "protagonista", como podría conseguir la posicion de la cámara? Digamos que también tenemos la posición del objeto así como la distancia entre ambos.
¿Debería usar D3DXMatrixRotationQuaternion Para conseguir una matriz de transformación a partir del quaternion y transformar la matriz de vista, para luego trasladarla?
Se aceptan sugerencias ;-)
Disculpar mi ignorancia......
........... pero realmente sirven para algo mas que complicarse la vida??
Chao!
Yo también creía que eso de los quaternions no era necesario, sin embargo me equivocaba. Cuando tuve que rotar una nave usando las típicas matrices de rotación eulerianas, me encontré con el problema del Gimbal Lock, que provoca que la nave no responda de la manera que tu esperas. Por ello acudí a los quats que me solucionaron el problema. A fin de cuentas, a ti te da lo mismo, porque el input son los 3 ángulos y el output una matriz. Una vez tienes esa matriz, ya puedes efectuar cualquier operación para obtener la información que tu necesitas
Hace unos años hice una preciosa práctica de Informática Gráfica, una maravillosa lata de CocaCola con todos los efectos que supe meterle, texturas, iluminación,niebla... lo que trae la guía Anaya de OGL :jaja: ...
EL resúmen es que parecía que además de CocaCola llevaba whiskey, porque tras rotarla un poco por los 3 ejes, empezaba a rotar en plan borrachuzo.... :jaja:
Los quaternions tienen otros usos aparte de evitar el Gimbal Lock, la interpolación de rotaciones era más suave, o algo así :P. Busca en google....
PD: En gamedev hubo una discusión muy tocha hace un año o algo así....
Aquí tienes el enlace al polémico artículo de Diana Gruber
http://www.gamedev.net/reference/articles/...article1199.aspen él también encontrarás la retaila de posts que se produjeron a partir de dicho artículo :-?
Saludos
que bueno!! una tia k le hecha cojones al asunto y se enfrenta con gente de opinion opuesta, ole la tia!
bonitos comentarios y muy verdaderos, la verdad duele juas juas
Software engineers, in general, are not mathematicians.
segun lo k he leido... quaternions sux sux
aun no le veo sentido usar quaternions en dx...
salu2
pd. bonita la matematica de matrices esa... usando 3 angulos uhh uhh... curioso, pero prefiero los vectores de toda la vida... john carmack usa quaternions... si los usa, los uso, si no los usa ni me complico la vida en verlos juas juas...
A mí me ha convencido. Para los que no le apetezca leer y traducir la web entera, les resumiré diciendo que los quaterniones son una complicación en cuatro dimensiones y geometría no euclidiana de transformaciones que se pueden hacer en tres dimensiones con geometría euclidiana. Da varias pruebas de ello (incluyendo cómo hacer una interpolación perfecta de rotaciones, grugnorr ;)) y manda a paseo a todos los que vayan a criticarla por decir y demostrar que los quaterniones no son necesarios ni mejores para los motores 3d.
La tía esa no ha hecho nada decente desde los tiempos del MS-DOS ;)
Haced lo que os plazca, cuando queráis rotar arbitrariamente sobre los 3 ejes, tendréis que iros a soluciones más complicadas si usáis matrices y ángulos eulerianos, algo de regeneración de la base no-sé-qué (ortonormal? :P) :jaja:
Evidentemente los Quaternions NO son NECESARIOS, pero es una mejor herramienta para ciertos problemas.
PD: Afortunadamente los SWEngineers no somos matemáticos, ni los matemáticos SW Engineers ;)
CitarPD: Afortunadamente los SWEngineers no somos matemáticos, ni los matemáticos SW Engineers
¿Desde cuándo eres un SW Engineer? :ojo:
Desde que aprobé Ingeniería del SW :jaja: :jaja: :jaja:
Me siento mucho más identificado con eso que con un matemático, te lo puedo jurar ;)
pos a mi me parecen de lo mas bonitos y utiles. ahora alla cada uno :)
a fin de cuentas, que mas te da llamar a CreateMatrixRotation (ejes...) que CreateMatrixRotationFromQuaternion (CreateQuaternionRotation (ejes)) ???
con DX ya tienes las funciones necesarias para manejar quaterniones de manera sencilla. Una vez que los entiendes ves que son una chorrada y que de raros solo tienen el nombre.
Para los neofitos: un quaternion es un numero complejo formado por cuatro valores, x y z w La x,y,z describen un eje y la w describe la cantidad que rotas sobre dicho eje.
Para mi las ventaja de usar quaterniones es que la interpolacion entre dos quaterniones es mas sencilla que entre dos matrices, ademas que mas suave.
Por no decir que ocupan menos memoria que las matrices y son mas rapidos de usar :)
para entender matrices y quaterniones, y si os animais haceros vuestra propia libreria...
http://skal.planet-d.net/demo/matrixfaq.htm
Pero si un quaternion es un vector y un angulo de rotacion, q tienen de complejo?, ademas hay 80 libs/bytes^2 en inet XD
saludos
pues eso, no tienen nada de complejo :)
lo unico operar con quaternions no es facil, hay que saber de matematicas por supuesto, sumar multiplicar quaternions entre si etc... asi como transforamr de quaternion a matrix y viceversa .... pero de eso no te tienes que preocuparte ya que hay muchas librerias por ahi, lo unico que hay que hacer es usarlos :)
Jaja x-alien pues ya puedes empezar a utilizar quaternions porque Carmack los utiliza como mínimo para interpolar entre frames de animación en los MD3 :D...y por si me preguntas que cómo lo se...creo recordar que había código en las fuentes de las herramientas de quake3...¿o era en el código de las librerías del juego (para hacer mods)? :?:
De cualquier forma, en todos los visores que he visto de MD3 (bueno en muchas cosas más como por ejemplo que una cámara siga una spline...pues para interpolar entre las diferentes keys de animación), utilizan los quaternions para interpolar entre rotaciones...
Saludos
sipe, casi cualquier caracter animado que use bones se interpola por quaternions. md3 tambien.
y pienso que todas las camaras deberian usarlos tambien XDD
A ver, dado lo que he leído de la tipeta esta, me da la sensación de que se usan los quaterniones porque "están de moda" más que porque sean realmente necesarios. ¿No sería mucho más recomendable currarse una librería que resolviera esos problemas de la forma en la que propone la tipeta?
Uhmm, más bien es al revés. EL resúmen es que los quaternions son una herramienta más eficiente para algunas cosas que las matrices eulerianas. Son la herramienta óptima, las soluciones con matrices son como parches que son menos apropiados para el problema, aunque sean más simples de entender si no se sabe nada de quaternions.
A mí me sonaba muy mucho más raro eso de regenerar las bases no sé qué Eulerianas para evitar el GimbalLock que ver que aprender a usar los quaternions. Evidentemente el 99% no tenemos ni puta idea de la teoría matemática de la que surgen, algo así como la extensión de los números complejos a las 4 dimensiones o algo así que acojona :jaja:
Respecto a lo de la librería... depende. Si usas DX, las librerías d3dx es seguro lo mejor que puedas tener, están implementadas usando los SIMD y demás ASM específicos para éstas cosas, dependiendo del procesador que tengas se usa una cosa u otra... ya te lo dan hecho MS,Intel y AMD...
Pues a eso me refiero, hasta qué punto se usan los quaternion porque ya está desarrollada la librería. La señora matemática sostiene y prueba que no son más eficientes que el uso de vectores y que una correcta implementación matemática evita los problemas del Gimbal Lock, permite una interpolación perfecta (¿más suave que perfecto existe?) de rotaciones y blablabla. La demostración que ofrece en el link me parece estupenda, además relaciona el coste operacional de quaterniones versus vectores y acaba resultando que es más costoso usar quaterniones.
Por eso repregunto, ¿no sería más sensato construir una librería robusta con las aplicaciones matemáticas de vector bien especificadas para evitar los efectos secundarios y obtener las mejoras con respecto a los quaterniones?
De todas formas, a mí me da lo mismo, que conste. Yo no soy programador, pero también me da la sensación de que usar quaterniones es dar un rodeo a toda la habitación para salir por la puerta.
Por cierto, ¿alguien podría explicarme con sus palabras en qué consiste exactamente el Gimbal Lock?
digo yo, si antes no se usaban quaterniones, y ahora sí (una inmensa mayoría (de profesionales)), no creo que sea por una moda, sino porque realmente mejoran la situación.
Por cierto, estoy intentando usar quaterniones para rotar objetos, exactamente un cubo (para hacer practicas y tal), usando D3DX, y hace cosas locas (se sale de la pantalla (sin moverlo de 0,0,0) a los 0.5 secs XD
Lo que hago es:
- la función cCube::Rotate(x, y, z) comprueba si cada numero (x,y o z: son rotaciones en radianes) no es 0, en cuyo caso, para x por ejemplo creo una variable VEC3 axis(1,0,0) y tras convertir el quaternion actual a matriz, transformo esos axis con D3DXVec3TransformCoord. Despues, inicializo un quaternion con valores D3DXQUATERNION(x,axis.x,axis.y,axis.z) y multiplico este quat por el total del objeto Esto lo hago para cada eje (x,y,z, los parametros).
- En render, paso el quaternion a matriz, lo multiplico por una de translación 0,0,0 y lo uso como world matrix
-> Basado en un codigo de sonoro xD
si alguien sabe qué hago mal.. pos eso ;P
Ya veo que es sencillísimo ¬¬
Supongo que si antes no se usaban era porque la gente se las apañaba con vectores hasta que llegó alguien que no se aclaraba, le buscó los tres gatos al pie y sacó la librería de quaterniones, y luego todos los que no se aclaraban usaron quaterniones hasta que se convirtió en la moda (me refiero a la moda estadística, a lo más usado, no a una moda pasajera de ropa o cosas así).
Por cierto... ¿para qué multiplicas por una matriz de translación 0,0,0?
he probao con ella y sin ella y hace igual, lo hacia pa ver si con eso cambiaba algo :P
Lo de no aclararse con vectores y matrices... yo veo más lioso de entender lo de quaterniones, otra cosa es usarlos, y igual de fácil es usar unos como otros.
Lo de la libreria de quaterniones ya me lo explicarás otro día ;)
PD: También dejas de lado que un quaternion ocupa menos(creo que la mitad) y eso para definir animaciones skeleticas es algo a tener en cuenta....
Hmmm... ¿no habéis dicho que habían librerías que implementaban funciones de quaterniones en el d3d?
Lo del tamaño que ocupen... a ver para cuándo un CDLS (Código De La Semana, HLCYDTA -Hasta Los Cojones Ya De Tanto Anglicanismo-) sobre templates para funciones matriciales de rotación e interpolación ;)
Quizás sea influencia de álgebra, informática gráfica y robótica, pero creo que existen formas mucho más simples y efectivas de hacer una rotación que meterse en 4D (no, si va a servir para algo la carrera y tó :P).
Lo de regenerar las bases Eulerianas, no sé si te refieres a que a cada cierto tiempo es conveniente restaurar la matriz identidad de transformaciones, que puede corromperse si no me equivoco por los errores de precisión de la máquina tras las sucesivas multiplicaciones de matrices y tal y cual Pascual.
Vamos, que creo que todo está en el grado de desarrollo que le queramos dar al asunto: si trabajamos con quaterniones, difícilmente trabajaremos suficiente el tema de matrices y vectores como para llegar al punto que podamos simplificarlos y encapsularlos para poder usarlos robustamente a un coste mínimo.
Essss... como el tema del petróleo. Si usáramos más la energía solar ya habríamos investigado y avanzado lo suficiente como para subsistir únicamente de ella, pero como la "costumbre" y las presiones empresariales hacen que el mundo siga moviéndose por el petróleo, pues así nos va... (me he ido del tema, sorry).
Esas mismas librerias, las d3dx, tienen matrices también...
Weno, estamos discutiendo de temas que no tenemos ni puñetera idea, así que creo que mejor lo dejamos ahí. Yo sostengo que hay casos en los que los Quaternions son más adecuados, y ya está. Las matrices se siguen necesitando, tranquilos....
PD: Lo de regenerar bases es para evitar el GimbalLock...
Citar
Vamos, que creo que todo está en el grado de desarrollo que le queramos dar al asunto: si trabajamos con quaterniones, difícilmente trabajaremos suficiente el tema de matrices y vectores como para llegar al punto que podamos simplificarlos y encapsularlos para poder usarlos robustamente a un coste mínimo.
Ein?, de qué me estás hablando? :o .
Si hablas de hallar nuevos algoritmos más eficientes usando matrices... chungo parece, deben llevar desde los años 50 lo menos buscando mejoras, tienes multiplicaciones encadenadas de matrices por Strassen y cosas de esas... pero poco más. Las mejoras que han ido encontrando empiezan por Quat..... :jaja:
PD:La teoría matemática no es como una fábrica de microprocesadores... Como mucho te pueden implementar alguna cosa por HW de forma más rápida, pero el Órden de complejidad de un algoritmo investigado no se mejora fácilmente...
Por cierto, en la analogía esa loca con el petróleo y las energías renovables, yo lo diría al revés: Lo conocido pero con desventajas es el petróleo, y lo menos conocido, que conlleva un pequeño gasto de implantación pero aporta mejoras, son los Quaternions...
PD: Menuda discusión más chorra filosófico-cutre estamos haciendo, Mars :jaja: . Me piro de juerga, chaops....
CitarCitar
Vamos, que creo que todo está en el grado de desarrollo que le queramos dar al asunto: si trabajamos con quaterniones, difícilmente trabajaremos suficiente el tema de matrices y vectores como para llegar al punto que podamos simplificarlos y encapsularlos para poder usarlos robustamente a un coste mínimo.
Ein?, de qué me estás hablando? :o .
De la implementación (adecuada para evitar Gimbals Locks, y que alguien me cuente de qué va eso) y la divulgación, no de la investigación.
En fin, realmente es un poco una conversación de besugos y mejor pasamos de ella, pero que alguien me explique en qué consiste el Gimbal Lock o no dormiré bien esta noche :(
La definición informal del Gimbal Lock es que si rotas por los 3 ejes, te hace cosas muy raras :jaja:
Búscalo en google, so vagazo...
No rotes sobre los tres ejes a la vez.
Yo veo dos posibilidades:
1) Que el repetable señor Quatern despues de inventar los quaternions se inventara tambien un problema (al que llamo gimbals locks) donde poder aplicarlos. :loco:
2) Que la rotaciones sobre los tres ejes a la vez se apliquen de forma que primero se rote en X, luego en Y y luego en Z, por lo que con rotaciones parecidas a 90º en el eje X consigan que se solape el Z con el Y (y cosas por el estilo), y entonces pierdes un eje de rotación (y de libertad).
PD: Son posibilidades, por lo que no me responsabilizo de la veracidad de ninguna de ellas.
Jaja, bien expuesto...
Buena solución, Mars... :jaja: . Querría ver tus programas de modelado que no te dejaras rotar alrededor... :jaja: :jaja:
hey, que no me refiero a que no roten, sino a que no roten sobre los tres ejes a la vez; primero se rota en un eje, se multiplica por la rotación en el otro eje, y por la rotación en el tercero. No sé si es eso o qué.