No tengo el codigo de las funciones aqui, pero te comento como lo he hecho,
Parto de la base que quieres una orientacion nueva para la camara, entonces hay que ir a hacer las operaciones al mundo. Yo tomo la position y el lookAt del destino, y con ello
Mi eje Y es el Up. Una vez que tengo esto, utilizo una funcion que dado un vector origen y un destino me calcula el quaternion correspondiente.
Con esto ya tendrias el Yaw, ahora nos falta el pitch. Para ello oriento el vector unitario con este quaternion
Este modo te evita usar matrices, aunque tb se puede hacer por matrices. Si tienes dudas de las matrices preguntamelo y te digo como se haria (aunque no toy seguro al 100%
Pero esto funciona y bien
Parto de la base que quieres una orientacion nueva para la camara, entonces hay que ir a hacer las operaciones al mundo. Yo tomo la position y el lookAt del destino, y con ello
Código [Seleccionar]
Vector sinNormalizar(vecTo - vecFrom)
sinNormalizar.y = 0
sinNormalizar.normaliza()
Mi eje Y es el Up. Una vez que tengo esto, utilizo una funcion que dado un vector origen y un destino me calcula el quaternion correspondiente.
Código [Seleccionar]
Quaternion rotation1 = setShortestRotation(Vector (0,0,1), VectorNormalizado)(componentw y =0)
Con esto ya tendrias el Yaw, ahora nos falta el pitch. Para ello oriento el vector unitario con este quaternion
Código [Seleccionar]
VectorYaw = orientaVector(rotation,Vector(0,0,1))
Quaternion rotation2 = setShortestRotation(vectorYaw, VectorNormalizado) (pero con la componente con su valor original, vamos que normalizas el vector entero, sin poner la y a 0)
Quaternion final = rotacion1 *rotation2; o al reves, no me acuerdo
Este modo te evita usar matrices, aunque tb se puede hacer por matrices. Si tienes dudas de las matrices preguntamelo y te digo como se haria (aunque no toy seguro al 100%
Pero esto funciona y bien