updated Matrix, Transform, main Makefile
git-svn-id: svn://anubis/fart/trunk@7 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
parent
838c1b644a
commit
997a8f12d1
1
Makefile
1
Makefile
@ -8,6 +8,7 @@ endif
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
.PHONY: $(TARGET)
|
||||
$(TARGET):
|
||||
make -C util
|
||||
make -C shapes
|
||||
|
44
util/Matrix.cc
Normal file
44
util/Matrix.cc
Normal file
@ -0,0 +1,44 @@
|
||||
|
||||
#include "Matrix.h"
|
||||
|
||||
Matrix Matrix::identity()
|
||||
{
|
||||
Matrix res;
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
res[i][j] = i == j ? 1.0 : 0.0;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
Matrix operator*(const Matrix & m1, const Matrix & m2)
|
||||
{
|
||||
Matrix res;
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
res[i][j] = m1[i][0] * m2[0][j]
|
||||
+ m1[i][1] * m2[1][j]
|
||||
+ m1[i][2] * m2[2][j]
|
||||
+ m1[i][3] * m2[3][j];
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
Vector operator*(const Matrix & m, const Vector & v)
|
||||
{
|
||||
Vector res;
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
res[i] = m[i][0] * v[0]
|
||||
+ m[i][1] * v[1]
|
||||
+ m[i][2] * v[2]
|
||||
+ m[i][3]; /* v[3] is implicitly 1.0 */
|
||||
}
|
||||
return res;
|
||||
}
|
23
util/Matrix.h
Normal file
23
util/Matrix.h
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
#ifndef MATRIX_H
|
||||
#define MATRIX_H MATRIX_H
|
||||
|
||||
#include "Vector.h"
|
||||
|
||||
class Matrix
|
||||
{
|
||||
public:
|
||||
typedef double Matrix_row_t[4];
|
||||
Matrix_row_t & operator[](int idx) { return m_matrix[idx]; }
|
||||
const Matrix_row_t & operator[](int idx) const { return m_matrix[idx]; }
|
||||
static Matrix identity();
|
||||
|
||||
protected:
|
||||
double m_matrix[4][4];
|
||||
};
|
||||
|
||||
Matrix operator*(const Matrix & m1, const Matrix & m2);
|
||||
Vector operator*(const Matrix & m, const Vector & v);
|
||||
|
||||
#endif
|
||||
|
12
util/Transform.cc
Normal file
12
util/Transform.cc
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
#include "Transform.h"
|
||||
|
||||
void Transform::push()
|
||||
{
|
||||
m_matrices.push(m_matrices.top());
|
||||
}
|
||||
|
||||
void Transform::pop()
|
||||
{
|
||||
m_matrices.pop();
|
||||
}
|
19
util/Transform.h
Normal file
19
util/Transform.h
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
#ifndef TRANSFORM_H
|
||||
#define TRANSFORM_H TRANSFORM_H
|
||||
|
||||
#include "Matrix.h"
|
||||
#include <stack>
|
||||
|
||||
class Transform
|
||||
{
|
||||
public:
|
||||
void push();
|
||||
void pop();
|
||||
|
||||
protected:
|
||||
std::stack<Matrix> m_matrices;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user