summaryrefslogtreecommitdiffstats
path: root/libdimension/triangle.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2014-06-07 14:15:06 -0400
committerTavian Barnes <tavianator@tavianator.com>2014-06-07 14:30:26 -0400
commita79085ab984979dbf4f78545f7592c8b47e4a794 (patch)
treee2518532db860db8ba59878ecd6d0d4b60f0b5c4 /libdimension/triangle.c
parent708954192219feead526f84c0c8bdb29088aeae0 (diff)
downloaddimension-a79085ab984979dbf4f78545f7592c8b47e4a794.tar.xz
objects: Refactor how bounding and initialization work.
Diffstat (limited to 'libdimension/triangle.c')
-rw-r--r--libdimension/triangle.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/libdimension/triangle.c b/libdimension/triangle.c
index f665670..30ba6c0 100644
--- a/libdimension/triangle.c
+++ b/libdimension/triangle.c
@@ -55,15 +55,30 @@ dmnsn_triangle_intersection_fn(const dmnsn_object *object, dmnsn_line l,
/** Triangle inside callback. */
static bool
-dmnsn_triangle_inside_fn(const dmnsn_object *triangle, dmnsn_vector point)
+dmnsn_triangle_inside_fn(const dmnsn_object *object, dmnsn_vector point)
{
return false;
}
+/** Triangle bounding callback. */
+static dmnsn_bounding_box
+dmnsn_triangle_bounding_fn(const dmnsn_object *object, dmnsn_matrix trans)
+{
+ dmnsn_vector a = dmnsn_transform_point(trans, dmnsn_zero);
+ dmnsn_vector b = dmnsn_transform_point(trans, dmnsn_x);
+ dmnsn_vector c = dmnsn_transform_point(trans, dmnsn_y);
+
+ dmnsn_bounding_box box = dmnsn_new_bounding_box(a, a);
+ box = dmnsn_bounding_box_swallow(box, b);
+ box = dmnsn_bounding_box_swallow(box, c);
+ return box;
+}
+
/** Triangle vtable. */
static const dmnsn_object_vtable dmnsn_triangle_vtable = {
.intersection_fn = dmnsn_triangle_intersection_fn,
.inside_fn = dmnsn_triangle_inside_fn,
+ .bounding_fn = dmnsn_triangle_bounding_fn,
};
/** Smooth triangle type. */
@@ -99,6 +114,7 @@ dmnsn_smooth_triangle_intersection_fn(const dmnsn_object *object, dmnsn_line l,
static const dmnsn_object_vtable dmnsn_smooth_triangle_vtable = {
.intersection_fn = dmnsn_smooth_triangle_intersection_fn,
.inside_fn = dmnsn_triangle_inside_fn,
+ .bounding_fn = dmnsn_triangle_bounding_fn,
};
/** Make a change-of-basis matrix. */
@@ -120,8 +136,6 @@ dmnsn_new_triangle(dmnsn_pool *pool, dmnsn_vector vertices[3])
{
dmnsn_object *object = dmnsn_new_object(pool);
object->vtable = &dmnsn_triangle_vtable;
- object->bounding_box.min = dmnsn_zero;
- object->bounding_box.max = dmnsn_new_vector(1.0, 1.0, 0.0);
object->intrinsic_trans = dmnsn_triangle_basis(vertices);
return object;
}
@@ -144,8 +158,6 @@ dmnsn_new_smooth_triangle(dmnsn_pool *pool, dmnsn_vector vertices[3], dmnsn_vect
dmnsn_object *object = &triangle->object;
dmnsn_init_object(object);
object->vtable = &dmnsn_smooth_triangle_vtable;
- object->bounding_box.min = dmnsn_zero;
- object->bounding_box.max = dmnsn_new_vector(1.0, 1.0, 0.0);
object->intrinsic_trans = P;
return object;