00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "icamera.h"
00024
00025 #include <cassert>
00026 #include <cmath>
00027
00028 using namespace sheep;
00029 using namespace toxic;
00030
00031 ICamera::ICamera(const Matrix4 &m, Real hfov, Real aspect_ratio) :
00032 Basis(m),
00033 m_location(TransformToWorld(Point3(0.0))),
00034 m_ex(TransformToWorld(Vector3(1.0, 0.0, 0.0))),
00035 m_ey(TransformToWorld(Vector3(0.0, 1.0, 0.0))),
00036 m_ez(TransformToWorld(Vector3(0.0, 0.0, 1.0))),
00037 m_hfov(hfov),
00038 m_aspect_ratio(aspect_ratio)
00039 {
00040 assert(m_hfov > -PI && m_hfov < PI);
00041
00042 m_focal_length = m_aspect_ratio / tan(0.5 * m_hfov);
00043
00044 m_u = m_ex * m_aspect_ratio;
00045 m_w = m_ez * (-m_focal_length);
00046 }