Added missing camera directory.
This commit is contained in:
parent
cea8d4ea03
commit
af9286fbc9
117
camera/Camera.cpp
Normal file
117
camera/Camera.cpp
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include "Camera.h"
|
||||||
|
|
||||||
|
void Camera::Init()
|
||||||
|
{
|
||||||
|
m_yaw = 0.0;
|
||||||
|
m_pitch = 0.0;
|
||||||
|
|
||||||
|
SetPos(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::Refresh()
|
||||||
|
{
|
||||||
|
// Camera parameter according to Riegl's co-ordinate system
|
||||||
|
// x/y for flat, z for height
|
||||||
|
m_lx = cos(m_yaw) * cos(m_pitch);
|
||||||
|
m_ly = sin(m_pitch);
|
||||||
|
m_lz = sin(m_yaw) * cos(m_pitch);
|
||||||
|
|
||||||
|
m_strafe_lx = cos(m_yaw - M_PI_2);
|
||||||
|
m_strafe_lz = sin(m_yaw - M_PI_2);
|
||||||
|
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
gluLookAt(m_x, m_y, m_z, m_x + m_lx, m_y + m_ly, m_z + m_lz, 0.0,1.0,0.0);
|
||||||
|
|
||||||
|
printf("Camera: %f %f %f Direction vector: %f %f %f\n", m_x, m_y, m_z, m_lx, m_ly, m_lz);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::SetPos(float x, float y, float z)
|
||||||
|
{
|
||||||
|
m_x = x;
|
||||||
|
m_y = y;
|
||||||
|
m_z =z;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::GetPos(float &x, float &y, float &z)
|
||||||
|
{
|
||||||
|
x = m_x;
|
||||||
|
y = m_y;
|
||||||
|
z = m_z;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::GetDirectionVector(float &x, float &y, float &z)
|
||||||
|
{
|
||||||
|
x = m_lx;
|
||||||
|
y = m_ly;
|
||||||
|
z = m_lz;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::Move(float incr)
|
||||||
|
{
|
||||||
|
float lx = cos(m_yaw)*cos(m_pitch);
|
||||||
|
float ly = sin(m_pitch);
|
||||||
|
float lz = sin(m_yaw)*cos(m_pitch);
|
||||||
|
|
||||||
|
m_x = m_x + incr*lx;
|
||||||
|
m_y = m_y + incr*ly;
|
||||||
|
m_z = m_z + incr*lz;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::Strafe(float incr)
|
||||||
|
{
|
||||||
|
m_x = m_x + incr*m_strafe_lx;
|
||||||
|
m_z = m_z + incr*m_strafe_lz;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::Fly(float incr)
|
||||||
|
{
|
||||||
|
m_y = m_y + incr;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::RotateYaw(float angle)
|
||||||
|
{
|
||||||
|
m_yaw += angle;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::RotatePitch(float angle)
|
||||||
|
{
|
||||||
|
const float limit = 89.0 * M_PI / 180.0;
|
||||||
|
|
||||||
|
m_pitch += angle;
|
||||||
|
|
||||||
|
if(m_pitch < -limit)
|
||||||
|
m_pitch = -limit;
|
||||||
|
|
||||||
|
if(m_pitch > limit)
|
||||||
|
m_pitch = limit;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::SetYaw(float angle)
|
||||||
|
{
|
||||||
|
m_yaw = angle;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::SetPitch(float angle)
|
||||||
|
{
|
||||||
|
m_pitch = angle;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
36
camera/Camera.h
Normal file
36
camera/Camera.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef __CAMERA_H__
|
||||||
|
#define __CAMERA_H__
|
||||||
|
|
||||||
|
/*
|
||||||
|
Generic camera class by Nghia Ho
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Camera
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Camera() { Init(); }
|
||||||
|
~Camera(){}
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
void Refresh();
|
||||||
|
void SetPos(float x, float y, float z);
|
||||||
|
void GetPos(float &x, float &y, float &z);
|
||||||
|
void GetDirectionVector(float &x, float &y, float &z);
|
||||||
|
void SetYaw(float angle);
|
||||||
|
void SetPitch(float angle);
|
||||||
|
|
||||||
|
// Navigation
|
||||||
|
void Move(float incr);
|
||||||
|
void Strafe(float incr);
|
||||||
|
void Fly(float incr);
|
||||||
|
void RotateYaw(float angle);
|
||||||
|
void RotatePitch(float angle);
|
||||||
|
|
||||||
|
private:
|
||||||
|
float m_x, m_y, m_z; // Position
|
||||||
|
float m_lx, m_ly, m_lz; // Direction vector of where we are looking at
|
||||||
|
float m_yaw, m_pitch; // Various rotation angles
|
||||||
|
float m_strafe_lx, m_strafe_lz; // Always 90 degree to direction vector
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user