1

这是源代码。ANSWER是正确答案,RESULT是实际结果。

我是盲目的,还是它应该是在计算 a-1进入的时候?331

这是代码:

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 代码,却发现这是问题所在。我一定是错过了什么,当然。任何人都可以发现发生了什么,或验证这不应该发生吗?

4

2 回答 2

3

嗯,我得到了与你的“结果”矩阵相同的结果。

我按照以下规则用笔和纸进行了矩阵乘法:

http://www.mathsisfun.com/algebra/matrix-multiplying.html

这就是我使用你的两个矩阵 a 和 b 的方法:

在此处输入图像描述

好的,我想我知道你哪里出错了,你一定是把数字列错了:

您在代码中列出数字的方式是水平的,例如 Coordinate(x,y,z) 但在矩阵中,这些数字会移动到垂直位置。

例如,[ XYZW ] 应该变成垂直的:

在此处输入图像描述

现在,如果我们将您的数字列出在错误的位置并将矩阵 a 与矩阵 b 相乘,我们会得到与您的“ANSWER”矩阵相同的答案:

在此处输入图像描述

于 2012-01-27T07:06:37.367 回答
1

Little bit more details on this.

OpenGL ES suppose matrices have column major order. So element order how OpenGL ES reads matrix is:

m00 m10 m20 m30
m01 m11 m21 m31
m02 m12 m22 m32
m03 m13 m23 m33

Of course Apple's GLKit Math Utilities are also built according to this column majored order. And it may be little bit confusing while you realise it. :)

于 2013-01-05T16:01:52.483 回答