Cómo convertir los ángulos de Euler al frente, arriba, a la derecha vectores

Necesito una función que, dada la Yaw, Pitch y Roll, pueda producir los vectores Front (o Looking At), Right y Up en "coordenadas mundiales".

En mi espacio del mundo en particular, a partir del origen (0,0,0), X es positivo a la izquierda, Z es positivo al alejarse del espectador / origen e Y es positivo al subir.

Por ejemplo, dado ... (ángulos en grados)

yaw = 0, pitch = 0, roll = 0, la salida esperada es:

frente = (0.0.0.0.1.0)derecha = (-1.0,0.0,0.0)arriba = (0.0.1.0.0.0)

yaw = 90, pitch = 0, roll = 0, la salida esperada es:

frente = (1.0.0.0.0.0)derecha = (0,0,0.0,1.0)arriba = (0.0.1.0.0.0)

yaw = 0, pitch = 90, roll = 0, la salida esperada es:

frente = (0.0,1.0,0.0)derecha = (-1.0,0.0,0.0)arriba = (0.0.0.0, -1.0)

yaw = 0, pitch = 0, roll = 90, la salida esperada es:

frente = (0.0.0.0.1.0)derecha = (0.0,1.0,0.0)arriba = (1.0.0.0.0.0)

El lenguaje en el que estoy trabajando es C ++, y con mucho gusto usaré glm para resolver este problema si eso tiene más sentido. Si puedo llegar a través de quaternion, también estoy de acuerdo con esa solución, ya que he encontrado otros tutoriales que describen cómo obtener un quaternion desde los ángulos de euler.

Respuestas a la pregunta(1)

Su respuesta a la pregunta