]> git.tdb.fi Git - libs/gl.git/blobdiff - source/camera.cpp
Drop Id tags and copyright notices from files
[libs/gl.git] / source / camera.cpp
index ad1a3e946a1055c5367fc4a9c4592e171c90dfc1..98b7598ca16ffa011d1849881ac0d67117bff45f 100644 (file)
@@ -1,14 +1,6 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2010  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #include <cmath>
 #include "camera.h"
 #include "matrix.h"
-#include "projection.h"
 
 namespace Msp {
 namespace GL {
@@ -21,11 +13,7 @@ Camera::Camera():
        position(0, 0, 0),
        look_dir(0, 0, -1),
        up_dir(0, 1, 0)
-{
-       for(unsigned i=0; i<16; ++i)
-               matrix[i] = (i%5 ? 0 : 1);
-       matrix[10] = -1;
-}
+{ }
 
 void Camera::set_field_of_view(float f)
 {
@@ -108,14 +96,8 @@ Vector4 Camera::unproject(const Vector4 &p) const
 
 void Camera::apply() const
 {
-       float h = tan(fov/2)*2*clip_near;
-
-       matrix_mode(PROJECTION);
-       load_identity();
-       frustum_centered(h*aspect, h, clip_near, clip_far);
-
-       matrix_mode(MODELVIEW);
-       load_matrix(matrix);
+       MatrixStack::projection() = Matrix::perspective(fov, aspect, clip_near, clip_far);
+       MatrixStack::modelview() = matrix;
 }
 
 void Camera::compute_matrix()
@@ -124,22 +106,30 @@ void Camera::compute_matrix()
        float y = look_dir.z*up_dir.x-look_dir.x*up_dir.z;
        float z = look_dir.x*up_dir.y-look_dir.y*up_dir.x;
        float len = sqrt(x*x+y*y+z*z);
+       double mdata[16];
+
+       mdata[0] = x/len;
+       mdata[4] = y/len;
+       mdata[8] = z/len;
+
+       mdata[1] = mdata[4]*look_dir.z-mdata[8]*look_dir.y;
+       mdata[5] = mdata[8]*look_dir.x-mdata[0]*look_dir.z;
+       mdata[9] = mdata[0]*look_dir.y-mdata[4]*look_dir.x;
 
-       matrix[0] = x/len;
-       matrix[4] = y/len;
-       matrix[8] = z/len;
+       mdata[2] = -look_dir.x;
+       mdata[6] = -look_dir.y;
+       mdata[10] = -look_dir.z;
 
-       matrix[1] = matrix[4]*look_dir.z-matrix[8]*look_dir.y;
-       matrix[5] = matrix[8]*look_dir.x-matrix[0]*look_dir.z;
-       matrix[9] = matrix[0]*look_dir.y-matrix[4]*look_dir.x;
+       mdata[12] = -position.x*mdata[0]-position.y*mdata[4]-position.z*mdata[8];
+       mdata[13] = -position.x*mdata[1]-position.y*mdata[5]-position.z*mdata[9];
+       mdata[14] = -position.x*mdata[2]-position.y*mdata[6]-position.z*mdata[10];
 
-       matrix[2] = -look_dir.x;
-       matrix[6] = -look_dir.y;
-       matrix[10] = -look_dir.z;
+       mdata[3] = 0;
+       mdata[7] = 0;
+       mdata[11] = 0;
+       mdata[15] = 1;
 
-       matrix[12] = -position.x*matrix[0]-position.y*matrix[4]-position.z*matrix[8];
-       matrix[13] = -position.x*matrix[1]-position.y*matrix[5]-position.z*matrix[9];
-       matrix[14] = -position.x*matrix[2]-position.y*matrix[6]-position.z*matrix[10];
+       matrix = mdata;
 }
 
 } // namespace GL