3d projection

This commit is contained in:
2025-11-09 14:00:55 +01:00
parent 0eebe09d47
commit 10b0b54e71
2 changed files with 15 additions and 4 deletions

View File

@@ -5,11 +5,14 @@ layout(std430, binding = 3) buffer layoutName
float data_SSBO[]; float data_SSBO[];
}; };
layout(location = 0) uniform mat4 viewMatrix;
layout(location = 1) uniform mat4 projectionMatrix;
vec3 unpack(uint index) { vec3 unpack(uint index) {
return vec3(data_SSBO[index * 3], data_SSBO[index * 3 + 1], data_SSBO[index * 3 + 2]); return vec3(data_SSBO[index * 3], data_SSBO[index * 3 + 1], data_SSBO[index * 3 + 2]);
} }
void main() void main()
{ {
gl_Position = vec4(unpack(gl_InstanceID), 1.0); gl_Position = projectionMatrix * viewMatrix * vec4(unpack(gl_InstanceID), 1.0);
} }

View File

@@ -10,7 +10,7 @@
#include <random> #include <random>
constexpr int WORK_GROUP_SIZE = 64; 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; constexpr int SWAP_INTERVAL = 1;
@@ -106,7 +106,7 @@ static void ErrorCallback(int error, const char* description) {
static void ApplyTransforms(const std::vector<glm::mat4>& transformations) { static void ApplyTransforms(const std::vector<glm::mat4>& transformations) {
glUseProgram(s_ComputeShader); 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() { static void GenNewFractal() {
@@ -233,6 +233,13 @@ static GLFWwindow* InitWindow() {
return nullptr; 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; return window;
} }
@@ -252,7 +259,8 @@ int main() {
glBindVertexArray(vertexArray); glBindVertexArray(vertexArray);
ApplyTransforms(SIERPINSKI_TRIANGLE); // ApplyTransforms(SIERPINSKI_TRIANGLE);
GenNewFractal();
while (!glfwWindowShouldClose(window)) { while (!glfwWindowShouldClose(window)) {
// ScopedTimer timer("Main Loop"); // ScopedTimer timer("Main Loop");