【发布时间】:2014-01-30 11:25:58
【问题描述】:
我正在做一个将矩阵 (3x3) 转换为四元数的演示,但是我被困在对大多数人来说似乎很简单的东西上,但我的大脑正在关闭,因为我一直在研究这个用了几个小时。下面的代码在我选择的 IDE(VS2010 Express)中使用 C++ 和 openGL 可以正常编译,但我收到以下错误 - “正在使用变量 'm11' 而未初始化。”。这个错误出现在我的矩阵中的所有浮点变量上,所以当我尝试运行代码时,它就会爆炸。任何人都可以帮忙吗?谢谢
代码:
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?
-
你的输入矩阵应该来自哪里?
-
数值可以是随机的,没关系。我不确定矩阵中应该包含哪些值。
标签: c++ matrix quaternions