#include "Camera.h" #include "GameEngine.h" #include "Utils.h" #include 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; }