+/*
+ * '
+ * .
+ * |
+ * |
+ * /#\
+ * -'###`-
+ */
+VG_STATIC
+void world_routes_pointcloud_tower( world_instance *world,
+ pointcloud_buffer *pcbuf,
+ v3f co, f32 radius, f32 height,
+ u32 samples, v4f colour )
+{
+ v3f inv_ext;
+ v3_sub( pcbuf->boundary[1], pcbuf->boundary[0], inv_ext );
+ v3_div( (v3f){1.0f,1.0f,1.0f}, inv_ext, inv_ext );
+
+ for( u32 j=0; j<samples; j++ ){
+ if( pcbuf->count >= pcbuf->max )
+ return;
+
+ pointcloud_vert *vert = &pcbuf->buf[ pcbuf->count ++ ];
+
+ v3f point;
+ point[0] = vg_randf64()*2.0f-1.0f;
+ point[1] = 0.0f;
+ point[2] = vg_randf64()*2.0f-1.0f;
+ v3_normalize( point );
+ v3_muls( point, sqrtf(vg_randf64()), point );
+
+ f32 h = vg_randf64();
+ point[1] = h*h*h*height;
+ point[0] *= radius;
+ point[2] *= radius;
+
+ v3_add( point, co, point );
+ 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;
+ }
+ }
+}
+