generated from Persson-dev/OpenGLComputeShader
refactor Transform
This commit is contained in:
@@ -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);
|
||||
}
|
||||
72
src/Main.cpp
72
src/Main.cpp
@@ -113,39 +113,65 @@ static void ApplyTransforms(const std::vector<glm::mat4>& 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<glm::mat4> 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);
|
||||
|
||||
Reference in New Issue
Block a user