]> git.tdb.fi Git - libs/gl.git/blobdiff - source/matrix.cpp
Drop Id tags and copyright notices from files
[libs/gl.git] / source / matrix.cpp
index d8f018aaf4835814c4736ac389f8e7426dd6279d..f5089285d63295458698e1c392511348fc34a696 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #include <algorithm>
 #include <cmath>
 #include <msp/core/except.h>
@@ -134,6 +127,25 @@ Matrix &Matrix::operator*=(const Matrix &other)
        return *this;
 }
 
+Vector4 Matrix::operator*(const Vector4 &vec) const
+{
+       if(flags==IDENTITY)
+               return vec;
+       else if(flags==TRANSLATE)
+               return Vector4(vec.x+vec.w*matrix[12], vec.y+vec.w*matrix[13], vec.z+vec.w*matrix[14], vec.w);
+       else if(flags==SCALE)
+               return Vector4(vec.x*matrix[0], vec.y*matrix[5], vec.z*matrix[10], vec.w);
+       else
+       {
+               Vector4 result;
+               result.x = vec.x*matrix[0]+vec.y*matrix[4]+vec.z*matrix[8]+vec.w*matrix[12];
+               result.y = vec.x*matrix[1]+vec.y*matrix[5]+vec.z*matrix[9]+vec.w*matrix[13];
+               result.z = vec.x*matrix[2]+vec.y*matrix[6]+vec.z*matrix[10]+vec.w*matrix[14];
+               result.w = vec.x*matrix[3]+vec.y*matrix[7]+vec.z*matrix[11]+vec.w*matrix[15];
+               return result;
+       }
+}
+
 double Matrix::operator[](unsigned i) const
 {
        if(i>=16)
@@ -256,7 +268,7 @@ Matrix Matrix::frustum_centered(double w, double h, double n, double f)
 
 Matrix Matrix::perspective(double h, double a, double n, double f)
 {
-       double hh = tan(h)*n;
+       double hh = tan(h/2)*n;
        return frustum(-hh*a, hh*a, -hh, hh, n, f);
 }
 
@@ -275,7 +287,7 @@ MatrixStack::MatrixStack():
        matrices.push_back(Matrix());
 }
 
-const Matrix &MatrixStack::top()
+const Matrix &MatrixStack::top() const
 {
        return matrices.back();
 }