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 );
}
}
-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 );
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;
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 */
#define ROUTES_C
#include <time.h>
+#include "entity.h"
#include "world_routes.h"
#include "world_gate.h"
#include "world_load.h"
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 );
}
}
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 );
}
}
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 },
};
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 );
}
}
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 );
}
}
}