diff --git a/engine/include/libgba-sprite-engine/matrixfx.h b/engine/include/libgba-sprite-engine/matrixfx.h index beb1425..70aeace 100644 --- a/engine/include/libgba-sprite-engine/matrixfx.h +++ b/engine/include/libgba-sprite-engine/matrixfx.h @@ -9,6 +9,8 @@ #include #include +#include + #ifdef CODE_COMPILED_AS_PART_OF_TEST #include #else @@ -19,6 +21,13 @@ class MatrixFx { private: FIXED m[MATRIX_DIMENSION]; + inline std::string mstr(int index) { + char buffer[30]; + snprintf(buffer, 30, "%4.3f", rnd(fx2float(m[index]))); + std::string strObj4(buffer); + return strObj4; + } + public: inline static MatrixFx zero() { return MatrixFx(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } @@ -96,6 +105,18 @@ public: m[14] = m43; m[15] = m44; } + std::string to_string_m1() { + return "(" + mstr(0) + "," + mstr(1) + "," + mstr(2) + "," + mstr(3) +")"; + } + std::string to_string_m2() { + return "(" + mstr(4) + "," + mstr(5) + "," + mstr(6) + "," + mstr(7) +")"; + } + std::string to_string_m3() { + return "(" + mstr(8) + "," + mstr(9) + "," + mstr(10) + "," + mstr(11) +")"; + } + std::string to_string_m4() { + return "(" + mstr(12) + "," + mstr(13) + "," + mstr(14) + "," + mstr(15) +")"; + } inline static VectorFx transformCoordinates(const VectorFx &vector, const MatrixFx &transformation) { FIXED x = fxmul(vector.x(), transformation.mAt(0)) + fxmul(vector.y(), transformation.mAt(4)) + fxmul(vector.z(), transformation.mAt(8) + transformation.mAt(12)); diff --git a/engine/src/gba_engine.cpp b/engine/src/gba_engine.cpp index b79be4f..15a988c 100644 --- a/engine/src/gba_engine.cpp +++ b/engine/src/gba_engine.cpp @@ -172,12 +172,17 @@ void GBAEngine::render() { auto worldMatrix = MatrixFx::rotationYawPitchRoll(mesh->roty(), mesh->rotx(), mesh->rotz()) * MatrixFx::translation(mesh->position()); auto transformMatrix = worldMatrix * viewMatrix * projectionMatrix; + TextStream::instance().setText(transformMatrix.to_string_m1(), 1, 1); + TextStream::instance().setText(transformMatrix.to_string_m2(), 2, 1); + TextStream::instance().setText(transformMatrix.to_string_m3(), 3, 1); + TextStream::instance().setText(transformMatrix.to_string_m4(), 4, 1); + int i = 0; for(auto& vertex : mesh->vertices()) { auto projectedPoint = project(*vertex.get(), transformMatrix).toInt(); plotPixel(projectedPoint.x(), projectedPoint.y(), 1); - TextStream::instance().setText(std::to_string(i) + ":" + projectedPoint.to_string(), i, 1); + //TextStream::instance().setText(std::to_string(i) + ":" + projectedPoint.to_string(), i, 1); i++; } }