Esempio n. 1
0
// glu based camera functionality
void CCCameraBase::GluPerspective(float fovy, float aspect)
{	
    frustumMax.y = zNear * tanf( fovy * CC_PI / 360.0f );
	frustumMin.y = -frustumMax.y;
	frustumMin.x = frustumMin.y * aspect;
	frustumMax.x = frustumMax.y * aspect;
	
	const float zNearScale = 1.0f / zNear;
	frustumSize.width = ( frustumMax.x + -frustumMin.x ) * zNearScale;
	frustumSize.height = ( frustumMax.y + -frustumMin.y ) * zNearScale;
	
    if( gEngine->renderer->openGL2() )
    {
        CCMatrixLoadIdentity( projectionMatrix );
        CCMatrixFrustum( projectionMatrix, frustumMin.x, frustumMax.x, frustumMin.y, frustumMax.y, zNear, zFar );
    }
    else
    {
#ifdef IOS
        
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();
        glFrustumf( frustumMin.x, frustumMax.x, frustumMin.y, frustumMax.y, zNear, zFar );
        glGetFloatv( GL_PROJECTION_MATRIX, projectionMatrix.data() );
        
#endif
    }
}
void CCMatrixPerspective(CCMatrix &result, float fovy, float aspect, float nearZ, float farZ)
{
    float frustumW, frustumH;

    frustumH = tanf( fovy / 360.0f * CC_PI ) * nearZ;
    frustumW = frustumH * aspect;

    CCMatrixFrustum( result, -frustumW, frustumW, -frustumH, frustumH, nearZ, farZ );
}
// glu based camera functionality
void CCCameraBase::GluPerspective(float fovy, float aspect)
{	
    frustumMax.y = zNear * tanf( fovy * CC_PI / 360.0f );
	frustumMin.y = -frustumMax.y;
	frustumMin.x = frustumMin.y * aspect;
	frustumMax.x = frustumMax.y * aspect;
	
	const float zNearScale = 1.0f / zNear;
	frustumSize.width = ( frustumMax.x + -frustumMin.x ) * zNearScale;
	frustumSize.height = ( frustumMax.y + -frustumMin.y ) * zNearScale;
	
    CCMatrixLoadIdentity( projectionMatrix );
    CCMatrixFrustum( projectionMatrix, frustumMin.x, frustumMax.x, frustumMin.y, frustumMax.y, zNear, zFar );
}