/src/renderer/camera.cpp
https://bitbucket.org/vivkin/gam3b00bs/ · C++ · 59 lines · 47 code · 12 blank · 0 comment · 3 complexity · 9e93228841d7f8666836c6d3f45db8ef MD5 · raw file
- #include "camera.h"
-
- void camera_look_at(camera_t &camera, const D3DXVECTOR3 &position, const D3DXVECTOR3 ¢er, const D3DXVECTOR3 &up)
- {
- D3DXMatrixLookAtLH(&camera.view, &position, ¢er, &up);
- }
-
- void camera_perspective(camera_t &camera, float fov, float aspect, float znear, float zfar)
- {
- D3DXMatrixPerspectiveFovLH(&camera.projection, fov, aspect, znear, zfar);
- }
-
- void camera_update(camera_t &camera)
- {
- if( camera.phi < 0.1f )
- camera.phi = 0.1f;
-
- if( camera.phi > 3.14f / 3.0f )
- camera.phi = 3.14f / 3.0f;
-
- camera.position.x = camera.target.x + sin(camera.angle) * camera.radius;
- camera.position.z = camera.target.z + cos(camera.angle) * camera.radius;
- camera.position.y = sin(camera.phi) * camera.radius;
-
- D3DXVECTOR3 up = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
- D3DXMatrixLookAtLH(&camera.view, &camera.position, &camera.target, &up);
- D3DXMatrixPerspectiveFovLH(&camera.projection, camera.fov, camera.aspect, camera.znear, camera.zfar);
- }
-
- void camera_rotate(camera_t &camera, float delta)
- {
- camera.angle += delta;
- camera_update(camera);
- }
-
- void camera_move(camera_t &camera, float dx, float dz)
- {
- D3DXVECTOR3 fwd = camera.position - camera.target;
- fwd.y = 0;
- D3DXVECTOR3 side = D3DXVECTOR3(fwd.z, 0.0f, -fwd.x);
- D3DXVec3Normalize(&fwd, &fwd);
- D3DXVec3Normalize(&side, &side);
-
- camera.position += D3DXVECTOR3(fwd.x * dz, 0.0f, fwd.z * dz);
- camera.target += D3DXVECTOR3(fwd.x * dz, 0.0f, fwd.z * dz);
-
- camera.position += D3DXVECTOR3(side.x * dx, 0.0f, side.z * dx);
- camera.target += D3DXVECTOR3(side.x * dx, 0.0f, side.z * dx);
-
- camera_update(camera);
- }
-
- void camera_zoom(camera_t &camera, float delta)
- {
- camera.radius += delta;
- if(camera.radius < 1.0f)
- camera.radius = 1.0f;
- camera_update(camera);
- }