rem: OSGMatrixPerspective( res, 45, 2, 0.1, 1 );
add: MatrixPerspective( res, 45, 2, 0.1, 1 );
context: void matutilitytest( void ){	OSGMatrix res;	OSGPnt3f p1,p2;	OSGVec3f v;	OSGPnt3f testvec1[] = { OSGPnt3f( 0,0,0 ), OSGPnt3f( 1,0,0 ), OSGPnt3f( 2,0,0 ), 		OSGPnt3f( 0,1,0 ), OSGPnt3f( 0,0,1 ), OSGPnt3f( 1,1,1 )  };		// check the lookat matrix 	OSGMatrixLookAt( res,  0.f,0.f,0.f, 0.f,0.f,-1.f, 0.f,1.f,0.f );	    cout << "Lookat (0,0,0)-(0,0,-1)-(0,1,0): " << endl << res << endl;	matcheck( res, testvec1, sizeof(testvec1)/sizeof(OSGPnt3f) );	p1.setValues( 0,0,0);	p2.setValues( 0,0,-1);	v.setValues( 0,1,0);	OSGMatrixLookAt( res,  p1, p2, v );	    cout << "Lookat ("<<p1<<"):("<<p2<<"):("<<v<< "): " << endl << res << endl;	matcheck( res, testvec1, sizeof(testvec1)/sizeof(OSGPnt3f) );	OSGMatrixLookAt( res,  0.f,0.f,2.f, 0.f,0.f,0.f, 0.f,1.f,0.f );	    cout << "Lookat (0,0,2)-(0,0,0)-(0,1,0): " << endl << res << endl;	matcheck( res, testvec1, sizeof(testvec1)/sizeof(OSGPnt3f) );	OSGMatrixLookAt( res,  2.f,0.f,0.f, 0.f,0.f,0.f, 0.f,1.f,0.f );	    cout << "Lookat (2,0,0)-(0,0,0)-(0,1,0): " << endl << res << endl;	matcheck( res, testvec1, sizeof(testvec1)/sizeof(OSGPnt3f) );	if ( OSGMatrixLookAt( res,  0.f,3.f,0.f, 0.f,0.f,0.f, 0.f,1.f,0.f ) )	{		cout << "OSGMatrixLookAt failed: illegal conf correctly detected." << endl;	}	else		{		cout << "OSGMatrixLookAt succeeded: illegal conf not detected!!!" << endl;	}	OSGMatrixLookAt( res,  0.f,3.f,0.f, 0.f,0.f,0.f, 0.f,0.f,1.f );    cout << "Lookat (0,3,0)-(0,1,0)-(0,0,1): " << endl << res << endl;	matcheck( res, testvec1, sizeof(testvec1)/sizeof(OSGPnt3f) );	p1.setValues( 1,1,1);	p2.setValues( 0,0,0);	v.setValues( 0,2,0);	OSGMatrixLookAt( res,  p1,p2,v );	    cout << "Lookat ("<<p1<<"):("<<p2<<"):("<<v<< "): " << endl << res << endl;	matcheck( res, testvec1, sizeof(testvec1)/sizeof(OSGPnt3f) );	// check window	OSGPnt3f testvec2[] = { OSGPnt3f( 0,0,0 ), OSGPnt3f( 0,0,.5 ), 		OSGPnt3f( 0,0,1 ), OSGPnt3f( 0,0,-.5 ), OSGPnt3f( 0,0,-1 ), OSGPnt3f( 0,0,-1.5 ), 		OSGPnt3f( 0,0,-2 ), OSGPnt3f( .5,.5,-.5 ), OSGPnt3f( 1,1,-1 )  };	OSGMatrixFrustum( res, -1, 1, -1, 1, .1, 1 );    cout << "Frustum (-1, 1, -1, 1, .1, 1): " << endl << res << endl;	matcheck( res, testvec2, sizeof(testvec2)/sizeof(OSGPnt3f) );	OSGMatrixFrustum( res, 0, 1, 0, 1, 0.1, 1 );    cout << "Frustum (0, 1, 0, 1, 0.1, 1): " << endl << res << endl;	matcheck( res, testvec2, sizeof(testvec2)/sizeof(OSGPnt3f) );		// check orthogonal projection	OSGMatrixOrthogonal( res, -1, 1, -1, 1, -1, 1 );    cout << "Orthogonal (-1, 1, -1, 1, -1, 1): " << endl << res << endl;	matcheck( res, testvec2, sizeof(testvec2)/sizeof(OSGPnt3f) );	OSGMatrixOrthogonal( res, -4, -1, 1, 3, -2, 2 );    cout << "Orthogonal (-4, -1, 1, 3, -2, 2): " << endl << res << endl;	matcheck( res, testvec2, sizeof(testvec2)/sizeof(OSGPnt3f) );	// check perspective projection	OSGMatrixPerspective( res, 45, 1, 0.1, 1 );    cout << "Perspective (45, 1, 0.1, 1): " << endl << res << endl;	matcheck( res, testvec2, sizeof(testvec2)/sizeof(OSGPnt3f) );	OSGMatrixPerspective( res, 45, 2, 0.1, 1 );    cout << "Perspective (45, 2, 0.1, 1): " << endl << res << endl;	matcheck( res, testvec2, sizeof(testvec2)/sizeof(OSGPnt3f) );		// TODO: check stereo projection	// TODO: check general projection	}