www.pudn.com > 3dterrain.zip > Camera.h
#ifndef _CAMERA_H #define _CAMERA_H #include "init.h" #include// ----------------------- #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; bool zmena; 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