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() );
}
Exemple #2
0
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);
}