External camera interface
This commit is contained in:
parent
b200c38ca1
commit
1f91a08465
@ -46,6 +46,27 @@ Graphic3DRenderer::Graphic3DRenderer() {
|
|||||||
|
|
||||||
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) {
|
void Graphic3DRenderer::Draw(sf::RenderTexture& context) {
|
||||||
sf::BlendMode sBM = sf::BlendNone;
|
sf::BlendMode sBM = sf::BlendNone;
|
||||||
sf::RenderStates sRS(sBM);
|
sf::RenderStates sRS(sBM);
|
||||||
|
@ -7,6 +7,12 @@
|
|||||||
#include "../World/WorldObject.hpp"
|
#include "../World/WorldObject.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum eCameraMovementType {
|
||||||
|
CAMERA_MOVE_WALK,
|
||||||
|
CAMERA_MOVE_STRAFE,
|
||||||
|
CAMERA_MOVE_FLY
|
||||||
|
} CAMERA_MOVE;
|
||||||
|
|
||||||
class Graphic3DRenderer final {
|
class Graphic3DRenderer final {
|
||||||
public:
|
public:
|
||||||
Graphic3DRenderer();
|
Graphic3DRenderer();
|
||||||
@ -17,6 +23,7 @@ public:
|
|||||||
Graphic3DRenderer(Graphic3DRenderer const&) = delete;
|
Graphic3DRenderer(Graphic3DRenderer const&) = delete;
|
||||||
Graphic3DRenderer& operator= (Graphic3DRenderer const&) = delete;
|
Graphic3DRenderer& operator= (Graphic3DRenderer const&) = delete;
|
||||||
|
|
||||||
|
void UpdateCamera(CAMERA_MOVE type, const float value);
|
||||||
void Draw(sf::RenderTexture& context);
|
void Draw(sf::RenderTexture& context);
|
||||||
|
|
||||||
private:
|
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);
|
M3D_VECTOR U = M3D_V4LoadF3(&up);
|
||||||
|
|
||||||
LookAt(P, T, U);
|
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(M3D_VECTOR pos, M3D_VECTOR target, M3D_VECTOR worldUp);
|
||||||
void LookAt(const M3D_F3& pos, const M3D_F3& target, const M3D_F3& up);
|
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:
|
private:
|
||||||
M3D_F4X4 mProjMat = M3D_MIdentity4x4();
|
M3D_F4X4 mProjMat = M3D_MIdentity4x4();
|
||||||
M3D_F4X4 mViewMat = M3D_MIdentity4x4();
|
M3D_F4X4 mViewMat = M3D_MIdentity4x4();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user