// // Created by Epagris on 2020. 03. 16.. // #ifndef CAM #define CAM #include #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