2014-01-30 4 views
0

Я работаю над демоверлей, чтобы преобразовать матрицу (3x3) в кватернион, однако я застрял на чем-то, что будет казаться довольно простым для большинства, но мой мозг закрывается, поскольку я работали над этим часами. Код ниже компилируется в моей IDE по выбору (VS2010 Express) с использованием C++ и openGL, но я получаю следующую ошибку: «Переменная« m11 »используется без инициализации». Эта ошибка появляется для всех переменных float в моей матрице, поэтому, когда я пытаюсь запустить код, он просто взрывается. Может ли кто-нибудь помочь? СпасибоВращение матрицы на кватернион

Код:

void matrixIntoQuaternions() { 

      // Input matrix 3X3 
      float m11,m12,m13; 
      float m21,m22,m23; 
      float m31,m32,m33; 

      // Output quaternion 
      float w,x,y,z; 
      // Determine which of w,x,y, or z has the largest absolute value 
      float fourWSquaredMinus1 = m11 + m22 + m33; 
      float fourXSquaredMinus1 = m11 - m22 - m33; 
      float fourYSquaredMinus1 = m22 - m11 - m33; 
      float fourZSquaredMinus1 = m33 - m11 - m22; 

      int biggestIndex = 0; 
      float fourBiggestSquaredMinus1 = fourWSquaredMinus1; 

      if(fourXSquaredMinus1 > fourBiggestSquaredMinus1) { 
       fourBiggestSquaredMinus1 = fourXSquaredMinus1; 
       biggestIndex = 1; 
      } 
      if (fourYSquaredMinus1 > fourBiggestSquaredMinus1) { 
       fourBiggestSquaredMinus1 = fourYSquaredMinus1; 
       biggestIndex = 2; 
      } 
      if (fourZSquaredMinus1 > fourBiggestSquaredMinus1) { 
       fourBiggestSquaredMinus1 = fourZSquaredMinus1; 
       biggestIndex = 3; 
      } 
      // Per form square root and division 
      float biggestVal = sqrt (fourBiggestSquaredMinus1 + 1.0f) * 0.5f; 
      float mult = 0.25f/biggestVal; 

      // Apply table to compute quaternion values 
      switch (biggestIndex) { 
       case 0: 
        w = biggestVal; 
        x = (m23 - m32) * mult; 
        y = (m31 - m13) * mult; 
        z = (m12 - m21) * mult; 
        break; 
       case 1: 
        x = biggestVal; 
        w = (m23 - m32) * mult; 
        y = (m12 + m21) * mult; 
        z = (m31 + m13) * mult; 
        break; 
       case 2: 
        y = biggestVal; 
        w = (m31 - m13) * mult; 
        x = (m12 + m21) * mult; 
        z = (m23 + m32) * mult; 
        break; 
       case 3: 
        z = biggestVal; 
        w = (m12 - m21) * mult; 
        x = (m31 + m13) * mult; 
        y = (m23 + m32) * mult; 
        break; 

        quatX = x; 
        quatY = y; 
        quatZ = z; 
        quatW = w; 

        model = vec4(quatX,quatY,quatZ,quatW); 
       } 
      } 
+0

Ну, где же вы инициализировать m11? –

+0

Где ваша матрица ввода должна быть? –

+0

Значения могут быть случайными, это не имеет большого значения. Я не уверен, какие значения я должен иметь в матрице. – user1283674

ответ

0

Сделайте входы входы в вашу функцию, и дот не оставить их неопределенными:

void matrixIntoQuaternions(
      float m11, float m12, float m13, // Make these function parameters! 
      float m21, float m22, float m23, 
      float m31, float m32, float m33 
) 
{ 
    // Rest of your code... 
} 
Смежные вопросы