123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #include "Camera.h"
- #include "GameEngine.h"
- #include "Utils.h"
- #include <cmath>
- Camera::Camera()
- {
- }
- Camera::Camera(const Camera& orig)
- {
- }
- Camera::~Camera()
- {
- }
- void Camera::storePosition()
- {
- oldCamera.set(camera);
- }
- void Camera::storeAngles()
- {
- oldLengthAngle = lengthAngle;
- oldWidthAngle = widthAngle;
- }
- void Camera::setPosition(float x, float y, float z)
- {
- camera.set(x, y, z);
- }
- void Camera::setAngles(float length, float width)
- {
- lengthAngle = length;
- widthAngle = width;
- }
- void Camera::updateView(float lag)
- {
- // -------------------------------------------------------------------------
- // calculate vectors for the view matrix
- // -------------------------------------------------------------------------
-
- // front
- front.setAngles(interpolate(lag, oldLengthAngle, lengthAngle), interpolate(lag, oldWidthAngle, widthAngle));
- // back
- back.setInverse(front);
- // right
- right.set(front);
- right.cross(0.0f, 1.0f, 0.0f);
- right.normalize();
-
- // left
- left.setInverse(right);
-
- // up
- up.set(front);
- up.cross(left);
- up.normalize();
-
- interCamera.set(oldCamera);
- interCamera.addMul(camera, lag);
- interCamera.addMul(oldCamera, -lag);
-
- view.set(0, 0, right.getX());
- view.set(0, 1, right.getY());
- view.set(0, 2, right.getZ());
- view.set(0, 3, right.dotInverse(interCamera));
-
- view.set(1, 0, up.getX());
- view.set(1, 1, up.getY());
- view.set(1, 2, up.getZ());
- view.set(1, 3, up.dotInverse(interCamera));
-
- view.set(2, 0, back.getX());
- view.set(2, 1, back.getY());
- view.set(2, 2, back.getZ());
- view.set(2, 3, back.dotInverse(interCamera));
-
- view.set(3, 0, 0.0f);
- view.set(3, 1, 0.0f);
- view.set(3, 0, 0.0f);
- view.set(3, 3, 1.0f);
-
- // -------------------------------------------------------------------------
- // calculate vectors for movement
- // -------------------------------------------------------------------------
-
- // front
- front.setY(0.0f);
- front.normalize();
- // back
- back.setInverse(front);
- // right
- right.set(front);
- right.cross(0.0f, 1.0f, 0.0f);
- right.normalize();
-
- // left
- left.setInverse(right);
- // up
- up.set(0.0f, 1.0f, 0.0f);
-
- // down
- down.setInverse(up);
-
- GameEngine::updateView(view);
- }
- const Vector3D& Camera::getFront()
- {
- return front;
- }
- const Vector3D& Camera::getBack()
- {
- return back;
- }
- const Vector3D& Camera::getRight()
- {
- return right;
- }
- const Vector3D& Camera::getLeft()
- {
- return left;
- }
- const Vector3D& Camera::getUp()
- {
- return up;
- }
- const Vector3D& Camera::getDown()
- {
- return down;
- }
|