review: pointcloud.h
authorhgn <hgodden00@gmail.com>
Fri, 30 Jun 2023 23:00:19 +0000 (00:00 +0100)
committerhgn <hgodden00@gmail.com>
Fri, 30 Jun 2023 23:00:19 +0000 (00:00 +0100)
player_skate.c
pointcloud.h
world_routes.c

index 6b5bdfb993b4dc0f16cab22400407dec183f311c..8598f20d7a1c85943b028529c58f2ba37afec053 100644 (file)
@@ -3130,8 +3130,6 @@ VG_STATIC void player__skate_post_animate( player_instance *player )
    m4x3_mulv( av->sk.final_mtx[ av->id_head ], head, s->state.head_position );
    m4x3_mulv( player->rb.to_local, s->state.head_position, 
                                    s->state.head_position );
-
-   /* TODO: Extrapolate to_local matrix? */
 }
 
 VG_STATIC void player__skate_reset_animator( player_instance *player )
index 4775dd747fd2b18affbb708d0ac73648d2188420..427548caa3e164b18ad74f6b5df3e3e864cb8522 100644 (file)
@@ -46,8 +46,7 @@ struct pointcloud_buffer{
    pointcloud_vert buf[];
 };
 
-static void async_pointcloud_sub( void *payload, u32 size )
-{
+static void async_pointcloud_sub( void *payload, u32 size ){
    glBindVertexArray( pointcloud.vao );
    glBindBuffer( GL_ARRAY_BUFFER, pointcloud.vbo );
 
@@ -75,8 +74,7 @@ static void async_pointcloud_sub( void *payload, u32 size )
    }
 }
 
-static void async_pointcloud_alloc( void *payload, u32 size )
-{
+static void async_pointcloud_alloc( void *payload, u32 size ){
    glGenVertexArrays( 1, &pointcloud.vao );
    glGenBuffers( 1, &pointcloud.vbo );
    glBindVertexArray( pointcloud.vao );
@@ -98,26 +96,23 @@ static void async_pointcloud_alloc( void *payload, u32 size )
    VG_CHECK_GL_ERR();
 }
 
-static void pointcloud_init(void)
-{
+static void pointcloud_init(void){
    vg_async_call( async_pointcloud_alloc, NULL, 0 );
    shader_point_map_register();
 }
 
-static void pointcloud_animate( enum pointcloud_anim anim )
-{
+static void pointcloud_animate( enum pointcloud_anim anim ){
    pointcloud.anim = anim;
    pointcloud.anim_start = vg.time;
 }
 
-static int pointcloud_idle(void)
-{
+static int pointcloud_idle(void){
    if( pointcloud.anim >= k_pointcloud_anim_idle_any ) return 1;
    else return 0;
 }
 
-static void pointcloud_render( world_instance *world, camera *cam, m4x3f model )
-{
+static 
+void pointcloud_render( world_instance *world, camera *cam, m4x3f model ){
    if( pointcloud.anim < k_pointcloud_anim_idle_any ){
       f32 const k_transition = 0.6f;
       f32 t = (vg.time - pointcloud.anim_start) / k_transition;
@@ -157,4 +152,12 @@ static void pointcloud_render( world_instance *world, camera *cam, m4x3f model )
    glDrawArrays( GL_POINTS, 0, pointcloud.count );
 }
 
+static void pointcloud_packvert( pointcloud_vert *vert, v3f pos, v4f colour ){
+   for( u32 i=0; i<3; i++ )
+      vert->pos[i] = (pos[i]-0.5f) * 32767.0f;
+
+   for( u32 i=0; i<4; i++ )
+      vert->colour[i] = colour[i] * 255.0f;
+}
+
 #endif /* POINTCLOUD_H */
index 8567cdb7cc580513f120737f6bb78d5a3bf8cf75..d2816d111ba4a4a45ddb4dbb26224911b734ac01 100644 (file)
@@ -6,6 +6,7 @@
 #define ROUTES_C
 
 #include <time.h>
+#include "entity.h"
 #include "world_routes.h"
 #include "world_gate.h"
 #include "world_load.h"
@@ -250,15 +251,12 @@ void world_routes_pointcloud_spot( world_instance *world,
       v3_sub( point, pcbuf->boundary[0], pos );
       v3_mul( pos, inv_ext, pos );
 
-      for( u32 i=0; i<3; i++ ){
-         vert->pos[i] = (pos[i]-0.5f) * 32767.0f;
-      }
-
       float dist = 1.0f-(v3_length(jitter));
 
-      for( u32 i=0; i<4; i++ ){
-         vert->colour[i] = colour[i] * 255.0f * dist*dist;
-      }
+      v4f final_colour;
+      v4_muls( colour, dist*dist, final_colour );
+
+      pointcloud_packvert( vert, pos, final_colour );
    }
 }
 
@@ -302,14 +300,7 @@ void world_routes_pointcloud_tower( world_instance *world,
       v3_sub( point, pcbuf->boundary[0], point );
       v3_mul( point, inv_ext, point );
 
-      /* TODO....... */
-      for( u32 i=0; i<3; i++ ){
-         vert->pos[i] = (point[i]-0.5f) * 32767.0f;
-      }
-
-      for( u32 i=0; i<4; i++ ){
-         vert->colour[i] = colour[i] * 255.0f;
-      }
+      pointcloud_packvert( vert, point, colour );
    }
 }
 
@@ -662,10 +653,6 @@ VG_STATIC f64 world_routes_scatter_surface_points( world_instance *world,
          v3_sub( pt, pcbuf->boundary[0], pos );
          v3_mul( pos, inv_ext, pos );
 
-         for( u32 i=0; i<3; i++ ){
-            vert->pos[i] = (pos[i]-0.5f) * 32767.0f;
-         }
-
          static v4f colours[] = {
             [k_surface_prop_concrete] = { 0.13, 0.15, 0.17, 1.0 },
             [k_surface_prop_grass]    = { 0.07, 0.1, 0.14, 1.0 },
@@ -675,16 +662,13 @@ VG_STATIC f64 world_routes_scatter_surface_points( world_instance *world,
          };
 
          v4f col = {0.0f,0.0f,0.0f,0.0f};
-         if( surf->info.surface_prop < vg_list_size(colours) ){
+         if( surf->info.surface_prop < vg_list_size(colours) )
             v4_copy( colours[surf->info.surface_prop], col );
-         }
 
          f32 brightness = v3_dot(vn,light_dir)*0.5f+0.5f;
          v3_muls( col, brightness, col );
 
-         for( u32 j=0; j<4; j++ ){
-            vert->colour[j] = col[j] * 255.0f;
-         }
+         pointcloud_packvert( vert, pos, col );
       }
    }
 
@@ -753,13 +737,7 @@ VG_STATIC void world_routes_surface_grid( world_instance *world,
                   v3_sub( hit, pcbuf->boundary[0], co );
                   v3_mul( co, inv_ext, co );
 
-                  for( u32 i=0; i<3; i++ ){
-                     vert->pos[i] = (co[i]-0.5f) * 32767.0f;
-                  }
-
-                  for( u32 i=0; i<4; i++ ){
-                     vert->colour[i] = colour[i] * 255.0f;
-                  }
+                  pointcloud_packvert( vert, co, colour );
                }
             }
          }