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 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