这是源代码。 ANSWER
是正确答案,RESULT
是实际结果。
我是盲目的,还是计算-1
作为33
的{{1}}时应该是1
?
以下是代码:
GLKMatrix4 a = GLKMatrix4Make(-1.000000, 0.000000, 0.000000, 0.000000,
0.000000, 1.000000, 0.000000, 0.000000,
0.000000, 0.000000, -1.000000, 0.000000,
0.000000, 0.000000, 0.000000, 1.000000);
GLKMatrix4 b = GLKMatrix4Make(1.000000, 0.000000, 0.000000, 0.000000,
0.000000, 1.000000, 0.000000, -1.000000,
0.000000, 0.000000, 1.000000, -1.000000,
0.000000, 0.000000, 0.000000, 1.000000);
GLKMatrix4 ANSWER = GLKMatrix4Make(-1.000000, 0.000000, 0.000000, 0.000000,
0.000000, 1.000000, 0.000000, -1.000000,
0.000000, 0.000000, -1.000000, 1.000000,
0.000000, 0.000000, 0.000000, 1.000000);
NSLog(@"##################################################");
GLKMatrix4 RESULT = GLKMatrix4Multiply(a,b);
NSLog(@"Result:");
NSLog(@" %f %f %f %f",RESULT.m00,RESULT.m01,RESULT.m02,RESULT.m03);
NSLog(@" %f %f %f %f",RESULT.m10,RESULT.m11,RESULT.m12,RESULT.m13);
NSLog(@" %f %f %f %f",RESULT.m20,RESULT.m21,RESULT.m22,RESULT.m23);
NSLog(@" %f %f %f %f",RESULT.m30,RESULT.m31,RESULT.m32,RESULT.m33);
NSLog(@"Answer:");
NSLog(@" %f %f %f %f",ANSWER.m00,ANSWER.m01,ANSWER.m02,ANSWER.m03);
NSLog(@" %f %f %f %f",ANSWER.m10,ANSWER.m11,ANSWER.m12,ANSWER.m13);
NSLog(@" %f %f %f %f",ANSWER.m20,ANSWER.m21,ANSWER.m22,ANSWER.m23);
NSLog(@" %f %f %f %f",ANSWER.m30,ANSWER.m31,ANSWER.m32,ANSWER.m33);
NSLog(@"##################################################");
这是输出:
##################################################
Result:
-1.000000 0.000000 0.000000 0.000000
0.000000 1.000000 0.000000 -1.000000
0.000000 0.000000 -1.000000 -1.000000
0.000000 0.000000 0.000000 1.000000
Answer:
-1.000000 0.000000 0.000000 0.000000
0.000000 1.000000 0.000000 -1.000000
0.000000 0.000000 -1.000000 1.000000
0.000000 0.000000 0.000000 1.000000
##################################################
我花了最后5个小时试图调试一些OpenGL代码才发现这是问题所在。我当然必须遗漏一些东西。任何人都可以发现正在发生的事情,或者确认这不应该发生吗?
答案 0 :(得分:3)
我用笔和纸做了矩阵乘法,遵循以下规则:
http://www.mathsisfun.com/algebra/matrix-multiplying.html
这就是我用你的两个矩阵a和b做的方式:
好的,我想我知道你哪里出错了,你必须把数字列在错误的位置:
在代码中列出数字的方式是水平的,例如坐标(x,y,z),但在矩阵中,这些数字会移动到垂直位置。
因此,例如,[X Y Z W]应该垂直:
现在 IF 我们将您的数字列在错误的位置并将矩阵a乘以矩阵b,我们得到与您的“答案”矩阵相同的答案:
答案 1 :(得分:1)
关于此的更多细节。
OpenGL ES假设矩阵具有列主要顺序。因此,OpenGL ES读取矩阵的元素顺序是:
m00 m10 m20 m30
m01 m11 m21 m31
m02 m12 m22 m32
m03 m13 m23 m33
当然Apple的GLKit Math Utilities也是根据这个专栏命令构建的。你意识到它可能有点混乱。 :)