예제 #1
0
void CGameView::ResetCameraAngleZoom()
{
	CCamera targetCam = m->ViewCamera;
	SetupCameraMatrixNonSmooth(m, &targetCam.m_Orientation);

	// Compute the zoom adjustment to get us back to the default
	CVector3D forwards = targetCam.m_Orientation.GetIn();

	CVector3D pivot = GetSmoothPivot(targetCam);
	CVector3D delta = pivot - targetCam.m_Orientation.GetTranslation();
	float dist = delta.Dot(forwards);
	m->Zoom.AddSmoothly(m->ViewZoomDefault - dist);

	// Reset orientations to default
	m->RotateX.SetValueSmoothly(DEGTORAD(m->ViewRotateXDefault));
	m->RotateY.SetValueSmoothly(DEGTORAD(m->ViewRotateYDefault));
}
예제 #2
0
void CGameView::SetCamera(CVector3D Pos, float RotX, float RotY, float zoom)
{
	m->PosX.SetValue(Pos.X);
	m->PosY.SetValue(Pos.Y);
	m->PosZ.SetValue(Pos.Z);
	m->RotateX.SetValue(RotX);
	m->RotateY.SetValue(RotY);
	m->Zoom.SetValue(zoom);

	FocusHeight(m, false);

	SetupCameraMatrixNonSmooth(m, &m->ViewCamera.m_Orientation);
	m->ViewCamera.UpdateFrustum();

	// Break out of following mode so the camera really moves to the target
	m->FollowEntity = INVALID_ENTITY;
}
예제 #3
0
void CGameView::MoveCameraTarget(const CVector3D& target)
{
	// Maintain the same orientation and level of zoom, if we can
	// (do this by working out the point the camera is looking at, saving
	//  the difference between that position and the camera point, and restoring
	//  that difference to our new target)

	CCamera targetCam = m->ViewCamera;
	SetupCameraMatrixNonSmooth(m, &targetCam.m_Orientation);

	CVector3D pivot = GetSmoothPivot(targetCam);
	CVector3D delta = target - pivot;

	m->PosX.SetValueSmoothly(delta.X + m->PosX.GetValue());
	m->PosZ.SetValueSmoothly(delta.Z + m->PosZ.GetValue());

	FocusHeight(m, false);

	// Break out of following mode so the camera really moves to the target
	m->FollowEntity = INVALID_ENTITY;
}