0
매트릭스 (3x3)를 쿼터니언으로 변환하는 데모 작업 중이지만 대부분은 매우 단순 해 보이는 무언가에 집착하고 있지만 두뇌는 종료되고 있습니다. 이것을 몇 시간 동안 해왔다. 아래의 코드는 C++과 OpenGL을 사용하는 IDE (VS2010 Express)에서 정상적으로 컴파일되지만 다음과 같은 오류가 발생합니다. "변수 '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);
}
}
글쎄, 어디 M11을 초기화 마십시오 당신이
코드 감사? –
입력 행렬의 출처는 어디입니까? –
값은 임의적 일 수 있습니다.별로 중요하지 않습니다. 나는 매트릭스에서 어떤 가치를 가져야하는지 확신하지 못합니다. – user1283674