summaryrefslogtreecommitdiff
path: root/src/primitives.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/primitives.c')
-rw-r--r--src/primitives.c135
1 files changed, 82 insertions, 53 deletions
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;
}