From 10b0b54e7147edb53aecdbcff58ce9df928ac42a Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Sun, 9 Nov 2025 14:00:55 +0100 Subject: [PATCH] 3d projection --- Shaders/Vertex.glsl | 5 ++++- src/Main.cpp | 14 +++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Shaders/Vertex.glsl b/Shaders/Vertex.glsl index 56fdf50..165d3f2 100644 --- a/Shaders/Vertex.glsl +++ b/Shaders/Vertex.glsl @@ -5,11 +5,14 @@ layout(std430, binding = 3) buffer layoutName float data_SSBO[]; }; +layout(location = 0) uniform mat4 viewMatrix; +layout(location = 1) uniform mat4 projectionMatrix; + vec3 unpack(uint index) { return vec3(data_SSBO[index * 3], data_SSBO[index * 3 + 1], data_SSBO[index * 3 + 2]); } void main() { - gl_Position = vec4(unpack(gl_InstanceID), 1.0); + gl_Position = projectionMatrix * viewMatrix * vec4(unpack(gl_InstanceID), 1.0); } \ No newline at end of file diff --git a/src/Main.cpp b/src/Main.cpp index cb91d06..a78fdcf 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -10,7 +10,7 @@ #include constexpr int WORK_GROUP_SIZE = 64; -constexpr int PARTICLE_COUNT = WORK_GROUP_SIZE * 10000; +constexpr int PARTICLE_COUNT = WORK_GROUP_SIZE * 15625; constexpr int SWAP_INTERVAL = 1; @@ -106,7 +106,7 @@ static void ErrorCallback(int error, const char* description) { static void ApplyTransforms(const std::vector& transformations) { glUseProgram(s_ComputeShader); - glUniformMatrix4fv(1, transformations.size(), true, glm::value_ptr(transformations[0])); + glUniformMatrix4fv(1, transformations.size(), false, glm::value_ptr(transformations[0])); } static void GenNewFractal() { @@ -233,6 +233,13 @@ static GLFWwindow* InitWindow() { return nullptr; } + auto viewMatrix = glm::lookAt(glm::vec3{1, 2, 2}, {0, 0, 0}, {0, 1, 0}); + auto projectionMatrix = glm::perspective(70.0f, 2.0f, 0.01f, 10.0f); + + glUseProgram(s_GraphicsShader); + glUniformMatrix4fv(0, 1, false, glm::value_ptr(viewMatrix)); + glUniformMatrix4fv(1, 1, false, glm::value_ptr(projectionMatrix)); + return window; } @@ -252,7 +259,8 @@ int main() { glBindVertexArray(vertexArray); - ApplyTransforms(SIERPINSKI_TRIANGLE); + // ApplyTransforms(SIERPINSKI_TRIANGLE); + GenNewFractal(); while (!glfwWindowShouldClose(window)) { // ScopedTimer timer("Main Loop");