cgal/Tutorial/tutorial/Polyhedron/Qt/Subdivision/tool/Camera.h

84 lines
2.3 KiB
C++

///////////////////////////////////////////////////////////////////////////
// //
// Class: CCamera //
// //
// Camera class to represent virtual cameras. //
// //
///////////////////////////////////////////////////////////////////////////
#ifndef _CAMERA_
#define _CAMERA_
#include "Quaternion.h"
#include "Vector3d.h"
class CViewport;
class CCamera
{
private :
protected:
CVector3d position;
float radAngle;
CVector3d rotAxis;
float heightAngle;
float nearDistance;
float farDistance;
public :
// Constructor
CCamera() { }
CCamera(const CVector3d& p) { SetPosition(p); }
CCamera(CCamera& c) { Set(c); }
CCamera(CCamera *pC) { Set(pC); }
~CCamera() { }
// Data setting
void Set(CCamera& c);
void Set(CCamera *pC);
void SetPosition(const CVector3d& p)
{ position = p; }
void SetPosition(const float x, const float y, const float z)
{ position.Set(x,y,z); }
void SetOrientation(float ax, float ay, float az, float ra)
{ rotAxis.Set(ax,ay,az); radAngle = ra; }
void SetHeightAngle(const float ha)
{ heightAngle = ha; }
void SetNearDistance(const float nd)
{ nearDistance = nd; }
void SetFarDistance(const float fd)
{ farDistance = fd; }
// Data access
CVector3d GetPosition() const { return position; }
CVector3d GetOrientationAxis() const { return rotAxis; }
float GetOrientationAngle() const { return radAngle; }
float GetHeightAngle() const { return heightAngle; }
float GetNearDistance() const { return nearDistance; }
float GetFarDistance() const { return farDistance; }
// Coordinate Vectors
CVector3d GetRight();
CVector3d GetUp();
CVector3d GetToward();
// Ray Casting
CVector3d GetRayDirection(int x, int y, CViewport *vp);
// Viewing
void ViewAll(float xMin, float xMax,
float yMin, float yMax,
float zMin, float zMax,
CViewport *vp);
// OpenGL
void glDraw(CViewport *vp) const;
};
#endif // _CAMERA_