⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camera.h

📁 motion_blur using opengl
💻 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 + -