#140545 - a128 - Mon Sep 17, 2007 10:08 am
The latest libnds has a bug.
glFrustumf32 sets the MATRIX_MULT4x4 in a wrong order. The older version in libnds does this right.
from http://nocash.emubase.de/gbatek.htm#ds3dmatrixtypes
this is the order of the MATRIX_MULT4x4 operations ..so the old code does the setup correct.
m[0] m[1] m[2] m[3]
m[4] m[5] m[6] m[7]
m[8] m[9] m[10] m[11]
m[12] m[13] m[14] m[15]
glFrustumf32 sets the MATRIX_MULT4x4 in a wrong order. The older version in libnds does this right.
from http://nocash.emubase.de/gbatek.htm#ds3dmatrixtypes
this is the order of the MATRIX_MULT4x4 operations ..so the old code does the setup correct.
m[0] m[1] m[2] m[3]
m[4] m[5] m[6] m[7]
m[8] m[9] m[10] m[11]
m[12] m[13] m[14] m[15]
Code: |
//OLD CODE AND OK MATRIX_MULT4x4 = divf32(2*near, right - left); MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = divf32(right + left, right - left); MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = divf32(2*near, top - bottom); MATRIX_MULT4x4 = divf32(top + bottom, top - bottom); MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = -divf32(far + near, far - near); MATRIX_MULT4x4 = floattof32(-1.0F); MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = -divf32(2 * mulf32(far, near), far - near); MATRIX_MULT4x4 = 0; |
Code: |
NEw CODE AND WRONG?!!!!!! MATRIX_MULT4x4 = divf32(2*near, right - left); MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = divf32(2*near, top - bottom); MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = divf32(right + left, right - left); MATRIX_MULT4x4 = divf32(top + bottom, top - bottom); MATRIX_MULT4x4 = -divf32(far + near, far - near); MATRIX_MULT4x4 = floattof32(-1.0F); MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = 0; MATRIX_MULT4x4 = -divf32(2 * mulf32(far, near), far - near); MATRIX_MULT4x4 = 0; |