📄 camera.h
字号:
#ifndef _CAMERA_H
#define _CAMERA_H
#include "init.h"
#include <math.h>
// -----------------------
#include "bitmap_font.h" // kvoli vypisovaniu vektorov
// ----------------------
#define PI 3.1415926535897932384626433832795f
#define PI180 0.0174532925199432957692369076848861f // pi / 180
#define CROSSPROD(p1,p2,p3) \
p3.x = p1.y*p2.z - p1.z*p2.y; \
p3.y = p1.z*p2.x - p1.x*p2.z; \
p3.z = p1.x*p2.y - p1.y*p2.x
//typedef struct {float x,y,z;}XYZ;
struct position{
XYZ vp; // View position - pozicia pohladu (o桧)
XYZ vd; // View direction vector - smerovy vektor
XYZ vu; // View up direction - vektor zmerujuci hore - normalovy vektor hornej plochy kamery
position *next;
};
enum Mode{walk,Walk,Fly,fly,Flight,flight};
class Camera{
protected:
public:
XYZ vp; // View position - pozicia pohladu (o桧)
XYZ vd; // View direction vector - smerovy vektor
XYZ vu; // View up direction - vektor zmerujuci hore - normalovy vektor hornej plochy kamery
XYZ vr; // View right
position *stack_pointer;
void Normalise(XYZ *p); // vypocet normovaneho vektora t.j. |v|=1
void Normalise(float *x, float *y, float *z); // vypocet normovaneho vektora t.j. |v|=1
public:
// cita z mysi, a zklavesnice a otaca kamerov podla daneho modu (impicitny parameter walk)
void MoveWorld(float fps,Mode mod = walk);
// otoci sur. osi okolo bodu, pricom x a y sa berie ako vektikala a horizontalna os, z ako normalovy vektor obrazovky, zaroven posunie bod do stredu obrazovky
void AbsoluteRotate(float x, float y, float z);
// otoci ako predchadzajuce, ale presuva do zadaneho bodu
void AbsoluteRotatePoint(float x, float y, float z, float px, float py, float pz);
void AbsoluteRotateDistance(float x, float y, float z, float distance);
void RelativeRotate(float uhol,float x,float y,float z);// otoci suradnicovy sustavu okolo osi podla suradnicovej sustavy
void RelativeRotatePoint(float uhol,float x,float y,float z, float px, float py, float pz); // otoci sur. sus. okolo bodu
void RelativeTranslate(float x,float y,float z); // posunie sur. osi podla suradnicovej osi
void Translate(float x,float y,float z); // posunie sur. osi podla kamery
void WalkRotate(float x, float y, float z); // otoci kameru ako v bludisku
void FlyRotate(float x, float y, float z); // otoci kameru ako pri lietani
void DerivateMatrix(void); // vytvory z vektorov maticu
void d(void); // ----------- "" -----------
void Push(void); // ulozi vp, vd, vu do zasobnika
void Pop(void); // obnovy vp, vd, vu zo zasobnika
void Reset(void); // nastavy vp = (0,0,5) vd = (0,0,-1) s vu = (0,1,0);
Camera(void); // konstruktor - vola Reset() a nastavuje zasobnik
~Camera(void); // destruktor - maze zasobnik
float Distance(void); // vrati vzdialenost k stredu
void PrintVector(Font* font,int stlpec,int riadok); // vypise vektory na poziciu riadok, stlpec
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -