2012-05-01 55 views
0

我不確定我是否誤解了事情,或者我簡直累了。 考慮下面的兩行代碼。GLKMatrix4Translate是否正確?

GLKMatrix4 projection = GLKMatrix4Translate(_perspective, 0, 0, -5); 
GLKMatrix4 projection = GLKMatrix4Multiply(_perspective, GLKMatrix4MakeTranslation(0, 0, -5));  

我期望他們是等效的。但他們不是。對於GLKMatrix4Translate的來源是:

static __inline__ GLKMatrix4 GLKMatrix4Translate(GLKMatrix4 matrix, float tx, float ty, float tz) 
{ 
    GLKMatrix4 m = { matrix.m[0], matrix.m[1], matrix.m[2], matrix.m[3], 
        matrix.m[4], matrix.m[5], matrix.m[6], matrix.m[7], 
        matrix.m[8], matrix.m[9], matrix.m[10], matrix.m[11], 
        matrix.m[0] * tx + matrix.m[4] * ty + matrix.m[8] * tz + matrix.m[12], 
        matrix.m[1] * tx + matrix.m[5] * ty + matrix.m[9] * tz + matrix.m[13], 
        matrix.m[2] * tx + matrix.m[6] * ty + matrix.m[10] * tz + matrix.m[14], 
        matrix.m[15] }; 
    return m; 
} 

但是我預期的最後一行是:

matrix.m[3] * tx + matrix.m[7] * ty + matrix.m[11] * tz + m[15]; 

我是正確,或在疲憊的霧?

+0

累了霧:http://en.wikipedia.org/wiki/Translation_%28geometry%29#Matrix_representation – stark

回答

0

我認爲你是對的,在翻譯中必須有一個錯誤。我使用MakeTranslation + Multiply代替Translate函數,因爲m [15]總是保持不變。