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
    }
    



Anmelden zum Antworten