From a0507d3ea62dac332659e0b1815d01fb2a2ead7f Mon Sep 17 00:00:00 2001 From: Phireh Date: Sat, 4 Feb 2023 01:57:57 +0100 Subject: [PATCH] Basic hex gradient grid --- main.c | 29 ++++++++++++++--------------- shaders/vertex.glsl | 7 ++++++- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/main.c b/main.c index 84675c2..e1fd8fc 100644 --- a/main.c +++ b/main.c @@ -54,7 +54,7 @@ int main(void) glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - window = glfwCreateWindow(800, 800, "Hello World", NULL, NULL); + window = glfwCreateWindow(800, 800, "Hello Hex", NULL, NULL); if (!window) return -1; glfwMakeContextCurrent(window); if (glewInit() != GLEW_OK) return -1; @@ -112,16 +112,18 @@ int main(void) background_color.a = 1.0f; hexgrid_t grid; - grid.rows = 2; - grid.columns = 2; + grid.rows = 10; + grid.columns = 10; grid.hexes = calloc(1, sizeof(hex_t) * grid.rows * grid.columns); + // Scale of hexagon relative to screen. A 1:1 hexagon would reach the entire horizontal space float scale = 1.0f / 5.0f; for (size_t i = 0; i < grid.columns; ++i) { for (size_t j = 0; j < grid.rows; ++j) { + // Offset the X and Y coordinates of adjacent hexagons so they do not cut each other float offset = 0.0f; if (j % 2) offset = sint(1.0f/6); @@ -135,8 +137,6 @@ int main(void) } // Get OpenGL objects - - for (size_t i = 0; i < grid.rows * grid.columns; ++i) { hex_t *hex = &grid.hexes[i]; @@ -184,7 +184,6 @@ int main(void) //glBindBuffer(GL_ARRAY_BUFFER, 0); //glBindVertexArray(0); - int64_t framecount = 0; while (!glfwWindowShouldClose(window)) { int width, height; @@ -197,18 +196,20 @@ int main(void) glUseProgram(shader_program); //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - // Set uniforms - vec4f hex_color; - hex_color.r = (float)(framecount % 1100)/1100; - hex_color.g = (float)(framecount % 300)/300; - hex_color.b = (float)(framecount % 1700)/1700; - hex_color.a = 1.0f; - set_uniform(shader_program, "uniform_color", hex_color); for (size_t i = 0; i < grid.rows * grid.columns; ++i) { + + // Set uniforms + vec4f hex_color; + hex_color.r = (float)i / (grid.rows * grid.columns); + hex_color.g = (float)i / (grid.rows * grid.columns); + hex_color.b = (float)i / (grid.rows * grid.columns); + hex_color.a = 1.0f; + set_uniform(shader_program, "uniform_color", hex_color); glBindVertexArray(grid.hexes[i].vao); + //log_debug("Binding VAO %d VBO %d EBO %d", grid.hexes[i].vao, grid.hexes[i].vbo, grid.hexes[i].ebo); glBindBuffer(GL_ARRAY_BUFFER, grid.hexes[i].vbo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, grid.hexes[i].ebo); @@ -216,8 +217,6 @@ int main(void) } glfwPollEvents(); glfwSwapBuffers(window); - - ++framecount; } return 0; } diff --git a/shaders/vertex.glsl b/shaders/vertex.glsl index d85e06b..317caa1 100644 --- a/shaders/vertex.glsl +++ b/shaders/vertex.glsl @@ -2,8 +2,13 @@ layout (location = 0) in vec3 pos; uniform vec4 uniform_color; out vec4 vertex_color; +const mat4 to_draw_coordinates_matrix = mat4( + 1., 0., 0., 0., + 0., 1., 0., 0., + 0., 0., 1., 0., + -1, 1, 0, 1); void main() { - gl_Position = vec4(pos, 1.0f); + gl_Position = to_draw_coordinates_matrix*vec4(pos.x,-pos.y,pos.z, 1.0f); vertex_color = uniform_color; }