void GLMath::_glFrustum(float left, float right, float bottom, float top, float nearZ, float farZ) { float deltaX = right - left; float deltaY = top - bottom; float deltaZ = farZ - nearZ; Matrix4X4 *r; DEBUG_NOTIFICATION("glFrustum(%f, %f, %f, %f, %f, %f\n", left, right, bottom, top, nearZ, farZ); r = getMatrix(matrixmode); if ( (nearZ <= 0.0f) || (farZ <= 0.0f) || (deltaX <= 0.0f) || (deltaY <= 0.0f) || (deltaZ <= 0.0f) ) return; _glLoadIdentity(r); r->m[0][0] = 2.0f * nearZ / deltaX; //r->m[0][1] = r->m[0][2] = r->m[0][3] = 0.0f; r->m[1][1] = 2.0f * nearZ / deltaY; //r->m[1][0] = r->m[1][2] = r->m[1][3] = 0.0f; r->m[2][0] = (right + left) / deltaX; r->m[2][1] = (top + bottom) / deltaY; r->m[2][2] = -(nearZ + farZ) / deltaZ; r->m[2][3] = -1.0f; r->m[3][2] = -2.0f * nearZ * farZ / deltaZ; //r->m[3][0] = r->m[3][1] = r->m[3][3] = 0.0f; r->m[3][3] = 0.0f; //_glMatrixMultiply(r, r, &frust); }
void GLMath::_glLoadIdentity() { Matrix4X4 *r; DEBUG_INFO("_glLoadIdentity()\n"); r = getMatrix(matrixmode); _glLoadIdentity(r); }
void gl_CreateScreen() { int vsize = (screen_height/MaxLines)*MaxLines; int vpos, hoffset, maxheight; int maxstretch = (screen_width * 3) / 40; if (vsize+Tall*4 > screen_height) maxheight = screen_height; else maxheight = vsize+Tall*4; if (Narrow > maxstretch) hoffset = maxstretch*4; else hoffset = Narrow*4; vpos = (screen_height - maxheight)/2; _glEnable( GL_TEXTURE_2D ); _glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); _glViewport( -hoffset, vpos, screen_width+hoffset*2, maxheight ); _glMatrixMode( GL_PROJECTION ); _glLoadIdentity(); _glOrtho( 0, screen_width, screen_height, 0, -1, 1 ); _glMatrixMode( GL_MODELVIEW ); _glLoadIdentity(); }
void GLMath::_glOrtho(float left, float right, float bottom, float top, float nearZ, float farZ) { float deltaX = right - left; float deltaY = top - bottom; float deltaZ = farZ - nearZ; Matrix4X4 *r; if ( (deltaX == 0.0f) || (deltaY == 0.0f) || (deltaZ == 0.0f) ) return; r = getMatrix(matrixmode); _glLoadIdentity(r); r->m[0][0] = 2.0f / deltaX; r->m[3][0] = -(right + left) / deltaX; r->m[1][1] = 2.0f / deltaY; r->m[3][1] = -(top + bottom) / deltaY; r->m[2][2] = -2.0f / deltaZ; r->m[3][2] = -(nearZ + farZ) / deltaZ; //_glMatrixMultiply(result, &ortho, result); }