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