X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fmatrix.h;h=2e1096f5f4586d7f6c05ea0620f59a5425b4b450;hp=539a613e6966087fbe47cb2002227a41bd7d57b5;hb=HEAD;hpb=4f8c3fd99d21b455e83d2d315be60669b2afc122 diff --git a/source/matrix.h b/source/matrix.h deleted file mode 100644 index 539a613e..00000000 --- a/source/matrix.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef MSP_GL_MATRIX_H_ -#define MSP_GL_MATRIX_H_ - -#include -#include -#include -#include "gl.h" -#include "vector.h" - -namespace Msp { -namespace GL { - -class Matrix: public LinAl::SquareMatrix -{ -private: - typedef LinAl::SquareMatrix Base; - typedef Geometry::Angle Angle; - -public: - Matrix(); - Matrix(const float *); - Matrix(const double *); - Matrix(const LinAl::Matrix &); - - const double *data() const { return &Base::operator()(0, 0); } - - void multiply(const Matrix &); - void translate(double x, double y, double z) { translate(Vector3(x, y, z)); } - void translate(const Vector3 &); - void rotate(const Angle &a, double x, double y, double z) { rotate(a, Vector3(x, y, z)); } - void rotate(const Angle &, const Vector3 &); - void rotate(double a, double x, double y, double z) { rotate(Angle::from_radians(a), Vector3(x, y, z)); } - void rotate(double a, const Vector3 &x) { rotate(Angle::from_radians(a), x); } - void rotate_deg(double a, double x, double y, double z) { rotate(Angle::from_degrees(a), Vector3(x, y, z)); } - void rotate_deg(double a, const Vector3 & x) { rotate(Angle::from_degrees(a), x); } - void scale(double s) { scale(Vector3(s, s, s)); } - void scale(double x, double y, double z) { scale(Vector3(x, y, z)); } - void scale(const Vector3 &); - - Matrix operator*(const Matrix &) const; - Matrix &operator*=(const Matrix &); - Vector4 operator*(const Vector4 &) const; - Vector3 operator*(const Vector3 &) const; - double operator[](unsigned) const; - - static Matrix translation(double x, double y, double z) { return translation(Vector3(x, y, z)); } - static Matrix translation(const Vector3 &); - static Matrix rotation(const Angle &a, double x, double y, double z) { return rotation(a, Vector3(x, y, z)); } - static Matrix rotation(const Angle &, const Vector3 &); - static Matrix rotation(double a, double x, double y, double z) { return rotation(Angle::from_radians(a), Vector3(x, y, z)); } - static Matrix rotation(double a, const Vector3 &x) { return rotation(Angle::from_radians(a), x); } - static Matrix rotation_deg(double a, double x, double y, double z) { return rotation(Angle::from_degrees(a), Vector3(x, y, z)); } - static Matrix rotation_deg(double a, const Vector3 &x) { return rotation(Angle::from_degrees(a), x); } - static Matrix scaling(double s) { return scaling(Vector3(s, s, s)); } - static Matrix scaling(double x, double y, double z) { return scaling(Vector3(x, y, z)); } - static Matrix scaling(const Vector3 &); - - static Matrix ortho(double, double, double, double, double, double); - static Matrix ortho_centered(double, double); - static Matrix ortho_bottomleft(double, double); - static Matrix ortho_topleft(double, double); - static Matrix frustum(double, double, double, double, double, double); - static Matrix frustum_centered(double, double, double, double); - static Matrix perspective(double, double, double, double); -}; - -class MatrixStack -{ -public: - class Push - { - private: - MatrixStack &stack; - - public: - Push(MatrixStack &s): stack(s) { stack.push(); } - ~Push() { stack.pop(); } - }; - -private: - GLenum mode; - std::vector matrices; - - static GLenum current_mode; - - MatrixStack(const MatrixStack &); - MatrixStack &operator=(const MatrixStack &); - MatrixStack(GLenum); -public: - MatrixStack(); - - const Matrix &top() const; - void load(const Matrix &); - void multiply(const Matrix &); - void push(); - void pop(); -private: - virtual void update(); - -public: - MatrixStack &operator=(const Matrix &); - MatrixStack &operator*=(const Matrix &); - - static MatrixStack &modelview(); - static MatrixStack &projection(); -}; - -} // namespace GL -} // namespace Msp - -#endif