VOID CEngineInterface::Camera_SetZoom(BOOL bUp, INT multiple) { const FLOAT ZOOMSPEED = 0.05f; // FLOAT fZoom = (m_pCamera_Current->GetDistance() - CCamera_Scene::MIN_DISTANCE) / (CCamera_Scene::MAX_DISTANCE - CCamera_Scene::MIN_DISTANCE); // 获取当前的Pitch FLOAT fPitch = m_pCamera_Current->GetApprochPitch(); // 计算Pitch步长值 static FLOAT fProportion = (CCamera_Scene::STATIC_PITCH - CCamera_Scene::APPROCH_PITCH) * (ZOOMSPEED * multiple); // 接近人物 if( bUp ) { // fZoom -= (ZOOMSPEED * multiple); if( fZoom < 0.0f ) fZoom = 0.0f; // if( (m_fParallelOffset > 0.0f) || (m_fParallelOffset < 0.0f) ) // m_fParallelOffset = m_fOldParallelOffset + ( 1 - fZoom ); // 数值由小到大 fPitch -= fProportion; if( fPitch > CCamera_Scene::APPROCH_PITCH ) fPitch = CCamera_Scene::APPROCH_PITCH; } // 远离人物 else { // fZoom += (ZOOMSPEED * multiple); if( fZoom > 1.0f ) fZoom = 1.0f; // if( (m_fParallelOffset > 0.0f) || (m_fParallelOffset < 0.0f) ) // m_fParallelOffset = m_fOldParallelOffset - ( 1 - fZoom ); // 数值由大到小 fPitch += fProportion; if( fPitch < CCamera_Scene::STATIC_PITCH ) fPitch = CCamera_Scene::STATIC_PITCH; } //& 根据拉进或拉远来修正这个值, APPROCH_PITCH是最终趋近的判定值, 在Game.cfg中添写 // 这里设置完值后最终通过camera的更新来修正pitch m_pCamera_Scene->SetApprochPitch(fPitch); Camera_SetZoom(fZoom); // 根据距离来影响偏移量 // Camera_SetLookAt( m_pCamera_Scene->GetGameLookAt() ); }
VOID CRenderSystem::Camera_SetZoom(BOOL bUp,INT multiple) { const FLOAT ZOOMSPEED = 0.05f; FLOAT fZoom = (m_pCamera_Current->GetDistance()-CCamera_Scene::MIN_DISTANCE)/(CCamera_Scene::MAX_DISTANCE-CCamera_Scene::MIN_DISTANCE); if (bUp) { fZoom-=(ZOOMSPEED*multiple); if (fZoom<0.0f) fZoom=0.0f; } else { fZoom+=(ZOOMSPEED*multiple); if (fZoom>1.0f) fZoom=1.0f; } Camera_SetZoom(fZoom); }