External camera interface
This commit is contained in:
parent
b200c38ca1
commit
1f91a08465
@ -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);
|
||||
|
@ -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:
|
||||
|
@ -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));
|
||||
}
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user