fix vertex blend data
authorhgn <hgodden00@gmail.com>
Mon, 27 Nov 2023 11:50:19 +0000 (11:50 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 27 Nov 2023 11:50:19 +0000 (11:50 +0000)
scene.h
shaders/scene_vertex_blend.h
world_gen.c
world_routes.c

diff --git a/scene.h b/scene.h
index f448bbc2f8b719c5dd0651d0632408f758df874b..8aaafe9239538035cc43c74d55491d2409209ac0 100644 (file)
--- a/scene.h
+++ b/scene.h
@@ -73,8 +73,7 @@ void scene_supply_buffer( scene_context *ctx, void *buffer )
    ctx->arrindices  = (u32*)(((u8*)buffer) + vertex_length);
 }
 
-static void scene_vert_pack_norm( scene_vert *vert, v3f norm )
-{
+static void scene_vert_pack_norm( scene_vert *vert, v3f norm, f32 blend ){
    v3f n;
    v3_muls( norm, 127.0f, n );
    v3_minv( n, (v3f){  127.0f,  127.0f,  127.0f }, n );
@@ -82,7 +81,7 @@ static void scene_vert_pack_norm( scene_vert *vert, v3f norm )
    vert->norm[0] = n[0];
    vert->norm[1] = n[1];
    vert->norm[2] = n[2];
-   vert->norm[3] = 0;  /* free byte :D */
+   vert->norm[3] = blend * 127.0f;
 }
 
 /* 
@@ -129,7 +128,7 @@ static void scene_add_mdl_submesh( scene_context *ctx, mdl_context *mdl,
 
       v3f normal;
       m3x3_mulv( normal_matrix, src->norm, normal );
-      scene_vert_pack_norm( pvert, normal );
+      scene_vert_pack_norm( pvert, normal, src->colour[0]*(1.0f/255.0f) );
       
       v2_copy( src->uv, pvert->uv );
    }
index 2cc345b6c95768a7ff6d9b82f9d3764d84f5bba3..c5206d125dc08e4667b78b26644aaeb4878a45a7 100644 (file)
@@ -477,7 +477,7 @@ static struct vg_shader _shader_scene_vertex_blend = {
 "   vec4 rgarbage = texture( uTexGarbage, uvdiffuse );\n"
 "\n"
 "   // Colour blending\n"
-"   float fblendclip = step(0.380,aNorm.w + (rgarbage.r-0.5)*-1.740)*0.320;\n"
+"   float fblendclip = step(0.380,aNorm.w + (rgarbage.r-0.5)*-1.740)*0.380;\n"
 "   vec2 uvgradients = aUv + vec2( fblendclip, 0.0 );\n"
 "\n"
 "   vfrag = texture( uTexGradients, uvgradients ).rgb;\n"
@@ -489,7 +489,7 @@ static struct vg_shader _shader_scene_vertex_blend = {
 "   }\n"
 "\n"
 "   vfrag = scene_compute_lighting( vfrag, qnorm, aWorldCo );\n"
-"   oColour = vec4(vfrag, 1.0);\n"
+"   oColour = vec4(vec3(aNorm.w), 1.0);\n"
 "}\n"
 ""},
 };
index 4e01de338cfbd70e5e9b4c4319535702825be504..df5b342e40fb11965c963a0ce4009db6a4da31bb 100644 (file)
@@ -85,13 +85,12 @@ static void world_gen_add_blob( world_instance *world,
 
    scene_vert *ref       = &world->scene_geo.arrvertices[ hit->tri[0] ];
 
-   for( u32 i=0; i<vg_list_size(verts); i++ )
-   {
+   for( u32 i=0; i<vg_list_size(verts); i++ ){
       scene_vert *pvert = &dst_verts[ i ],
                  *src   = &verts[ i ];
 
       m4x3_mulv( transform, src->co, pvert->co );
-      scene_vert_pack_norm( pvert, transform[1] );
+      scene_vert_pack_norm( pvert, transform[1], 0.0f );
 
       v2_copy( ref->uv, pvert->uv );
    }
index 0bfdcac8bf92ac1406032a6f0c427f73e04ecad4..fbd335ef5d88b622cee6cd0b49fd5d771429577a 100644 (file)
@@ -315,8 +315,8 @@ void world_routes_place_curve( world_instance *world, ent_route *route,
             v3_muladds( ha.pos, up, 0.06f+gap, va.co );
             v3_muladds( hb.pos, up, 0.06f+gap, vb.co );
 
-            scene_vert_pack_norm( &va, up );
-            scene_vert_pack_norm( &vb, up );
+            scene_vert_pack_norm( &va, up, 0.0f );
+            scene_vert_pack_norm( &vb, up, 0.0f );
 
             float t1 = (travel_length / total_length) * patch_count;
             va.uv[0] = t1;