Mercurial > LightClone
view LightClone/Source/CameraController.cpp @ 38:2caa7c7e2cb5
Refactored program; Added dialog
author | koryspansel |
---|---|
date | Wed, 21 Sep 2011 21:40:19 -0700 |
parents | 292e534f00c2 |
children | 91e927584f92 |
line wrap: on
line source
/* * CameraController */ #include "CameraController.h" /* * CameraController */ CameraController::CameraController(float fInitialDistance, float fInitialYaw, float fInitialPitch) { nMode = CameraMode_3D; fCameraDistance = fInitialDistance; fCameraYaw = fInitialYaw; fCameraPitch = fInitialPitch; fViewAngle = D3DX_PI / 4.0f; fMinimumZ = 1.0f; fMaximumZ = 1024.0f; } /* * SetMode */ void CameraController::SetMode(uint32 nCameraMode) { nMode = nCameraMode; } /* * Render */ void CameraController::Update(float fElapsed) { } /* * Yaw */ void CameraController::Yaw(float fAmount) { fCameraYaw += fAmount; } /* * Pitch */ void CameraController::Pitch(float fAmount) { fCameraPitch += fAmount; } /* * Move */ void CameraController::Move(float fAmount) { fCameraDistance += fAmount; } /* * GetLocation */ const D3DXVECTOR3 CameraController::GetLocation() const { const float fOffsetX = fCameraDistance * sinf(0.5f * D3DX_PI - fCameraPitch) * cosf(fCameraYaw); const float fOffsetY = fCameraDistance * cosf(0.5f * D3DX_PI - fCameraPitch); const float fOffsetZ = fCameraDistance * sinf(0.5f * D3DX_PI - fCameraPitch) * sinf(fCameraYaw); return D3DXVECTOR3(fOffsetX, fOffsetY, fOffsetZ); } /* * GetDirection */ const D3DXVECTOR3 CameraController::GetDirection() const { return D3DXVECTOR3(0.0f, 0.0f, 1.0f); } /* * GetRight */ const D3DXVECTOR3 CameraController::GetRight() const { return D3DXVECTOR3(1.0f, 0.0f, 0.0f); } /* * GetUp */ const D3DXVECTOR3 CameraController::GetUp() const { return D3DXVECTOR3(0.0f, 1.0f, 0.0f); } /* * GetProjection */ const D3DXMATRIX CameraController::GetProjection(const D3DVIEWPORT9& kViewport) const { D3DXMATRIX kProjection; if(nMode == CameraMode_2D) { D3DXMatrixOrthoLH(&kProjection, (float)kViewport.Width, (float)kViewport.Height, fMinimumZ, fMaximumZ); } else if(nMode == CameraMode_3D) { D3DXMatrixPerspectiveFovLH(&kProjection, fViewAngle, (float)kViewport.Width / (float)kViewport.Height, fMinimumZ, fMaximumZ); } return kProjection; } /* * GetView */ const D3DXMATRIX CameraController::GetView() const { D3DXMATRIX kView; if(nMode == CameraMode_2D) { D3DXMatrixIdentity(&kView); } else if(nMode == CameraMode_3D) { const D3DXVECTOR3& kLocation = GetLocation(); const D3DXVECTOR3& kUp = GetUp(); D3DXMatrixLookAtLH(&kView, &kLocation, &D3DXVECTOR3(0.0f, 0.0f, 0.0f), &kUp); } return kView; }