Imported Mat4 class from CC.
parent
66eb0364b3
commit
1fa87fb90f
|
@ -76,6 +76,7 @@ xcopy /d /y "..\..\..\..\Dev\SDL2-2.0.3\lib\x86\SDL2.dll" "$(OutDir)"</Command>
|
|||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\src\main.cpp" />
|
||||
<ClCompile Include="..\..\src\Mat4.cpp" />
|
||||
<ClCompile Include="..\..\src\RenderCamera.cpp" />
|
||||
<ClCompile Include="..\..\src\RenderObject.cpp" />
|
||||
<ClCompile Include="..\..\src\RenderScene.cpp" />
|
||||
|
@ -95,6 +96,7 @@ xcopy /d /y "..\..\..\..\Dev\SDL2-2.0.3\lib\x86\SDL2.dll" "$(OutDir)"</Command>
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\src\common.hpp" />
|
||||
<ClInclude Include="..\..\src\Mat4.hpp" />
|
||||
<ClInclude Include="..\..\src\RenderCamera.hpp" />
|
||||
<ClInclude Include="..\..\src\RenderObject.hpp" />
|
||||
<ClInclude Include="..\..\src\RenderScene.hpp" />
|
||||
|
|
|
@ -42,6 +42,9 @@
|
|||
<ClCompile Include="..\..\src\Vec.cpp">
|
||||
<Filter>Classes</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\Mat4.cpp">
|
||||
<Filter>Classes</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\..\..\Dev\SDL2-2.0.3\lib\x86\SDL2.dll">
|
||||
|
@ -73,5 +76,8 @@
|
|||
<ClInclude Include="..\..\src\Vec.hpp">
|
||||
<Filter>Classes</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Mat4.hpp">
|
||||
<Filter>Classes</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,201 @@
|
|||
/* ================================================================
|
||||
Mat4
|
||||
----------------
|
||||
This file defines the class for 4 dimensional matrices. It relies on
|
||||
Vec4 for functionality.
|
||||
================================================================ */
|
||||
#include "Mat4.hpp"
|
||||
#include <string.h> // memset
|
||||
#include <iostream>
|
||||
|
||||
Mat4::Mat4() {
|
||||
vecs[0][0] = 1.0f;
|
||||
vecs[1][1] = 1.0f;
|
||||
vecs[2][2] = 1.0f;
|
||||
vecs[3][3] = 1.0f;
|
||||
}
|
||||
Mat4::~Mat4() {}
|
||||
Mat4::Mat4(Vec4 a_, Vec4 b_, Vec4 c_, Vec4 d_) {
|
||||
vecs[0] = a_;
|
||||
vecs[1] = b_;
|
||||
vecs[2] = c_;
|
||||
vecs[3] = d_;
|
||||
}
|
||||
|
||||
float *Mat4::toFloats(float *floats) {
|
||||
int i;
|
||||
float *m = &vecs[0][0];
|
||||
for (i = 0; i < 16; i++) {
|
||||
floats[i] = m[i];
|
||||
}
|
||||
return floats;
|
||||
}
|
||||
Mat4 Mat4::getInverse(Mat4 out) {
|
||||
float *m = &vecs[0][0]; // just so my brain doesn't explode
|
||||
out[0][0] = m[5] * m[10] * m[15] -
|
||||
m[5] * m[11] * m[14] -
|
||||
m[9] * m[6] * m[15] +
|
||||
m[9] * m[7] * m[14] +
|
||||
m[13] * m[6] * m[11] -
|
||||
m[13] * m[7] * m[10];
|
||||
out[0][1] = -m[1] * m[10] * m[15] +
|
||||
m[1] * m[11] * m[14] +
|
||||
m[9] * m[2] * m[15] -
|
||||
m[9] * m[3] * m[14] -
|
||||
m[13] * m[2] * m[11] +
|
||||
m[13] * m[3] * m[10];
|
||||
out[0][2] = m[1] * m[6] * m[15] -
|
||||
m[1] * m[7] * m[14] -
|
||||
m[5] * m[2] * m[15] +
|
||||
m[5] * m[3] * m[14] +
|
||||
m[13] * m[2] * m[7] -
|
||||
m[13] * m[3] * m[6];
|
||||
out[0][3] = -m[1] * m[6] * m[11] +
|
||||
m[1] * m[7] * m[10] +
|
||||
m[5] * m[2] * m[11] -
|
||||
m[5] * m[3] * m[10] -
|
||||
m[9] * m[2] * m[7] +
|
||||
m[9] * m[3] * m[6];
|
||||
out[1][0] = -m[4] * m[10] * m[15] +
|
||||
m[4] * m[11] * m[14] +
|
||||
m[8] * m[6] * m[15] -
|
||||
m[8] * m[7] * m[14] -
|
||||
m[12] * m[6] * m[11] +
|
||||
m[12] * m[7] * m[10];
|
||||
out[1][1] = m[0] * m[10] * m[15] -
|
||||
m[0] * m[11] * m[14] -
|
||||
m[8] * m[2] * m[15] +
|
||||
m[8] * m[3] * m[14] +
|
||||
m[12] * m[2] * m[11] -
|
||||
m[12] * m[3] * m[10];
|
||||
out[1][2] = -m[0] * m[6] * m[15] +
|
||||
m[0] * m[7] * m[14] +
|
||||
m[4] * m[2] * m[15] -
|
||||
m[4] * m[3] * m[14] -
|
||||
m[12] * m[2] * m[7] +
|
||||
m[12] * m[3] * m[6];
|
||||
out[1][3] = m[0] * m[6] * m[11] -
|
||||
m[0] * m[7] * m[10] -
|
||||
m[4] * m[2] * m[11] +
|
||||
m[4] * m[3] * m[10] +
|
||||
m[8] * m[2] * m[7] -
|
||||
m[8] * m[3] * m[6];
|
||||
out[2][0] = m[4] * m[9] * m[15] -
|
||||
m[4] * m[11] * m[13] -
|
||||
m[8] * m[5] * m[15] +
|
||||
m[8] * m[7] * m[13] +
|
||||
m[12] * m[5] * m[11] -
|
||||
m[12] * m[7] * m[9];
|
||||
out[2][1] = -m[0] * m[9] * m[15] +
|
||||
m[0] * m[11] * m[13] +
|
||||
m[8] * m[1] * m[15] -
|
||||
m[8] * m[3] * m[13] -
|
||||
m[12] * m[1] * m[11] +
|
||||
m[12] * m[3] * m[9];
|
||||
out[2][2] = m[0] * m[5] * m[15] -
|
||||
m[0] * m[7] * m[13] -
|
||||
m[4] * m[1] * m[15] +
|
||||
m[4] * m[3] * m[13] +
|
||||
m[12] * m[1] * m[7] -
|
||||
m[12] * m[3] * m[5];
|
||||
out[2][3] = -m[0] * m[5] * m[11] +
|
||||
m[0] * m[7] * m[9] +
|
||||
m[4] * m[1] * m[11] -
|
||||
m[4] * m[3] * m[9] -
|
||||
m[8] * m[1] * m[7] +
|
||||
m[8] * m[3] * m[5];
|
||||
out[3][0] = -m[4] * m[9] * m[14] +
|
||||
m[4] * m[10] * m[13] +
|
||||
m[8] * m[5] * m[14] -
|
||||
m[8] * m[6] * m[13] -
|
||||
m[12] * m[5] * m[10] +
|
||||
m[12] * m[6] * m[9];
|
||||
out[3][1] = m[0] * m[9] * m[14] -
|
||||
m[0] * m[10] * m[13] -
|
||||
m[8] * m[1] * m[14] +
|
||||
m[8] * m[2] * m[13] +
|
||||
m[12] * m[1] * m[10] -
|
||||
m[12] * m[2] * m[9];
|
||||
out[3][2] = -m[0] * m[5] * m[14] +
|
||||
m[0] * m[6] * m[13] +
|
||||
m[4] * m[1] * m[14] -
|
||||
m[4] * m[2] * m[13] -
|
||||
m[12] * m[1] * m[6] +
|
||||
m[12] * m[2] * m[5];
|
||||
out[3][3] = m[0] * m[5] * m[10] -
|
||||
m[0] * m[6] * m[9] -
|
||||
m[4] * m[1] * m[10] +
|
||||
m[4] * m[2] * m[9] +
|
||||
m[8] * m[1] * m[6] -
|
||||
m[8] * m[2] * m[5];
|
||||
|
||||
float det = m[0] * out[0][0] + m[1] * out[1][0] + m[2] * out[2][0] + m[3] * out[3][0];
|
||||
//if (det == 0) return false;
|
||||
det = 1.0f / det;
|
||||
|
||||
int i;
|
||||
float *o_m = &out[0][0]; // just so my brain doesn't explode
|
||||
for (i = 0; i < 16; i++) {
|
||||
o_m[i] = o_m[i] * det;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
void Mat4::print() {
|
||||
int i;
|
||||
float *m = &vecs[0][0];
|
||||
for (i = 0; i < 16; i++) {
|
||||
std::cout << "[" << i << "]=" << m[i] << " ";
|
||||
if (i == 3 || i == 7 || i == 11 || i == 15) std::cout << std::endl;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
Mat4 Mat4::operator*(const Mat4 &mat) {
|
||||
Vec4 x(
|
||||
vecs[0][0] * mat[0][0] + vecs[1][0] * mat[0][1] + vecs[2][0] * mat[0][2] + vecs[3][0] * mat[0][3],
|
||||
vecs[0][1] * mat[0][0] + vecs[1][1] * mat[0][1] + vecs[2][1] * mat[0][2] + vecs[3][1] * mat[0][3],
|
||||
vecs[0][2] * mat[0][0] + vecs[1][2] * mat[0][1] + vecs[2][2] * mat[0][2] + vecs[3][2] * mat[0][3],
|
||||
vecs[0][3] * mat[0][0] + vecs[1][3] * mat[0][1] + vecs[2][3] * mat[0][2] + vecs[3][3] * mat[0][3]
|
||||
);
|
||||
Vec4 y(
|
||||
vecs[0][0] * mat[1][0] + vecs[1][0] * mat[1][1] + vecs[2][0] * mat[1][2] + vecs[3][0] * mat[1][3],
|
||||
vecs[0][1] * mat[1][0] + vecs[1][1] * mat[1][1] + vecs[2][1] * mat[1][2] + vecs[3][1] * mat[1][3],
|
||||
vecs[0][2] * mat[1][0] + vecs[1][2] * mat[1][1] + vecs[2][2] * mat[1][2] + vecs[3][2] * mat[1][3],
|
||||
vecs[0][3] * mat[1][0] + vecs[1][3] * mat[1][1] + vecs[2][3] * mat[1][2] + vecs[3][3] * mat[1][3]
|
||||
);
|
||||
Vec4 z(
|
||||
vecs[0][0] * mat[2][0] + vecs[1][0] * mat[2][1] + vecs[2][0] * mat[2][2] + vecs[3][0] * mat[2][3],
|
||||
vecs[0][1] * mat[2][0] + vecs[1][1] * mat[2][1] + vecs[2][1] * mat[2][2] + vecs[3][1] * mat[2][3],
|
||||
vecs[0][2] * mat[2][0] + vecs[1][2] * mat[2][1] + vecs[2][2] * mat[2][2] + vecs[3][2] * mat[2][3],
|
||||
vecs[0][3] * mat[2][0] + vecs[1][3] * mat[2][1] + vecs[2][3] * mat[2][2] + vecs[3][3] * mat[2][3]
|
||||
);
|
||||
Vec4 w(
|
||||
vecs[0][0] * mat[3][0] + vecs[1][0] * mat[3][1] + vecs[2][0] * mat[3][2] + vecs[3][0] * mat[3][3],
|
||||
vecs[0][1] * mat[3][0] + vecs[1][1] * mat[3][1] + vecs[2][1] * mat[3][2] + vecs[3][1] * mat[3][3],
|
||||
vecs[0][2] * mat[3][0] + vecs[1][2] * mat[3][1] + vecs[2][2] * mat[3][2] + vecs[3][2] * mat[3][3],
|
||||
vecs[0][3] * mat[3][0] + vecs[1][3] * mat[3][1] + vecs[2][3] * mat[3][2] + vecs[3][3] * mat[3][3]
|
||||
);
|
||||
return Mat4(x, y, z, w);
|
||||
}
|
||||
Vec4 Mat4::operator*(const Vec4 &vec) {
|
||||
return Vec4(
|
||||
vecs[0][0] * vec[0] + vecs[1][0] * vec[1] + vecs[2][0] * vec[2] + vecs[3][0] * vec[3],
|
||||
vecs[0][1] * vec[0] + vecs[1][1] * vec[1] + vecs[2][1] * vec[2] + vecs[3][1] * vec[3],
|
||||
vecs[0][2] * vec[0] + vecs[1][2] * vec[1] + vecs[2][2] * vec[2] + vecs[3][2] * vec[3],
|
||||
vecs[0][3] * vec[0] + vecs[1][3] * vec[1] + vecs[2][3] * vec[2] + vecs[3][3] * vec[3]
|
||||
);
|
||||
}
|
||||
Mat4 Mat4::operator/=(float s) {
|
||||
vecs[0] /= s;
|
||||
vecs[1] /= s;
|
||||
vecs[2] /= s;
|
||||
vecs[3] /= s;
|
||||
return *this;
|
||||
}
|
||||
const Vec4& Mat4::operator[](int index) const {
|
||||
return vecs[index];
|
||||
}
|
||||
Vec4& Mat4::operator[](int index) {
|
||||
return vecs[index];
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
/* ================================================================
|
||||
Mat4
|
||||
----------------
|
||||
This header file describes the classes for 4D matrices, yo.
|
||||
================================================================ */
|
||||
#ifndef Mat4_HPP
|
||||
#define Mat4_HPP
|
||||
#include "Vec.hpp"
|
||||
class Mat4 {
|
||||
public:
|
||||
// constructor
|
||||
Mat4();
|
||||
Mat4(const Vec4, const Vec4, const Vec4, const Vec4);
|
||||
// destructor
|
||||
~Mat4();
|
||||
// members
|
||||
Vec4 vecs[4];
|
||||
//
|
||||
void print();
|
||||
float *toFloats(float *floats);
|
||||
Mat4 getInverse(Mat4 out);
|
||||
// mul
|
||||
Mat4 operator*(const Mat4 &mat);
|
||||
Mat4 operator/=(float s);
|
||||
Vec4 operator*(const Vec4 &vec);
|
||||
// access
|
||||
const Vec4& operator[](int index) const;
|
||||
Vec4& operator[](int index);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -10,16 +10,17 @@ a Mesh, a texture, a position, and an orientation.
|
|||
#ifndef RENDEROBJECT_HPP
|
||||
#define RENDEROBJECT_HPP
|
||||
#include "common.hpp"
|
||||
#include "Vec.hpp"
|
||||
#include "Mat4.hpp"
|
||||
class RenderObject {
|
||||
public:
|
||||
RenderObject();
|
||||
~RenderObject();
|
||||
private:
|
||||
// Mesh mesh;
|
||||
// Mesh *mesh;
|
||||
// GLuint texture;
|
||||
// TODO: replace position and orientation with matrix?
|
||||
Vec3 position;
|
||||
Vec3 orientation;
|
||||
Mat4 translation;
|
||||
Mat4 rotation;
|
||||
Mat4 scale;
|
||||
Mat4 modelview;
|
||||
};
|
||||
#endif
|
Loading…
Reference in New Issue