| 12
 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
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 
 |  
#include <Engine/Camera.hpp>
 
// Vector as param for position
Camera::Camera(Vector3D<float> Pos) : m_DefaultFocus(0.0, 0.0, 0.0 ), m_Orientation(0.0, 1.0, 0.0), m_Focalisation(&m_DefaultFocus) , m_Position( Pos.x, Pos.y, Pos.z )
{
 
}
 
// Float's as param for position
Camera::Camera(float x, float y, float z ) : m_DefaultFocus(0.0, 0.0, 0.0 ), m_Orientation(0.0, 1.0, 0.0), m_Focalisation(&m_DefaultFocus) , m_Position( x, y, z )
{
 
}
 
Camera::~Camera()
{
 
 
}
 
void Camera::SetPosition(Vector3D<float> Position)
{
	m_Position = Position ;
}
 
void Camera::SetOrientation(Vector3D<float> Orientation)
{
	m_Orientation = Orientation ;
}
 
void Camera::SetFocalisation(Vector3D<float> * Focalisation)
{
	m_Focalisation = Focalisation ;
}
 
// Set the camera in the openGL scene.
void Camera::Focalize()
{
	gluLookAt( m_Position.x, m_Position.y , m_Position.z ,
			   m_Focalisation->x, m_Focalisation->y, m_Focalisation->z,
			   m_Orientation.x, m_Orientation.y, m_Orientation.z );	
}
 
// Move closer or away from the focalisation source.
// Dist = distance from the source. ( >=0 )
void Camera::Distance(float Dist)
{
	Vector3D<float> Temp = m_Position - *m_Focalisation ;
	float Norm = Temp.Length() ;
 
	m_Position.x = (Dist/Norm)*(m_Position.x - m_Focalisation->x) + m_Focalisation->x ;
	m_Position.y = (Dist/Norm)*(m_Position.y - m_Focalisation->y) + m_Focalisation->y ;
	m_Position.z = (Dist/Norm)*(m_Position.z - m_Focalisation->z) + m_Focalisation->z ;
}
 
// Move closer or away from the focalisation source.
// Dist = distance from the actual position of camera
void Camera::DistanceOffset( float Dist)
{
	Vector3D<float> Temp = m_Position - *m_Focalisation ;
	float Norm = Temp.Length() ;
 
	// Dont go behind the focus !
	if ( Norm + Dist >= 0.0 )
	{
		m_Position.x = (Dist/Norm)*(m_Position.x - m_Focalisation->x) + m_Position.x ;
		m_Position.y = (Dist/Norm)*(m_Position.y - m_Focalisation->y) + m_Position.y ;
		m_Position.z = (Dist/Norm)*(m_Position.z - m_Focalisation->z) + m_Position.z ;
	}
 
}
 
// Rotation on the y axis
// Angle is in degree
void Camera::RotationY(float Angle)
{
	// Set Angle in Rad.
	Angle = static_cast<float>( (Angle/180)*M_PI );
 
	m_Position.x = (m_Position.x - m_Focalisation->x)*cosf(Angle) - (m_Position.z - m_Focalisation->z)*sinf(Angle) + m_Focalisation->x  ;
	//m_Position.y = 0 ;
	m_Position.z = (m_Position.x - m_Focalisation->x)*sinf(Angle) + (m_Position.z - m_Focalisation->z)*cosf(Angle) + m_Focalisation->z ;
 
} | 
Partager