summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <xdotftw@gmail.com>2014-03-11 17:32:33 +0100
committerandrew <xdotftw@gmail.com>2014-03-11 17:33:31 +0100
commit9810d57a394b2bb56fbcfddb05d34dcd504a7b35 (patch)
tree0c6af0ac30ad95538aae5e502d9c7d72e3f7ae3c
parentLineCoeff Doc (diff)
downloadcuberite-9810d57a394b2bb56fbcfddb05d34dcd504a7b35.tar
cuberite-9810d57a394b2bb56fbcfddb05d34dcd504a7b35.tar.gz
cuberite-9810d57a394b2bb56fbcfddb05d34dcd504a7b35.tar.bz2
cuberite-9810d57a394b2bb56fbcfddb05d34dcd504a7b35.tar.lz
cuberite-9810d57a394b2bb56fbcfddb05d34dcd504a7b35.tar.xz
cuberite-9810d57a394b2bb56fbcfddb05d34dcd504a7b35.tar.zst
cuberite-9810d57a394b2bb56fbcfddb05d34dcd504a7b35.zip
-rw-r--r--src/Bindings/AllToLua.pkg1
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/Entities/Entity.cpp2
-rw-r--r--src/Matrix4.h228
-rw-r--r--src/Matrix4f.cpp4
-rw-r--r--src/Matrix4f.h225
-rw-r--r--src/Vector3.h2
7 files changed, 230 insertions, 233 deletions
diff --git a/src/Bindings/AllToLua.pkg b/src/Bindings/AllToLua.pkg
index 302714318..1cd7c74f8 100644
--- a/src/Bindings/AllToLua.pkg
+++ b/src/Bindings/AllToLua.pkg
@@ -63,7 +63,6 @@ $cfile "../BlockEntities/MobHeadEntity.h"
$cfile "../BlockEntities/FlowerPotEntity.h"
$cfile "../WebAdmin.h"
$cfile "../Root.h"
-$cfile "../Matrix4f.h"
$cfile "../Cuboid.h"
$cfile "../BoundingBox.h"
$cfile "../Tracer.h"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 04736c2d7..0f8700692 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -62,7 +62,6 @@ if (NOT MSVC)
Inventory.h
Item.h
ItemGrid.h
- Matrix4f.h
Mobs/Monster.h
OSSupport/File.h
Root.h
diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp
index 96e8c15a5..0750ae05e 100644
--- a/src/Entities/Entity.cpp
+++ b/src/Entities/Entity.cpp
@@ -4,7 +4,7 @@
#include "../World.h"
#include "../Server.h"
#include "../Root.h"
-#include "../Matrix4f.h"
+#include "../Matrix4.h"
#include "../ClientHandle.h"
#include "../Chunk.h"
#include "../Simulator/FluidSimulator.h"
diff --git a/src/Matrix4.h b/src/Matrix4.h
new file mode 100644
index 000000000..14ccb94fd
--- /dev/null
+++ b/src/Matrix4.h
@@ -0,0 +1,228 @@
+
+#pragma once
+
+
+
+
+#include <math.h>
+
+
+
+
+
+template <typename T>
+// tolua_begin
+class Matrix4
+{
+
+ TOLUA_TEMPLATE_BIND((T, float, double))
+
+ // tolua_end
+
+public:
+
+ T cell[16];
+
+ enum
+ {
+ TX=3, TY=7, TZ=11,
+ D0=0, D1=5, D2=10, D3=15,
+ SX=D0, SY=D1, SZ=D2,
+ W=D3
+ };
+
+ // tolua_begin
+
+ inline Matrix4(void)
+ {
+ Identity();
+ }
+
+ inline Matrix4(const Matrix4 & a_Rhs)
+ {
+ *this = a_Rhs;
+ }
+
+ inline Matrix4 & operator = (const Matrix4 & a_Rhs)
+ {
+ for (unsigned int i = 0; i < 16; ++i)
+ {
+ cell[i] = a_Rhs.cell[i];
+ }
+ return *this;
+ }
+
+ inline T & operator [] (int a_N)
+ {
+ ASSERT(a_N < 16);
+ return cell[a_N];
+ }
+
+ inline void Identity()
+ {
+ cell[1] = cell[2] = cell[TX] = cell[4] = cell[6] = cell[TY] =
+ cell[8] = cell[9] = cell[TZ] = cell[12] = cell[13] = cell[14] = 0;
+ cell[D0] = cell[D1] = cell[D2] = cell[W] = 1;
+ }
+
+ inline void Init(const Vector3<T> & a_Pos, T a_RX, T a_RY, T a_RZ)
+ {
+ Matrix4<T> t;
+ t.RotateX(a_RZ);
+ RotateY(a_RY);
+ Concatenate(t);
+ t.RotateZ(a_RX);
+ Concatenate(t);
+ Translate(a_Pos);
+ }
+
+ inline void RotateX(T a_RX)
+ {
+ T sx = (T) sin(a_RX * M_PI / 180);
+ T cx = (T) cos(a_RX * M_PI / 180);
+
+ Identity();
+
+ cell[5] = cx, cell[6] = sx, cell[9] = -sx, cell[10] = cx;
+ }
+
+ inline void RotateY(T a_RY)
+ {
+ T sy = (T) sin(a_RY * M_PI / 180);
+ T cy = (T) cos(a_RY * M_PI / 180);
+
+ Identity();
+
+ cell[0] = cy, cell[2] = -sy, cell[8] = sy, cell[10] = cy;
+ }
+
+ inline void RotateZ(T a_RZ)
+ {
+ T sz = (T) sin(a_RZ * M_PI / 180);
+ T cz = (T) cos(a_RZ * M_PI / 180);
+
+ Identity();
+
+ cell[0] = cz; cell[1] = sz;
+ cell[4] = -sz; cell[5] = cz;
+ }
+
+ inline void Translate(const Vector3<T> & a_Pos)
+ {
+ cell[TX] += a_Pos.x;
+ cell[TY] += a_Pos.y;
+ cell[TZ] += a_Pos.z;
+ }
+
+ inline void SetTranslation(const Vector3<T> & a_Pos)
+ {
+ cell[TX] = a_Pos.x;
+ cell[TY] = a_Pos.y;
+ cell[TZ] = a_Pos.z;
+ }
+
+ inline void Concatenate(const Matrix4 & m2)
+ {
+ Matrix4 res;
+
+ for (unsigned int c = 0; c < 4; ++c)
+ {
+ for (unsigned int r = 0; r < 4; ++r)
+ {
+ res.cell[r * 4 + c] = (
+ cell[r * 4] * m2.cell[c] +
+ cell[r * 4 + 1] * m2.cell[c + 4] +
+ cell[r * 4 + 2] * m2.cell[c + 8] +
+ cell[r * 4 + 3] * m2.cell[c + 12]
+ );
+ }
+ }
+
+ *this = res;
+ }
+
+ inline Vector3<T> Transform(const Vector3<T> & v) const
+ {
+ T x = cell[0] * v.x + cell[1] * v.y + cell[2] * v.z + cell[3];
+ T y = cell[4] * v.x + cell[5] * v.y + cell[6] * v.z + cell[7];
+ T z = cell[8] * v.x + cell[9] * v.y + cell[10] * v.z + cell[11];
+
+ return Vector3<T>(x, y, z);
+ }
+
+ inline void Invert(void)
+ {
+ Matrix4 t;
+
+ T tx = -cell[3];
+ T ty = -cell[7];
+ T tz = -cell[11];
+
+ for (unsigned int h = 0; h < 3; ++h)
+ {
+ for (unsigned int v = 0; v < 3; ++v)
+ {
+ t.cell[h + v * 4] = cell[v + h * 4];
+ }
+ }
+
+ for (unsigned int i = 0; i < 11; ++i)
+ {
+ cell[i] = t.cell[i];
+ }
+
+ cell[3] = tx * cell[0] + ty * cell[1] + tz * cell[2];
+ cell[7] = tx * cell[4] + ty * cell[5] + tz * cell[6];
+ cell[11] = tx * cell[8] + ty * cell[9] + tz * cell[10];
+ }
+
+ inline Vector3<T> GetXColumn(void) const
+ {
+ return Vector3<T>(cell[0], cell[1], cell[2]);
+ }
+
+ inline Vector3<T> GetYColumn(void) const
+ {
+ return Vector3<T>(cell[4], cell[5], cell[6]);
+ }
+
+ inline Vector3<T> GetZColumn(void) const
+ {
+ return Vector3<T>(cell[8], cell[9], cell[10]);
+ }
+
+ inline void SetXColumn(const Vector3<T> & a_X)
+ {
+ cell[0] = a_X.x;
+ cell[1] = a_X.y;
+ cell[2] = a_X.z;
+ }
+
+ inline void SetYColumn(const Vector3<T> & a_Y)
+ {
+ cell[4] = a_Y.x;
+ cell[5] = a_Y.y;
+ cell[6] = a_Y.z;
+ }
+
+ inline void SetZColumn(const Vector3<T> & a_Z)
+ {
+ cell[8] = a_Z.x;
+ cell[9] = a_Z.y;
+ cell[10] = a_Z.z;
+ }
+};
+// tolua_end
+
+
+
+
+// tolua_begin
+typedef Matrix4<double> Matrix4d;
+typedef Matrix4<float> Matrix4f;
+// tolua_end
+
+
+
+
+
diff --git a/src/Matrix4f.cpp b/src/Matrix4f.cpp
deleted file mode 100644
index d0a407a99..000000000
--- a/src/Matrix4f.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-
-#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
-
-// _X: empty file??
diff --git a/src/Matrix4f.h b/src/Matrix4f.h
deleted file mode 100644
index 0e36974ad..000000000
--- a/src/Matrix4f.h
+++ /dev/null
@@ -1,225 +0,0 @@
-#pragma once
-
-#define _USE_MATH_DEFINES
-#include <math.h>
-#include "Vector3.h"
-
-class Matrix4f
-{
-public:
- enum
- {
- TX=3,
- TY=7,
- TZ=11,
- D0=0, D1=5, D2=10, D3=15,
- SX=D0, SY=D1, SZ=D2,
- W=D3
- };
- Matrix4f() { Identity(); }
- float& operator [] ( int a_N ) { return cell[a_N]; }
- void Identity()
- {
- cell[1] = cell[2] = cell[TX] = cell[4] = cell[6] = cell[TY] =
- cell[8] = cell[9] = cell[TZ] = cell[12] = cell[13] = cell[14] = 0;
- cell[D0] = cell[D1] = cell[D2] = cell[W] = 1;
- }
- void Init( Vector3f a_Pos, float a_RX, float a_RY, float a_RZ )
- {
- Matrix4f t;
- t.RotateX( a_RZ );
- RotateY( a_RY );
- Concatenate( t );
- t.RotateZ( a_RX );
- Concatenate( t );
- Translate( a_Pos );
- }
- void RotateX( float a_RX )
- {
- float sx = (float)sin( a_RX * M_PI / 180 );
- float cx = (float)cos( a_RX * M_PI / 180 );
- Identity();
- cell[5] = cx, cell[6] = sx, cell[9] = -sx, cell[10] = cx;
- }
- void RotateY( float a_RY )
- {
- float sy = (float)sin( a_RY * M_PI / 180 );
- float cy = (float)cos( a_RY * M_PI / 180 );
- Identity ();
- cell[0] = cy, cell[2] = -sy, cell[8] = sy, cell[10] = cy;
- }
- void RotateZ( float a_RZ )
- {
- float sz = (float)sin( a_RZ * M_PI / 180 );
- float cz = (float)cos( a_RZ * M_PI / 180 );
- Identity ();
- cell[0] = cz, cell[1] = sz, cell[4] = -sz, cell[5] = cz;
- }
- void Translate( Vector3f a_Pos ) { cell[TX] += a_Pos.x; cell[TY] += a_Pos.y; cell[TZ] += a_Pos.z; }
- void SetTranslation( Vector3f a_Pos ) { cell[TX] = a_Pos.x; cell[TY] = a_Pos.y; cell[TZ] = a_Pos.z; }
- void Concatenate( const Matrix4f& m2 )
- {
- Matrix4f res;
- int c;
- for ( c = 0; c < 4; c++ ) for ( int r = 0; r < 4; r++ )
- res.cell[r * 4 + c] = cell[r * 4] * m2.cell[c] +
- cell[r * 4 + 1] * m2.cell[c + 4] +
- cell[r * 4 + 2] * m2.cell[c + 8] +
- cell[r * 4 + 3] * m2.cell[c + 12];
- for ( c = 0; c < 16; c++ ) cell[c] = res.cell[c];
- }
- Vector3f Transform( const Vector3f& v ) const
- {
- float x = cell[0] * v.x + cell[1] * v.y + cell[2] * v.z + cell[3];
- float y = cell[4] * v.x + cell[5] * v.y + cell[6] * v.z + cell[7];
- float z = cell[8] * v.x + cell[9] * v.y + cell[10] * v.z + cell[11];
- return Vector3f( x, y, z );
- }
- void Invert()
- {
- Matrix4f t;
- int h, i;
- float tx = -cell[3], ty = -cell[7], tz = -cell[11];
- for ( h = 0; h < 3; h++ ) for ( int v = 0; v < 3; v++ ) t.cell[h + v * 4] = cell[v + h * 4];
- for ( i = 0; i < 11; i++ ) cell[i] = t.cell[i];
- cell[3] = tx * cell[0] + ty * cell[1] + tz * cell[2];
- cell[7] = tx * cell[4] + ty * cell[5] + tz * cell[6];
- cell[11] = tx * cell[8] + ty * cell[9] + tz * cell[10];
- }
- Vector3f GetXColumn() { return Vector3f( cell[0], cell[1], cell[2] ); }
- Vector3f GetYColumn() { return Vector3f( cell[4], cell[5], cell[6] ); }
- Vector3f GetZColumn() { return Vector3f( cell[8], cell[9], cell[10] ); }
- void SetXColumn( const Vector3f & a_X )
- {
- cell[0] = a_X.x;
- cell[1] = a_X.y;
- cell[2] = a_X.z;
- }
- void SetYColumn( const Vector3f & a_Y )
- {
- cell[4] = a_Y.x;
- cell[5] = a_Y.y;
- cell[6] = a_Y.z;
- }
- void SetZColumn( const Vector3f & a_Z )
- {
- cell[8] = a_Z.x;
- cell[9] = a_Z.y;
- cell[10] = a_Z.z;
- }
- float cell[16];
-};
-
-
-
-
-
-class Matrix4d
-{
-public:
- enum
- {
- TX=3,
- TY=7,
- TZ=11,
- D0=0, D1=5, D2=10, D3=15,
- SX=D0, SY=D1, SZ=D2,
- W=D3
- };
- Matrix4d() { Identity(); }
- double& operator [] ( int a_N ) { return cell[a_N]; }
- void Identity()
- {
- cell[1] = cell[2] = cell[TX] = cell[4] = cell[6] = cell[TY] =
- cell[8] = cell[9] = cell[TZ] = cell[12] = cell[13] = cell[14] = 0;
- cell[D0] = cell[D1] = cell[D2] = cell[W] = 1;
- }
- void Init( Vector3f a_Pos, double a_RX, double a_RY, double a_RZ )
- {
- Matrix4d t;
- t.RotateX( a_RZ );
- RotateY( a_RY );
- Concatenate( t );
- t.RotateZ( a_RX );
- Concatenate( t );
- Translate( a_Pos );
- }
- void RotateX( double a_RX )
- {
- double sx = (double)sin( a_RX * M_PI / 180 );
- double cx = (double)cos( a_RX * M_PI / 180 );
- Identity();
- cell[5] = cx, cell[6] = sx, cell[9] = -sx, cell[10] = cx;
- }
- void RotateY( double a_RY )
- {
- double sy = (double)sin( a_RY * M_PI / 180 );
- double cy = (double)cos( a_RY * M_PI / 180 );
- Identity ();
- cell[0] = cy, cell[2] = -sy, cell[8] = sy, cell[10] = cy;
- }
- void RotateZ( double a_RZ )
- {
- double sz = (double)sin( a_RZ * M_PI / 180 );
- double cz = (double)cos( a_RZ * M_PI / 180 );
- Identity ();
- cell[0] = cz, cell[1] = sz, cell[4] = -sz, cell[5] = cz;
- }
- void Translate( Vector3d a_Pos ) { cell[TX] += a_Pos.x; cell[TY] += a_Pos.y; cell[TZ] += a_Pos.z; }
- void SetTranslation( Vector3d a_Pos ) { cell[TX] = a_Pos.x; cell[TY] = a_Pos.y; cell[TZ] = a_Pos.z; }
- void Concatenate( const Matrix4d & m2 )
- {
- Matrix4d res;
- int c;
- for ( c = 0; c < 4; c++ ) for ( int r = 0; r < 4; r++ )
- res.cell[r * 4 + c] = cell[r * 4] * m2.cell[c] +
- cell[r * 4 + 1] * m2.cell[c + 4] +
- cell[r * 4 + 2] * m2.cell[c + 8] +
- cell[r * 4 + 3] * m2.cell[c + 12];
- for ( c = 0; c < 16; c++ ) cell[c] = res.cell[c];
- }
- Vector3d Transform( const Vector3d & v ) const
- {
- double x = cell[0] * v.x + cell[1] * v.y + cell[2] * v.z + cell[3];
- double y = cell[4] * v.x + cell[5] * v.y + cell[6] * v.z + cell[7];
- double z = cell[8] * v.x + cell[9] * v.y + cell[10] * v.z + cell[11];
- return Vector3d( x, y, z );
- }
- void Invert()
- {
- Matrix4d t;
- int h, i;
- double tx = -cell[3], ty = -cell[7], tz = -cell[11];
- for ( h = 0; h < 3; h++ ) for ( int v = 0; v < 3; v++ ) t.cell[h + v * 4] = cell[v + h * 4];
- for ( i = 0; i < 11; i++ ) cell[i] = t.cell[i];
- cell[3] = tx * cell[0] + ty * cell[1] + tz * cell[2];
- cell[7] = tx * cell[4] + ty * cell[5] + tz * cell[6];
- cell[11] = tx * cell[8] + ty * cell[9] + tz * cell[10];
- }
- Vector3d GetXColumn() { return Vector3d( cell[0], cell[1], cell[2] ); }
- Vector3d GetYColumn() { return Vector3d( cell[4], cell[5], cell[6] ); }
- Vector3d GetZColumn() { return Vector3d( cell[8], cell[9], cell[10] ); }
- void SetXColumn( const Vector3d & a_X )
- {
- cell[0] = a_X.x;
- cell[1] = a_X.y;
- cell[2] = a_X.z;
- }
- void SetYColumn( const Vector3d & a_Y )
- {
- cell[4] = a_Y.x;
- cell[5] = a_Y.y;
- cell[6] = a_Y.z;
- }
- void SetZColumn( const Vector3d & a_Z )
- {
- cell[8] = a_Z.x;
- cell[9] = a_Z.y;
- cell[10] = a_Z.z;
- }
- double cell[16];
-} ;
-
-
-
-
diff --git a/src/Vector3.h b/src/Vector3.h
index 8ee7a87b0..841c3e7d1 100644
--- a/src/Vector3.h
+++ b/src/Vector3.h
@@ -22,7 +22,7 @@ public:
T x, y, z;
- inline Vector3() : x(0), y(0), z(0) {}
+ inline Vector3(void) : x(0), y(0), z(0) {}
inline Vector3(T a_x, T a_y, T a_z) : x(a_x), y(a_y), z(a_z) {}