void CCOrbitCamera::sphericalRadius(float *newRadius, float *zenith, float *azimuth) { float ex, ey, ez, cx, cy, cz, x, y, z; float r; // radius float s; CCCamera* pCamera = m_pTarget->getCamera(); pCamera->getEyeXYZ(&ex, &ey, &ez); pCamera->getCenterXYZ(&cx, &cy, &cz); x = ex-cx; y = ey-cy; z = ez-cz; r = sqrtf( powf(x,2) + powf(y,2) + powf(z,2)); s = sqrtf( powf(x,2) + powf(y,2)); if( s == 0.0f ) s = FLT_EPSILON; if(r==0.0f) r = FLT_EPSILON; *zenith = acosf( z/r); if( x < 0 ) *azimuth= (float)M_PI - asinf(y/s); else *azimuth = asinf(y/s); *newRadius = r / CCCamera::getZEye(); }
// // CameraAction // void CCActionCamera::startWithTarget(CCNode *pTarget) { CCActionInterval::startWithTarget(pTarget); CCCamera *camera = pTarget->getCamera(); camera->getCenterXYZ(&m_fCenterXOrig, &m_fCenterYOrig, &m_fCenterZOrig); camera->getEyeXYZ(&m_fEyeXOrig, &m_fEyeYOrig, &m_fEyeZOrig); camera->getUpXYZ(&m_fUpXOrig, &m_fUpYOrig, &m_fUpZOrig); }