Basic hex gradient grid
This commit is contained in:
parent
682a9b45e6
commit
a0507d3ea6
2 changed files with 20 additions and 16 deletions
29
main.c
29
main.c
|
|
@ -54,7 +54,7 @@ int main(void)
|
||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
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;
|
if (!window) return -1;
|
||||||
glfwMakeContextCurrent(window);
|
glfwMakeContextCurrent(window);
|
||||||
if (glewInit() != GLEW_OK) return -1;
|
if (glewInit() != GLEW_OK) return -1;
|
||||||
|
|
@ -112,16 +112,18 @@ int main(void)
|
||||||
background_color.a = 1.0f;
|
background_color.a = 1.0f;
|
||||||
|
|
||||||
hexgrid_t grid;
|
hexgrid_t grid;
|
||||||
grid.rows = 2;
|
grid.rows = 10;
|
||||||
grid.columns = 2;
|
grid.columns = 10;
|
||||||
grid.hexes = calloc(1, sizeof(hex_t) * grid.rows * grid.columns);
|
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;
|
float scale = 1.0f / 5.0f;
|
||||||
|
|
||||||
for (size_t i = 0; i < grid.columns; ++i)
|
for (size_t i = 0; i < grid.columns; ++i)
|
||||||
{
|
{
|
||||||
for (size_t j = 0; j < grid.rows; ++j)
|
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;
|
float offset = 0.0f;
|
||||||
if (j % 2)
|
if (j % 2)
|
||||||
offset = sint(1.0f/6);
|
offset = sint(1.0f/6);
|
||||||
|
|
@ -135,8 +137,6 @@ int main(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get OpenGL objects
|
// Get OpenGL objects
|
||||||
|
|
||||||
|
|
||||||
for (size_t i = 0; i < grid.rows * grid.columns; ++i)
|
for (size_t i = 0; i < grid.rows * grid.columns; ++i)
|
||||||
{
|
{
|
||||||
hex_t *hex = &grid.hexes[i];
|
hex_t *hex = &grid.hexes[i];
|
||||||
|
|
@ -184,7 +184,6 @@ int main(void)
|
||||||
//glBindBuffer(GL_ARRAY_BUFFER, 0);
|
//glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
//glBindVertexArray(0);
|
//glBindVertexArray(0);
|
||||||
|
|
||||||
int64_t framecount = 0;
|
|
||||||
while (!glfwWindowShouldClose(window))
|
while (!glfwWindowShouldClose(window))
|
||||||
{
|
{
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
@ -197,18 +196,20 @@ int main(void)
|
||||||
glUseProgram(shader_program);
|
glUseProgram(shader_program);
|
||||||
//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
//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)
|
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);
|
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);
|
//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_ARRAY_BUFFER, grid.hexes[i].vbo);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, grid.hexes[i].ebo);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, grid.hexes[i].ebo);
|
||||||
|
|
@ -216,8 +217,6 @@ int main(void)
|
||||||
}
|
}
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
|
|
||||||
++framecount;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,13 @@
|
||||||
layout (location = 0) in vec3 pos;
|
layout (location = 0) in vec3 pos;
|
||||||
uniform vec4 uniform_color;
|
uniform vec4 uniform_color;
|
||||||
out vec4 vertex_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()
|
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;
|
vertex_color = uniform_color;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue