1

これがソースコードです。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コードのデバッグを試みましたが、これが問題であることがわかりました。確かに何かが足りないに違いない。誰かが何が起こっているのかを見つけたり、これが起こってはならないことを確認したりできますか?

4

2 に答える 2

3

ええと、私はあなたの「結果」マトリックスと同じ結果を得ました。

次のルールに従って、ペンと紙で行列の乗算を行いました。

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

これは私があなたの2つの行列aとbを使ってそれをした方法です:

ここに画像の説明を入力してください

OK、私はあなたがどこで間違ったのか知っていると思います、あなたは間違った位置に番号をリストしたに違いありません:

コードで数値をリストする方法は水平です(例:Coordinate(x、y、z))が、マトリックスでは、これらの数値は垂直位置に移動します。

したがって、たとえば、[XYZW]は垂直になる必要があります。

ここに画像の説明を入力してください

ここで、間違った位置にあなたの番号をリストし、行列aに行列bを掛けると、「答え」の行列と同じ答えが得られます。

ここに画像の説明を入力してください

于 2012-01-27T07:06:37.367 に答える
1

これについてもう少し詳しく説明します。

OpenGL ESは、行列に列の主要な順序があると想定しています。したがって、OpenGLESが行列を読み取る要素の順序は次のとおりです。

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

もちろん、AppleのGLKit Math Utilitiesも、この列の主要な順序に従って構築されています。そして、あなたがそれを理解している間、それは少し混乱するかもしれません。:)

于 2013-01-05T16:01:52.483 に答える