75 lines
2.2 KiB
C++

//
// Created by Epagris on 2020. 03. 16..
//
#ifndef CAM
#define CAM
#include <DirectXMath.h>
#include "IHasDefault.h"
using namespace DirectX;
namespace eg3d {
enum class ProjectionType { PERSPECTIVE, ORTHOGRAPHIC };
// vetítés tulajdonságai
struct ProjParams : public IHasDefault {
float FOV_ViewHeight; // látószög
float AspectRatio; // képarány
float NearPlane; // közeli sík
float FarPlane; // távoli sík
ProjectionType projType; // vetítés típusa
ProjParams(); // konstr.
void loadDefaults(); // alapértelmezett paraméterek betöltése (FOV_ViewHeight: 90 fok, AR: 1:1, N: 1.0, F: 10.0)
};
// nézet tulajdonságai
struct ViewParams : public IHasDefault {
XMFLOAT3 position; // nézet pozíciója
float yaw; // forgatás
float pitch; // billentés
ViewParams(); // konstr.
void loadDefaults() override;
};
class Cam : IHasDefault {
private:
ProjParams mProjParams; // vetítés paraméterei
ViewParams mViewParams; // nézet paraméterei
XMFLOAT3 mVViewDirection; // nézet iránya
XMFLOAT3 mStrafeDirection; // oldalazás iránya
XMFLOAT4X4 mMView, mMProj; // view és proj mátrixok
void constructViewMatrix(); // view mátrix összeállítása
void constructProjMatrix(); // projekciós mátrix összeállítása
void loadDefaults() override;
public:
Cam();
const XMFLOAT4X4& getViewMatrix() const; // view mátrix elkérése
const XMFLOAT4X4& getProjMatrix() const; // proj mátrix elkérése
void setProjParams(const ProjParams& pp); // projekciós paraméterek beállítása
ProjParams getProjParams() const; // vetítési paraméterek elkérése
void setViewParams(const ViewParams& vp); // nézet paramétereinek beállítása
ViewParams getViewParams() const; // nézetparaméterek elkérése
void walk(float ds); // kamera mozgatása a nézet irányába
void strafe(float ds); // kamera mozgatása a nézetre merõlegesen
void yaw(float dphi); // kamera forgatása
void pitch(float drho); // kamera billentése
const XMFLOAT3& getViewDirection() const; // nézet irányának elkérése
};
}
#endif //CAM