Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
void GLMath::_glLoadIdentity()
{
    Matrix4X4 *r;

    DEBUG_INFO("_glLoadIdentity()\n");
    r = getMatrix(matrixmode);

    _glLoadIdentity(r);
}
Exemplo n.º 3
0
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();
}
Exemplo n.º 4
0
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);
}