summaryrefslogtreecommitdiff
path: root/src/maths
diff options
context:
space:
mode:
authoromniscient <17525998+omnisci3nce@users.noreply.github.com>2024-06-17 22:08:13 +1000
committeromniscient <17525998+omnisci3nce@users.noreply.github.com>2024-06-17 22:08:13 +1000
commitf1cb5bece520dba63fa77e4721909ab8f0a6c26f (patch)
tree33e0888475fcb10a4857db6d5570fa7cce459cb7 /src/maths
parent9c8ef3cb95cff78bdc9d527b89ba30cf616e18c0 (diff)
add plane primitive
Diffstat (limited to 'src/maths')
-rw-r--r--src/maths/primitives.c61
1 files changed, 40 insertions, 21 deletions
diff --git a/src/maths/primitives.c b/src/maths/primitives.c
index 46175fd..2fbe71a 100644
--- a/src/maths/primitives.c
+++ b/src/maths/primitives.c
@@ -5,6 +5,18 @@
#include "ral_types.h"
#include "render_types.h"
+#define VERT_3D(arr, pos, norm, uv) \
+ { \
+ vertex v = { .static_3d = { .position = pos, .normal = norm, .tex_coords = uv } }; \
+ vertex_darray_push(arr, v); \
+ }
+
+void push_triangle(u32_darray* arr, u32 i0, u32 i1, u32 i2) {
+ u32_darray_push(arr, i0);
+ u32_darray_push(arr, i1);
+ u32_darray_push(arr, i2);
+}
+
// TODO: move to another file
void geo_free_data(geometry_data* geo) {
vertex_darray_free(geo->vertices);
@@ -16,21 +28,40 @@ void geo_free_data(geometry_data* geo) {
}
// vertices
-f32 plane_vertex_positions[] = {
- // triangle 1
- -0.5, 0, -0.5, -0.5, 0, 0.5, 0.5, 0, -0.5,
- // triangle 2
- 0.5, 0, -0.5, -0.5, 0, 0.5, 0.5, 0, 0.5
+vec3 plane_vertex_positions[] = {
+ (vec3){ -0.5, 0, -0.5},
+ (vec3){ 0.5, 0, -0.5},
+ (vec3){ -0.5, 0, 0.5},
+ (vec3){ 0.5, 0, 0.5},
};
geometry_data geo_create_plane(f32x2 extents) {
- f32x2 half_extents = vec2_div(extents, 2.0);
- vertex_format format = VERTEX_STATIC_3D;
vertex_darray* vertices = vertex_darray_new(4);
+ u32_darray* indices = u32_darray_new(vertices->len);
- // vertex_darray_push(vertices, (vertex){ .static_3d = { .position = } });
+ vec3 vert_pos[4];
+ memcpy(&vert_pos, plane_vertex_positions, sizeof(plane_vertex_positions));
+ for (int i = 0; i < 4; i++) {
+ vert_pos[i].x *= extents.x;
+ vert_pos[i].z *= extents.y;
+ }
+ VERT_3D(vertices, vert_pos[0], VEC3_Y, vec2(0, 0));
+ VERT_3D(vertices, vert_pos[1], VEC3_Y, vec2(1, 0));
+ VERT_3D(vertices, vert_pos[2], VEC3_Y, vec2(0, 1));
+ VERT_3D(vertices, vert_pos[3], VEC3_Y, vec2(1, 1));
+
+ push_triangle(indices, 2,1,0);
+ push_triangle(indices, 1,2,3);
- // return (geometry_data) { .format = format, .vertices =.has_indices = true, }
+ geometry_data geo = {
+ .format = VERTEX_STATIC_3D,
+ .vertices = vertices,
+ .has_indices = true,
+ .indices = indices,
+ .colour = (rgba){ 0, 0, 0, 1 }
+ };
+
+ return geo;
}
// OLD
@@ -44,18 +75,6 @@ static const vec3 FRONT_BOT_RIGHT = (vec3){ 1, 0, 1 };
static const vec3 FRONT_TOP_LEFT = (vec3){ 0, 1, 1 };
static const vec3 FRONT_TOP_RIGHT = (vec3){ 1, 1, 1 };
-#define VERT_3D(arr, pos, norm, uv) \
- { \
- vertex v = { .static_3d = { .position = pos, .normal = norm, .tex_coords = uv } }; \
- vertex_darray_push(arr, v); \
- }
-
-void push_triangle(u32_darray* arr, u32 i0, u32 i1, u32 i2) {
- u32_darray_push(arr, i0);
- u32_darray_push(arr, i1);
- u32_darray_push(arr, i2);
-}
-
geometry_data geo_create_cuboid(f32x3 extents) {
/* static mesh prim_cube_mesh_create() { */
vertex_darray* vertices = vertex_darray_new(36);