From 50462669066b364b7d39f75bd02454b8ed64e130 Mon Sep 17 00:00:00 2001 From: Luca Conte Date: Sun, 20 Apr 2025 02:04:02 +0200 Subject: [PATCH] solid cube --- src/main.c | 56 ++++++++++++++++++++++++----------------- src/shaders/vertex.glsl | 2 +- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/main.c b/src/main.c index cbd1081..468ade5 100644 --- a/src/main.c +++ b/src/main.c @@ -25,6 +25,7 @@ GLuint initialWindowWidth = 800; GLuint initialWindowHeight = 600; GLfloat aspect; +mat4 projectionMatrix; int frameCount = 0; struct timespec last_time, current_time; @@ -81,6 +82,11 @@ void updateStatusDisplay() { } } +void recalculateProjectionMatrix() { + mat4BuildPerspective(projectionMatrix, 60 * M_PI / 180, aspect, 0.1, 10); + DEBUG("Recalculating Projection Matrix"); +} + void init(void) { INFO("Compiling Shaders..."); @@ -153,24 +159,23 @@ void init(void) { glPrimitiveRestartIndex(restart); GLuint indices[] = { - 0, 1, - 0, 2, - 0, 4, + 0, 1, 2, + 1, 2, 3, - 1, 3, - 1, 5, + 0, 4, 1, + 5, 4, 1, - 2, 3, - 2, 6, + 5, 1, 7, + 3, 1, 7, - 3, 7, + 7, 5, 6, + 4, 5, 6, - 4, 5, - 4, 6, + 4, 0, 6, + 2, 0, 6, - 5, 7, - - 6, 7 + 2, 3, 6, + 7, 3, 6 }; DEBUG("Creating vertext buffer"); @@ -212,8 +217,12 @@ void init(void) { // glEnable(GL_CULL_FACE); glFrontFace(GL_CCW); + glEnable(GL_DEPTH_TEST); + initialiseStatusDisplay(); + recalculateProjectionMatrix(); + INFO("--- Initialisation done ---"); } @@ -225,7 +234,7 @@ void draw(void) { currentHue += 0.0005f; if (currentHue > 1.0) currentHue = 0.0f; - glClear(GL_COLOR_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(program); mat4 transformMatrix; @@ -234,38 +243,39 @@ void draw(void) { mat4Identity(transformMatrix); mat4Scale(transformMatrix, transformMatrix, scale); - // mat4RotateZ(transformMatrix, transformMatrix, currentHue * PI * 2); - // mat4RotateY(transformMatrix, transformMatrix, currentHue * PI * 2); + mat4RotateZ(transformMatrix, transformMatrix, currentHue * PI * 2); + mat4RotateY(transformMatrix, transformMatrix, currentHue * PI * 2); mat4Translate(transformMatrix, transformMatrix, position); - + mat4 viewMatrix; mat4Identity(viewMatrix); - vec3 cameraPos = {0.0f, sin(currentHue * PI * 2), 0.0f}; - vec3 cameraLookAt = {0.0f, sin(currentHue * PI * 2), -1.0f}; + vec3 cameraPos = {0.0f, 0.0f, 0.0f}; + vec3 cameraLookAt = {0.0f, 0.0f, -1.0f}; vec3 cameraUp = {0.0f, 1.0f, 0.0f}; mat4BuildLookAt(viewMatrix, cameraPos, cameraLookAt, cameraUp); mat4 modelViewMatrix; mat4Multiply(modelViewMatrix, viewMatrix, transformMatrix); + GLuint modelViewLocation = glGetUniformLocation(program, "uModelView"); glUniformMatrix4fv(modelViewLocation, 1, GL_FALSE, modelViewMatrix); - mat4 projectionMatrix; - mat4BuildPerspective(projectionMatrix, 60 * M_PI / 180, aspect, 0.1, 10); - GLuint projectionLocation = glGetUniformLocation(program, "uProjection"); glUniformMatrix4fv(projectionLocation, 1, GL_FALSE, projectionMatrix); + glBindVertexArray(vertexArrayObject); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); - glDrawElements(GL_LINES, 24, GL_UNSIGNED_INT, 0); + glDrawElements(GL_TRIANGLES, 48, GL_UNSIGNED_INT, 0); } void framebuffer_size_callback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height); aspect = (float)width / height; + + recalculateProjectionMatrix(); } int main(int argc, char const *argv[]) diff --git a/src/shaders/vertex.glsl b/src/shaders/vertex.glsl index d718752..9b02b75 100644 --- a/src/shaders/vertex.glsl +++ b/src/shaders/vertex.glsl @@ -6,6 +6,6 @@ uniform mat4 uProjection; out vec3 vertexColor; void main() { - vertexColor = vec3(1.0, 0.1, 0.1); + vertexColor = (aPosition + vec3(1)) / 2; gl_Position = uProjection * uModelView * vec4(aPosition, 1.0); } \ No newline at end of file