diff --git a/Shaders/Fragment.glsl b/Shaders/Fragment.glsl index 835cf1d..bc89c18 100644 --- a/Shaders/Fragment.glsl +++ b/Shaders/Fragment.glsl @@ -4,5 +4,5 @@ layout (location = 0) out vec4 o_Color; void main() { - o_Color = vec4(1, 1, 1, 1); + o_Color = vec4(1, 1, 1, 1); } \ No newline at end of file diff --git a/src/Main.cpp b/src/Main.cpp index 1d22e3f..7a89d8f 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -113,39 +113,65 @@ static void ApplyTransforms(const std::vector& transformations) { glUniformMatrix4fv(1, transformations.size(), false, glm::value_ptr(transformations[0])); } +struct Transform { + float m_ScaleX; + float m_ScaleY; + float m_ScaleZ; + + float m_RotationX; + float m_RotationY; + float m_RotationZ; + + float m_ShearXY; + float m_ShearXZ; + float m_ShearYX; + float m_ShearYZ; + float m_ShearZX; + float m_ShearZY; + + float m_TranslateX; + float m_TranslateY; + float m_TranslateZ; + + glm::mat4 ToMatrix() { + auto scale = glm::scale(glm::mat4(1), {m_ScaleX, m_ScaleY, m_ScaleZ}); + auto rotateX = glm::rotate(scale, m_RotationX, {1, 0, 0}); + auto rotateY = glm::rotate(rotateX, m_RotationY, {0, 1, 0}); + auto rotateZ = glm::rotate(rotateY, m_RotationZ, {0, 0, 1}); + auto shear = glm::shear(rotateZ, {0, 0, 0}, {m_ShearXY, m_ShearXZ}, {m_ShearYX, m_ShearYZ}, {m_ShearZX, m_ShearZY}); + auto translate = glm::translate(rotateZ, {m_TranslateX, m_TranslateY, m_TranslateZ}); + + return translate; + } +}; + static void GenNewFractal() { // scale, rotation, shear, translation std::vector transformations(TRANSFORMATION_COUNT); for (std::size_t i = 0; i < transformations.size(); i++) { - float scaleX = s_Distrib(s_Generator) * 0.4 + 0.4; - float scaleY = s_Distrib(s_Generator) * 0.4 + 0.4; - float scaleZ = s_Distrib(s_Generator) * 0.4 + 0.4; + Transform transform; + transform.m_ScaleX = s_Distrib(s_Generator) * 0.4 + 0.4; + transform.m_ScaleY = s_Distrib(s_Generator) * 0.4 + 0.4; + transform.m_ScaleZ = s_Distrib(s_Generator) * 0.4 + 0.4; - float rotX = s_Distrib(s_Generator) * 2 * 3.14; - float rotY = s_Distrib(s_Generator) * 2 * 3.14; - float rotZ = s_Distrib(s_Generator) * 2 * 3.14; + transform.m_RotationX = s_Distrib(s_Generator) * 2 * 3.14; + transform.m_RotationY = s_Distrib(s_Generator) * 2 * 3.14; + transform.m_RotationZ = s_Distrib(s_Generator) * 2 * 3.14; - float shearXY = s_Distrib(s_Generator) * 0.2f - 0.1f; - float shearXZ = s_Distrib(s_Generator) * 0.2f - 0.1f; - float shearYX = s_Distrib(s_Generator) * 0.2f - 0.1f; - float shearYZ = s_Distrib(s_Generator) * 0.2f - 0.1f; - float shearZX = s_Distrib(s_Generator) * 0.2f - 0.1f; - float shearZY = s_Distrib(s_Generator) * 0.2f - 0.1f; + transform.m_ShearXY = s_Distrib(s_Generator) * 0.2f - 0.1f; + transform.m_ShearXZ = s_Distrib(s_Generator) * 0.2f - 0.1f; + transform.m_ShearYX = s_Distrib(s_Generator) * 0.2f - 0.1f; + transform.m_ShearYZ = s_Distrib(s_Generator) * 0.2f - 0.1f; + transform.m_ShearZX = s_Distrib(s_Generator) * 0.2f - 0.1f; + transform.m_ShearZY = s_Distrib(s_Generator) * 0.2f - 0.1f; - float translateX = s_Distrib(s_Generator) * 1.2f - 0.6f; - float translateY = s_Distrib(s_Generator) * 1.2f - 0.6f; - float translateZ = s_Distrib(s_Generator) * 1.2f - 0.6f; + transform.m_TranslateX = s_Distrib(s_Generator) * 1.2f - 0.6f; + transform.m_TranslateY = s_Distrib(s_Generator) * 1.2f - 0.6f; + transform.m_TranslateZ = s_Distrib(s_Generator) * 1.2f - 0.6f; - auto scale = glm::scale(glm::mat4(1), {scaleX, scaleY, scaleZ}); - auto rotateX = glm::rotate(scale, rotX, {1, 0, 0}); - auto rotateY = glm::rotate(rotateX, rotY, {0, 1, 0}); - auto rotateZ = glm::rotate(rotateY, rotZ, {0, 0, 1}); - auto shear = glm::shear(rotateZ, {0, 0, 0}, {shearXY, shearXZ}, {shearYX, shearYZ}, {shearZX, shearZY}); - auto translate = glm::translate(rotateZ, {translateX, translateY, translateZ}); - - transformations[i] = translate; + transformations[i] = transform.ToMatrix(); } ApplyTransforms(transformations);