Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Trabajo con Cuaterniones

Iniciado por PIM, 12 de Marzo de 2013, 06:52:12 PM

« anterior - próximo »

PIM

Hola de nuevo amigos de esta estupenda web. Para no variar  ^_^', solicitando de nuevo su amable ayuda con este tema que desde hace un tiempo me da vueltas en la cabeza.

He leído a cerca de que usando cuaterniones es más sencillo trabajar con rotaciones. El problema es que no se como implementarlos usando lenguaje C y OpenGL.

Según entiendo, un cuaternión es una representación de la forma:

a + bi + cj + dk

en donde se tiene una parte real (a) y tres imaginarias (bi, cj, dk).

Bueno pero, ¿Cómo represento un cuaternión usando C? ¿Cómo lo implemento en OpenGL?

Ojalá alguien me pueda ayudar.

Muchas gracias.
:D

Manu343726

#1
No se si debería hacerlo, ya que no me parece que tengo el código muy limpio, pero al menos te haces una idea: https://github.com/Manu343726/dx_lib32/blob/master/code/headers/dl32Math.h

Ese archivo es el módulo de matemáticas de mi port de la dx_lib32, que entre otras frikadas incluye una implementación de cuaterniones. Es la clase dl32Quaternion (Línea 790). Aunque no sea en C, sino en C++, creo que te vale para guiarte un poco. No se si es la mejor manera de hacerlo, es como lo he implementado siempre y por ahora me ha funcionado XD. Es la misma implementación que hice en mi motor3d el año pasado con VB.NET.
El archivo cpp correspondiente se encuentra en code/source/dl32Math.cpp, pero si no recuerdo mal la clase dl32Quaternion tiene todo implementado con inlines.

La implementación es muy sencilla: Básicamente la tupla que mencionabas antes, a + bi + cj + dk, pero además incluye una matriz de rotación correspondiente (Por eso hereda de dl32Matrix4x4). Lo hice de esa manera porque los cuaterniones te interesan para hacer rotaciones, no frikadas algebráicas. Así que me interesaba mantener actualizada la rotación sin tener que regenerar la matriz continuamente. No se si me explico....

PIM

Gracias. Por el tamaño del trabajo se ve que eres experto en estas cuestiones  8o.

Sin embargo el problema es que yo soy medio lento para captar las ideas, cuando no me las explican con manzanas.  ^_^'

No sé si me puedas simplificar las cosas un poco: veamos a + bi + cj + dk ¿Como se representa  usando C/C++?

Sea "a" un número real (NO PROBLEM) pero luego los números bi, cj y dk..... ¿What?

Dado que para lo único que quiero los cuaterniones es para las rotaciones y el escalado ¿Qué debo rotar? ¿Un vector?  y por último; OpenGL no maneja cuaterniones, por lo que tendría que convertir los cuaterniones a matriz o ¿no?

Perdona mi ignorancia y ojalá me puedas ayudar.

Saludos.
;)






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.