A complete workshop implementation, I guess
[carveJwlIkooP6JGAAIwe30JlM.git] / model.h
diff --git a/model.h b/model.h
index 8f90d128ad0a9637edb7a2624eed66ee1c2cc35b..664950fc0191b7bf6f9e7f95e3ce6d4cffd3bb25 100644 (file)
--- a/model.h
+++ b/model.h
@@ -77,6 +77,34 @@ struct mdl_transform
    v4f q;
 };
 
+static void transform_identity( mdl_transform *transform )
+{
+   v3_zero( transform->co );
+   q_identity( transform->q );
+   v3_fill( transform->s, 1.0f );
+}
+
+static void mdl_transform_vector( mdl_transform *transform, v3f vec, v3f dest )
+{
+   v3_mul( transform->s, vec, dest );
+   q_mulv( transform->q, dest, dest );
+}
+
+static void mdl_transform_point( mdl_transform *transform, v3f co, v3f dest )
+{
+   mdl_transform_vector( transform, co, dest );
+   v3_add( transform->co, dest, dest );
+}
+
+static void mdl_transform_mul( mdl_transform *a, mdl_transform *b, 
+                               mdl_transform *d )
+{
+   mdl_transform_point( a, b->co, d->co );
+   q_mul( a->q, b->q, d->q );
+   q_normalize( d->q );
+   v3_mul( a->s, b->s, d->s );
+}
+
 struct mdl_material
 {
    u32 pstr_name,
@@ -246,8 +274,7 @@ VG_STATIC u32 mdl_query_array_size( mdl_array *arr )
       u32 size = arr->item_size*arr->item_count;
       return vg_align8(size);
    }
-   else
-      return 0;
+   else return 0;
 }
 
 VG_STATIC const char *mdl_pstr( mdl_context *mdl, u32 pstr );
@@ -262,21 +289,18 @@ void mdl_fread_pack_file( mdl_context *mdl, mdl_file *info, void *dst )
    fseek( mdl->file, mdl->pack_base_offset+info->pack_offset, SEEK_SET );
    u64 l = fread( dst, info->pack_size, 1, mdl->file );
 
-   if( l != 1 )
-      mdl_load_fatal_corrupt( mdl );
+   if( l != 1 ) mdl_load_fatal_corrupt( mdl );
 }
 
 /* TODO: Rename these */
-VG_STATIC 
-void mdl_load_array_file_buffer( mdl_context *mdl, mdl_array *arr, 
-                                 void *buffer )
+VG_STATIC void mdl_load_array_file_buffer( mdl_context *mdl, mdl_array *arr, 
+                                           void *buffer )
 {
    if( arr->item_count ){
       fseek( mdl->file, arr->file_offset, SEEK_SET );
       u64 l = fread( buffer, arr->item_size*arr->item_count, 1, mdl->file );
 
-      if( l != 1 )
-         mdl_load_fatal_corrupt( mdl );
+      if( l != 1 ) mdl_load_fatal_corrupt( mdl );
    }
 }