Question

Voici le code source. ANSWER est la bonne réponse, RESULT est le résultat réel.

Suis-je aveugle, ou est-ce qu'il calcule un -1 pour l'entrée 33 Quand ça devrait être un 1?

Voici le code:

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(@"##################################################");

Voici la sortie:

##################################################
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
##################################################

J'ai passé les 5 dernières heures à essayer de déboguer un code OpenGL uniquement pour constater que c'est le problème. Je dois manquer quelque chose, sûrement. Quelqu'un peut-il repérer ce qui se passe ou vérifier que cela ne devrait pas se produire?

Était-ce utile?

La solution

Euh, j'ai obtenu le même résultat que votre matrice "Résultat".

J'ai fait la multiplication matricielle avec le stylo et le papier, en suivant ces règles:

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

C'est ainsi que je l'ai fait en utilisant vos deux matrice A et B:

enter image description here

Ok, je pense que je sais où vous avez mal tourné, vous devez avoir énuméré les chiffres dans la mauvaise position:

La façon dont vous énumérez le nombre dans le code est la coordonnée horizontale EG (x, y, z) mais dans une matrice, ces chiffres sont déplacés vers des positions verticales.

Ainsi, par exemple, [XYZW] devrait devenir verticalement:

enter image description here

À présent SI Nous devions répertorier vos numéros dans la mauvaise position et multiplier la matrice A avec la matrice B, nous obtenons la même réponse que votre matrice "Réponse":

enter image description here

Autres conseils

Un peu plus de détails à ce sujet.

OpenGL ES supposons que les matrices ont une commande majeure de colonne. Ainsi, l'ordre des éléments comment OpenGL ES lit la matrice:

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

Bien sûr, les utilitaires GLKIT Math d'Apple sont également construits selon cette commande majeure en colonne. Et cela peut être un peu déroutant pendant que vous vous en rendez compte. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top