File: Camera.h

package info (click to toggle)
spring 0.81.2.1%2Bdfsg1-6
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 28,496 kB
  • ctags: 37,096
  • sloc: cpp: 238,659; ansic: 13,784; java: 12,175; awk: 3,428; python: 1,159; xml: 738; perl: 405; sh: 297; makefile: 267; pascal: 228; objc: 192
file content (73 lines) | stat: -rw-r--r-- 1,679 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// camera->h: interface for the CCamera class.
//
//////////////////////////////////////////////////////////////////////

#ifndef __CAMERA_H__
#define __CAMERA_H__

#include "Rendering/GL/myGL.h"


class CCamera
{
public:
	float3 CalcPixelDir(int x,int y);
	float3 CalcWindowCoordinates(const float3& objPos);
	void UpdateForward();
	bool InView(const float3& p,float radius=0);
	bool InView(const float3& mins, const float3& maxs);
	void Update(bool freeze, bool resetUp = true);

	CCamera();
	~CCamera();
	
	void Roll(float rad);
	void Pitch(float rad);

	float3 pos;
	float3 pos2;		//use this for calculating orthodirections (might differ from pos when calcing shadows)
	float3 rot;			//varning inte alltid uppdaterad
	float3 forward;
	float3 right;
	float3 up;
	float3 top;
	float3 bottom;
	float3 rightside;
	float3 leftside;
	float3 posOffset;
	float3 tiltOffset;
	
	float lppScale; // length-per-pixel scale
	GLdouble modelviewInverse[16];
	GLint viewport[4];

	const GLdouble* GetProjection() const;
	const GLdouble* GetModelview() const;
	const GLdouble* GetBillboard() const;
	
	static unsigned int billboardList;
	
	float GetFov() const;
	float GetHalfFov() const;
	float GetTanHalfFov() const;
	void SetFov(float fov); // in degree
	
private:
	void myGluPerspective(float, float, float);
	void myGluLookAt(const float3&, const float3&, const float3&);
	
	GLdouble projection[16];
	GLdouble modelview[16];
	GLdouble billboard[16];

	float fov; // in degrees
	float halfFov; // half the fov in radians
	float tanHalfFov; // tan(halfFov)
	
	void operator=(const CCamera& c) {}; // don't use this
};

extern CCamera* camera;
extern CCamera* cam2;

#endif // __CAMERA_H__