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()
|
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]));
|
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user