From 86bd56a8983b664e145ddd3b34a2c2fa8bdf21a9 Mon Sep 17 00:00:00 2001 From: sanine-a Date: Sat, 23 May 2020 12:36:13 -0500 Subject: add normals to primitives --- src/primitives.c | 135 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 82 insertions(+), 53 deletions(-) (limited to 'src') diff --git a/src/primitives.c b/src/primitives.c index 00cfdb9..4e6d93b 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -13,33 +13,62 @@ enum honey_mesh_result honey_mesh_new_cube(honey_mesh* mesh, float z1 = depth; float vertices[] = { - x0, y0, z0, - x1, y0, z0, - x0, y1, z0, - x1, y1, z0, - x0, y0, z1, - x1, y0, z1, - x0, y1, z1, - x1, y1, z1 }; - - unsigned int indices[] = { 0, 1, 2, - 1, 2, 3, - 4, 5, 6, - 5, 6, 7, - 0, 2, 4, - 2, 4, 6, - 1, 3, 5, - 3, 5, 7, - 2, 3, 6, - 3, 6, 7, - 0, 1, 4, - 1, 4, 5 }; - - unsigned int attrib_sizes[] = { 3 }; + /* position normal tex coord */ + /* back face */ + x0, y0, z0, 0, 0, -1, + x1, y0, z0, 0, 0, -1, + x0, y1, z0, 0, 0, -1, + x1, y1, z0, 0, 0, -1, + + /* front face */ + x0, y0, z1, 0, 0, 1, + x1, y0, z1, 0, 0, 1, + x0, y1, z1, 0, 0, 1, + x1, y1, z1, 0, 0, 1, + + /* left face */ + x0, y0, z0, -1, 0, 0, + x0, y1, z0, -1, 0, 0, + x0, y0, z1, -1, 0, 0, + x0, y1, z1, -1, 0, 0, + + /* right face */ + x1, y0, z0, 1, 0, 0, + x1, y1, z0, 1, 0, 0, + x1, y0, z1, 1, 0, 0, + x1, y1, z1, 1, 0, 0, + + /* bottom face */ + x0, y0, z0, 0, -1, 0, + x1, y0, z0, 0, -1, 0, + x0, y0, z1, 0, -1, 0, + x1, y0, z1, 0, -1, 0, + + /* top face */ + x0, y1, z0, 0, 1, 0, + x1, y1, z0, 0, 1, 0, + x0, y1, z1, 0, 1, 0, + x1, y1, z1, 0, 1, 0 }; + + unsigned int indices[] = { + 0, 1, 2, + 1, 2, 3, + 4, 5, 6, + 5, 6, 7, + 8, 9, 10, + 9, 10, 11, + 12, 13, 14, + 13, 14, 15, + 16, 17, 18, + 17, 18, 19, + 20, 21, 22, + 21, 22, 23 }; + + unsigned int attrib_sizes[] = { 3, 3 }; enum honey_mesh_result result = honey_mesh_new(mesh, - vertices, - 8, 1, attrib_sizes, + vertices, 24, + 2, attrib_sizes, indices, 36); return result; @@ -59,43 +88,43 @@ enum honey_mesh_result honey_mesh_new_textured_cube(honey_mesh* mesh, float y1 = height; float z1 = depth; - float vertices[] = { - /* position tex coord */ + float vertices[] = { + /* position normal tex coord */ /* back face */ - x0, y0, z0, 0, 0, - x1, y0, z0, 1, 0, - x0, y1, z0, 0, 1, - x1, y1, z0, 1, 1, + x0, y0, z0, 0, 0, -1, 0, 0, + x1, y0, z0, 0, 0, -1, 1, 0, + x0, y1, z0, 0, 0, -1, 0, 1, + x1, y1, z0, 0, 0, -1, 1, 1, /* front face */ - x0, y0, z1, 0, 0, - x1, y0, z1, 1, 0, - x0, y1, z1, 0, 1, - x1, y1, z1, 1, 1, + x0, y0, z1, 0, 0, 1, 0, 0, + x1, y0, z1, 0, 0, 1, 1, 0, + x0, y1, z1, 0, 0, 1, 0, 1, + x1, y1, z1, 0, 0, 1, 1, 1, /* left face */ - x0, y0, z0, 0, 0, - x0, y1, z0, 1, 0, - x0, y0, z1, 0, 1, - x0, y1, z1, 1, 1, + x0, y0, z0, -1, 0, 0, 0, 0, + x0, y1, z0, -1, 0, 0, 1, 0, + x0, y0, z1, -1, 0, 0, 0, 1, + x0, y1, z1, -1, 0, 0, 1, 1, /* right face */ - x1, y0, z0, 0, 0, - x1, y1, z0, 1, 0, - x1, y0, z1, 0, 1, - x1, y1, z1, 1, 1, + x1, y0, z0, 1, 0, 0, 0, 0, + x1, y1, z0, 1, 0, 0, 1, 0, + x1, y0, z1, 1, 0, 0, 0, 1, + x1, y1, z1, 1, 0, 0, 1, 1, /* bottom face */ - x0, y0, z0, 0, 0, - x1, y0, z0, 1, 0, - x0, y0, z1, 0, 1, - x1, y0, z1, 1, 1, + x0, y0, z0, 0, -1, 0, 0, 0, + x1, y0, z0, 0, -1, 0, 1, 0, + x0, y0, z1, 0, -1, 0, 0, 1, + x1, y0, z1, 0, -1, 0, 1, 1, /* top face */ - x0, y1, z0, 0, 0, - x1, y1, z0, 1, 0, - x0, y1, z1, 0, 1, - x1, y1, z1, 1, 1 }; + x0, y1, z0, 0, 1, 0, 0, 0, + x1, y1, z0, 0, 1, 0, 1, 0, + x0, y1, z1, 0, 1, 0, 0, 1, + x1, y1, z1, 0, 1, 0, 1, 1 }; unsigned int indices[] = { 0, 1, 2, @@ -111,11 +140,11 @@ enum honey_mesh_result honey_mesh_new_textured_cube(honey_mesh* mesh, 20, 21, 22, 21, 22, 23 }; - unsigned int attrib_sizes[] = { 3, 2 }; + unsigned int attrib_sizes[] = { 3, 3, 2 }; enum honey_mesh_result result; result = honey_mesh_new(mesh, vertices, 24, - 2, attrib_sizes, + 3, attrib_sizes, indices, 36); return result; } -- cgit v1.2.1