refactor Transform

This commit is contained in:
2025-11-09 14:21:13 +01:00
parent da536b8d7d
commit 9e6088f9bf
2 changed files with 50 additions and 24 deletions

View File

@@ -113,39 +113,65 @@ static void ApplyTransforms(const std::vector<glm::mat4>& transformations) {
glUniformMatrix4fv(1, transformations.size(), false, glm::value_ptr(transformations[0])); 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() { static void GenNewFractal() {
// scale, rotation, shear, translation // scale, rotation, shear, translation
std::vector<glm::mat4> transformations(TRANSFORMATION_COUNT); std::vector<glm::mat4> transformations(TRANSFORMATION_COUNT);
for (std::size_t i = 0; i < transformations.size(); i++) { for (std::size_t i = 0; i < transformations.size(); i++) {
float scaleX = s_Distrib(s_Generator) * 0.4 + 0.4; Transform transform;
float scaleY = s_Distrib(s_Generator) * 0.4 + 0.4; transform.m_ScaleX = s_Distrib(s_Generator) * 0.4 + 0.4;
float scaleZ = 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; transform.m_RotationX = s_Distrib(s_Generator) * 2 * 3.14;
float rotY = s_Distrib(s_Generator) * 2 * 3.14; transform.m_RotationY = s_Distrib(s_Generator) * 2 * 3.14;
float rotZ = 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; transform.m_ShearXY = s_Distrib(s_Generator) * 0.2f - 0.1f;
float shearXZ = s_Distrib(s_Generator) * 0.2f - 0.1f; transform.m_ShearXZ = s_Distrib(s_Generator) * 0.2f - 0.1f;
float shearYX = s_Distrib(s_Generator) * 0.2f - 0.1f; transform.m_ShearYX = s_Distrib(s_Generator) * 0.2f - 0.1f;
float shearYZ = s_Distrib(s_Generator) * 0.2f - 0.1f; transform.m_ShearYZ = s_Distrib(s_Generator) * 0.2f - 0.1f;
float shearZX = s_Distrib(s_Generator) * 0.2f - 0.1f; transform.m_ShearZX = s_Distrib(s_Generator) * 0.2f - 0.1f;
float shearZY = 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; transform.m_TranslateX = s_Distrib(s_Generator) * 1.2f - 0.6f;
float translateY = s_Distrib(s_Generator) * 1.2f - 0.6f; transform.m_TranslateY = s_Distrib(s_Generator) * 1.2f - 0.6f;
float translateZ = 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}); transformations[i] = transform.ToMatrix();
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;
} }
ApplyTransforms(transformations); ApplyTransforms(transformations);