Refactoring camera
This commit is contained in:
@@ -2,7 +2,6 @@ target_sources(Engine
|
||||
PRIVATE
|
||||
BoxCollider.h
|
||||
Camera.h
|
||||
Camera.cpp
|
||||
Collider.h
|
||||
Collider.cpp
|
||||
Component.h
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
#include "Camera.h"
|
||||
#include "Actor/Actor.h"
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
|
||||
using namespace Seele;
|
||||
using namespace Seele::Component;
|
||||
using namespace Seele::Math;
|
||||
|
||||
Camera::Camera() : viewMatrix(Matrix4()), cameraPos(Vector()), bNeedsViewBuild(false) {
|
||||
yaw = -3.1415f / 2;
|
||||
pitch = 0;
|
||||
Vector eyePos = Vector(0, 0, -5);
|
||||
Vector lookAt = Vector(0, 0, 0);
|
||||
viewMatrix = glm::lookAt(eyePos, lookAt, Vector(0, 1, 0));
|
||||
cameraPos = eyePos;
|
||||
cameraForward = Vector(0, 0, 1);
|
||||
}
|
||||
|
||||
Camera::~Camera() {}
|
||||
|
||||
void Camera::mouseMove(float deltaYaw, float deltaPitch) {
|
||||
yaw += deltaYaw / 500.f;
|
||||
pitch += deltaPitch / 500.f;
|
||||
Vector cameraDirection = glm::normalize(Vector(cos(yaw) * cos(pitch), sin(pitch), sin(yaw) * cos(pitch)));
|
||||
Matrix4 viewMat = glm::lookAt(getTransform().getPosition(), getTransform().getPosition() + cameraDirection, Vector(0, 1, 0));
|
||||
getTransform().setRotation(viewMat); // quaternion from matrix, janky but im bad at math
|
||||
bNeedsViewBuild = true;
|
||||
}
|
||||
|
||||
void Camera::mouseScroll(float x) {
|
||||
getTransform().translate(getTransform().getForward() * x);
|
||||
bNeedsViewBuild = true;
|
||||
}
|
||||
|
||||
void Camera::moveX(float amount) {
|
||||
getTransform().translate(getTransform().getForward() * amount);
|
||||
bNeedsViewBuild = true;
|
||||
}
|
||||
|
||||
void Camera::moveY(float amount) {
|
||||
getTransform().translate(getTransform().getRight() * amount);
|
||||
bNeedsViewBuild = true;
|
||||
}
|
||||
|
||||
void Camera::buildViewMatrix() {
|
||||
Vector eyePos = getTransform().getPosition();
|
||||
Vector lookAt = eyePos + getTransform().getForward();
|
||||
viewMatrix = glm::lookAt(eyePos, lookAt, Vector(0, 1, 0));
|
||||
cameraPos = eyePos;
|
||||
cameraForward = getTransform().getForward();
|
||||
bNeedsViewBuild = false;
|
||||
}
|
||||
@@ -6,32 +6,8 @@
|
||||
namespace Seele {
|
||||
namespace Component {
|
||||
struct Camera {
|
||||
REQUIRE_COMPONENT(Transform)
|
||||
|
||||
Camera();
|
||||
~Camera();
|
||||
|
||||
Matrix4 getViewMatrix() const {
|
||||
assert(!bNeedsViewBuild);
|
||||
return viewMatrix;
|
||||
}
|
||||
Vector getCameraPosition() const { return cameraPos; }
|
||||
Vector getCameraForward() const { return cameraForward; }
|
||||
void mouseMove(float deltaX, float deltaY);
|
||||
void mouseScroll(float x);
|
||||
void moveX(float amount);
|
||||
void moveY(float amount);
|
||||
void buildViewMatrix();
|
||||
|
||||
bool mainCamera = false;
|
||||
|
||||
private:
|
||||
float yaw;
|
||||
float pitch;
|
||||
Matrix4 viewMatrix;
|
||||
Vector cameraPos;
|
||||
Vector cameraForward;
|
||||
bool bNeedsViewBuild;
|
||||
bool mainCamera = false;
|
||||
};
|
||||
} // namespace Component
|
||||
} // namespace Seele
|
||||
|
||||
Reference in New Issue
Block a user