73 lines
2.1 KiB
C++
73 lines
2.1 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
|
|
};
|
|
|
|
}
|
|
|
|
|
|
#endif //CAM
|