External camera interface

This commit is contained in:
JackCarterSmith 2024-10-12 14:35:43 +02:00
parent b200c38ca1
commit 1f91a08465
Signed by: JackCarterSmith
GPG Key ID: 832E52F4E23F8F24
4 changed files with 56 additions and 0 deletions

View File

@ -46,6 +46,27 @@ Graphic3DRenderer::Graphic3DRenderer() {
Graphic3DRenderer::~Graphic3DRenderer() {}
void Graphic3DRenderer::UpdateCamera(CAMERA_MOVE type, const float value) {
switch (type) {
case CAMERA_MOVE_WALK:
mMainCamera->Walk(value);
break;
case CAMERA_MOVE_STRAFE:
mMainCamera->Strafe(value);
break;
case CAMERA_MOVE_FLY:
mMainCamera->Fly(value);
break;
default:
break;
}
mMainCamera->UpdateCamView();
}
void Graphic3DRenderer::Draw(sf::RenderTexture& context) {
sf::BlendMode sBM = sf::BlendNone;
sf::RenderStates sRS(sBM);

View File

@ -7,6 +7,12 @@
#include "../World/WorldObject.hpp"
typedef enum eCameraMovementType {
CAMERA_MOVE_WALK,
CAMERA_MOVE_STRAFE,
CAMERA_MOVE_FLY
} CAMERA_MOVE;
class Graphic3DRenderer final {
public:
Graphic3DRenderer();
@ -17,6 +23,7 @@ public:
Graphic3DRenderer(Graphic3DRenderer const&) = delete;
Graphic3DRenderer& operator= (Graphic3DRenderer const&) = delete;
void UpdateCamera(CAMERA_MOVE type, const float value);
void Draw(sf::RenderTexture& context);
private:

View File

@ -36,4 +36,28 @@ void Camera::LookAt(const M3D_F3& pos, const M3D_F3& target, const M3D_F3& up) {
M3D_VECTOR U = M3D_V4LoadF3(&up);
LookAt(P, T, U);
}
void Camera::Strafe(float d) {
// mPosition += d*mRight
M3D_VECTOR s = M3D_V4Replicate(d);
M3D_VECTOR r = M3D_V4LoadF3(&mRight);
M3D_VECTOR p = M3D_V4LoadF3(&mPos);
M3D_V4StoreF3(&mPos, M3D_V4MultiplyAdd(s, r, p));
}
void Camera::Walk(float d) {
// mPosition += d*mLook
M3D_VECTOR s = M3D_V4Replicate(d);
M3D_VECTOR l = M3D_V4LoadF3(&mLook);
M3D_VECTOR p = M3D_V4LoadF3(&mPos);
M3D_V4StoreF3(&mPos, M3D_V4MultiplyAdd(s, l, p));
}
void Camera::Fly(float d) {
// mPosition += d*mRight
M3D_VECTOR s = M3D_V4Replicate(d);
M3D_VECTOR u = M3D_V4LoadF3(&mUp);
M3D_VECTOR p = M3D_V4LoadF3(&mPos);
M3D_V4StoreF3(&mPos, M3D_V4MultiplyAdd(s, u, p));
}

View File

@ -28,6 +28,10 @@ public:
void LookAt(M3D_VECTOR pos, M3D_VECTOR target, M3D_VECTOR worldUp);
void LookAt(const M3D_F3& pos, const M3D_F3& target, const M3D_F3& up);
void Strafe(float d);
void Walk(float d);
void Fly(float d);
private:
M3D_F4X4 mProjMat = M3D_MIdentity4x4();
M3D_F4X4 mViewMat = M3D_MIdentity4x4();