ios - iOS:据我所知,GLKit矩阵乘法已中断

标签 ios matrix multiplication glkit

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

我是盲人,还是应该为-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代码,才发现这是问题所在。我肯定想念一些东西。任何人都可以发现正在发生的事情,或者验证是否应该发生这种情况?

最佳答案

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

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

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

这是我使用您的两个矩阵a和b做到的:

好的,我想我知道您出了错,您必须在错误的位置列出数字:

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

因此,例如[X Y Z W]应该垂直:

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

关于ios - iOS:据我所知,GLKit矩阵乘法已中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029796/

相关文章:

objective-c - 从 XIB 加载 viewForSectionHeader 时遇到问题

jquery - 使点击按住执行链接

matrix - OpenGL ES 2.0(或 Marmalade SDK),效果类似于 OpenGL ES 1.x 中 "glRotate()", "glTranslation()"的顺序

Python长乘法

c++ - 大负数乘以 -1 给出输出负数 C++

ios - scrollView 没有滚动到底部并且 ScrollView 上的内容 View 没有滚动

iOS 自动续订订阅 - 有关续订过程的问题

用行名替换 R 中的矩阵值另一个矩阵

html - 尝试使用带有表格的 div 元素创建带括号的(数学)矩阵。表格不在 div 内

c++ - 加速矩阵乘法