// 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 ); }