diff --git a/Makefile b/Makefile index ef2717f..8e723f9 100644 --- a/Makefile +++ b/Makefile @@ -44,8 +44,8 @@ _HEADERS = camera.h color.h engine.h geometry.h light.h loader.h matrix.h\ platform.h point.h render.h transform.h util.h vec.h HEADERS = $(patsubst %,$(INCLUDE_DIR)/%,$(_HEADERS)) -_OBJS = color.o engine.o light.o loader.o main.o platform.o render.o\ - transform.o vec.o +_OBJS = engine.o light.o loader.o main.o platform.o render.o\ + transform.o OBJS = $(patsubst %,$(BUILD_DIR)/%,$(_OBJS)) $(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp $(HEADERS) diff --git a/include/color.h b/include/color.h index 88b31c9..577aa9c 100644 --- a/include/color.h +++ b/include/color.h @@ -24,6 +24,8 @@ struct ColorF32 }; + + // OPERATORS // c1 + c2 inline ColorF32 operator+(ColorF32 const &c1, ColorF32 const &c2) @@ -107,7 +109,22 @@ inline ColorF32 &operator/=(ColorF32 &c, float f) // PUBLIC FUNCTIONS -void ScaleColor(ColorF32 &c); +inline void ScaleColor(ColorF32 &c) +{ + float blue = MAX(c.b, 0.0f); + float green = MAX(c.g, 0.0f); + float red = MAX(c.r, 0.0f); + float alpha = MAX(c.a, 0.0f); + float max = MAX(MAX(MAX(blue,green),red),1.0f); + + ColorF32 scaled = {blue, green, red, alpha}; + scaled /= max; + + c.b = scaled.b; + c.g = scaled.g; + c.r = scaled.r; + c.a = scaled.a; +} #define COLOR_H diff --git a/include/vec.h b/include/vec.h index c8603a0..1b9f6a3 100644 --- a/include/vec.h +++ b/include/vec.h @@ -1,5 +1,8 @@ #ifndef VEC_H +#include "util.h" +#include + // STRUCTURE struct Vector @@ -100,10 +103,59 @@ inline Vector &operator/=(Vector &v, float f) // PUBLIC FUNCTIONS -void VectorNormalize(Vector &v); -float VectorLength(Vector &v); -float VectorDot(Vector &v1, Vector &v2); -Vector VectorCross(Vector &v1, Vector &v2); +inline float VectorLength(Vector &v) +{ + float result = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); + + // zero length + if (result < EPSILON_E3) + { + result = 0.0f; + } + + return result; +} + +inline void VectorNormalize(Vector &v) +{ + float length = VectorLength(v); + + // zero length + if (length == 0.0f) + { + v.x = 0.0f; + v.y = 0.0f; + v.z = 0.0f; + } + else + { + float lengthInv = 1.0f / length; + + v.x *= lengthInv; + v.y *= lengthInv; + v.z *= lengthInv; + } +} + +inline Vector VectorCross(Vector &v1, Vector &v2) +{ + Vector result; + + result.x = (v1.y * v2.z) - (v1.z * v2.y); + result.y = (v1.z * v2.x) - (v1.x * v2.z); + result.z = (v1.x * v2.y) - (v1.y * v2.x); + + return result; +} + +inline float VectorDot(Vector &v1, Vector &v2) +{ + float result; + + result = (v1.x * v2.x) + (v1.y * v2.y) + (v1.z * v2.z); + + return result; +} #define VEC_H diff --git a/src/color.cpp b/src/color.cpp deleted file mode 100644 index a87fdea..0000000 --- a/src/color.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "color.h" - - -void ScaleColor(ColorF32 &c) -{ - float blue = MAX(c.b, 0.0f); - float green = MAX(c.g, 0.0f); - float red = MAX(c.r, 0.0f); - float alpha = MAX(c.a, 0.0f); - float max = MAX(MAX(MAX(blue,green),red),1.0f); - - ColorF32 scaled = {blue, green, red, alpha}; - scaled /= max; - - c.b = scaled.b; - c.g = scaled.g; - c.r = scaled.r; - c.a = scaled.a; -} - diff --git a/src/engine.cpp b/src/engine.cpp index a7f3365..d80f692 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -64,8 +64,8 @@ int EngineInit(char *objFilename, char *mtlFilename) // Mesh configuration - mesh.position.z = 125; - mesh.position.y = -125; + mesh.position.z = 200; + mesh.position.y = -100; mesh.scale = 1.0f; diff --git a/src/vec.cpp b/src/vec.cpp deleted file mode 100644 index 866e109..0000000 --- a/src/vec.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "vec.h" -#include "util.h" -#include - - -void VectorNormalize(Vector &v) -{ - float length = VectorLength(v); - - // zero length - if (length == 0.0f) - { - v.x = 0.0f; - v.y = 0.0f; - v.z = 0.0f; - } - else - { - float lengthInv = 1.0f / length; - - v.x *= lengthInv; - v.y *= lengthInv; - v.z *= lengthInv; - } -} - -float VectorLength(Vector &v) -{ - float result = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); - - // zero length - if (result < EPSILON_E3) - { - result = 0.0f; - } - - return result; -} - -float VectorDot(Vector &v1, Vector &v2) -{ - float result; - - result = (v1.x * v2.x) + (v1.y * v2.y) + (v1.z * v2.z); - - return result; -} - -Vector VectorCross(Vector &v1, Vector &v2) -{ - Vector result; - - result.x = (v1.y * v2.z) - (v1.z * v2.y); - result.y = (v1.z * v2.x) - (v1.x * v2.z); - result.z = (v1.x * v2.y) - (v1.y * v2.x); - - return result; -}