Quaternions?
-
Hi,
ich code seit geraumer zeit nun OpenGL und benutze Quaternions, doch ich versteh die dinger nicht so ganz, kurz ich arbeite so: Benutzung und nicht kapieren wies geht.
Das möchte ich ändern!
Drum könnte mir jemand erklären wie diese Funktion bzw. Quaternions funzt(en)?
void math_QuaternionCreateFromAxisAngle(GLfloat x, GLfloat y, GLfloat z, GLfloat degrees, GLfloat *pMatrix) { // Make sure the matrix has allocated memory to store the rotation data if(!pMatrix) return; // First we want to convert the degrees to radians // since the angle is assumed to be in radians GLfloat angle = GLfloat((degrees / 180.0f) * PI); // Here we calculate the sin( theta / 2) once for optimization GLfloat result = (GLfloat)sin( angle / 2.0f ); // Calcualte the w value by cos( theta / 2 ) float m_w = (GLfloat)cos( angle / 2.0f ); // Calculate the x, y and z of the quaternion float m_x = GLfloat(x * result); float m_y = GLfloat(y * result); float m_z = GLfloat(z * result); // First row pMatrix[ 0] = 1.0f - 2.0f * ( m_y * m_y + m_z * m_z ); pMatrix[ 1] = 2.0f * (m_x * m_y + m_z * m_w); pMatrix[ 2] = 2.0f * (m_x * m_z - m_y * m_w); pMatrix[ 3] = 0.0f; // Second row pMatrix[ 4] = 2.0f * ( m_x * m_y - m_z * m_w ); pMatrix[ 5] = 1.0f - 2.0f * ( m_x * m_x + m_z * m_z ); pMatrix[ 6] = 2.0f * (m_z * m_y + m_x * m_w ); pMatrix[ 7] = 0.0f; // Third row pMatrix[ 8] = 2.0f * ( m_x * m_z + m_y * m_w ); pMatrix[ 9] = 2.0f * ( m_y * m_z - m_x * m_w ); pMatrix[10] = 1.0f - 2.0f * ( m_x * m_x + m_y * m_y ); pMatrix[11] = 0.0f; // Fourth row pMatrix[12] = 0; pMatrix[13] = 0; pMatrix[14] = 0; pMatrix[15] = 1.0f; // Now pMatrix[] is a 4x4 homogeneous matrix that can be applied to an OpenGL Matrix }
-