fix some errors
authorhgn <hgodden00@gmail.com>
Sat, 28 Jan 2023 04:46:11 +0000 (04:46 +0000)
committerhgn <hgodden00@gmail.com>
Sat, 28 Jan 2023 04:46:11 +0000 (04:46 +0000)
common.h
player_device_skate.h
player_interface.h
shaders/fscolour.h
shaders/gate.h
shaders/planeinf.h
shaders/viewchar.fs
shaders/viewchar.h

index a7cb78fc7c1d89f490945cf9cfa0a3a7b69a481b..a8d0e868e9dfafa729a4c748f7e41e1ae1baabff 100644 (file)
--- a/common.h
+++ b/common.h
@@ -117,7 +117,7 @@ VG_STATIC float
    k_pitch_limit           = 1.5f,
    k_look_speed            = 2.0f,
 
-   k_spin_boost            = 1.5f,
+   k_spin_boost            = 2.2f,
 
    k_cog_spring            = 0.2f,
    k_cog_damp              = 0.02f,
index 62c21210b9bd29fd9e89950ec57058c54fe51b59..5370c291d7e98b384b99cfa156f9e50e9f414666 100644 (file)
@@ -1149,6 +1149,14 @@ VG_STATIC void player_skate_update( player_interface *player,
    skate_apply_air_model( player, s );
 
    skate_integrate( player, s );
+
+   vg_line_pt3( s->state.cog, 0.1f,  VG__WHITE );
+   vg_line_pt3( s->state.cog, 0.11f, VG__WHITE );
+   vg_line_pt3( s->state.cog, 0.12f, VG__WHITE );
+   vg_line_pt3( s->state.cog, 0.13f, VG__WHITE );
+   vg_line_pt3( s->state.cog, 0.14f, VG__WHITE );
+
+   vg_line( player->rb.co, s->state.cog, VG__RED );
 }
 
 VG_STATIC void player_skate_post_update( player_interface *player,
@@ -1211,6 +1219,9 @@ VG_STATIC void player_skate_pose( player_interface *player,
    v3f offset;
    v3_zero( offset );
 
+   m4x3_mulv( player->rb.to_local, s->state.cog, offset );
+   v3_muls( offset, -4.0f, offset );
+
 #if 0
    m3x3_mulv( player.inv_visual_transform, phys->bob, offset );
 #endif
@@ -1428,7 +1439,7 @@ VG_STATIC void player_skate_get_camera( player_interface *player,
        look_dir;
 
    v3_copy( player->rb.v, vel_dir );
-   v3_normalize( vel_dir );
+   //v3_normalize( vel_dir );
 
    float tti = s->land_dist;
    v3f   norm;
@@ -1440,12 +1451,11 @@ VG_STATIC void player_skate_get_camera( player_interface *player,
       v3_copy( player->rb.to_world[1], norm );
    }
 
-
    v3_muladds( vel_dir, norm, -v3_dot(vel_dir,norm), flat_dir );
-   v3_normalize( flat_dir );
+   //v3_normalize( flat_dir );
 
    v3_lerp( flat_dir, vel_dir, vg_clampf( tti / 2.0f, 0.4f, 1.0f ), look_dir );
-   v3_lerp( s->state.vl, look_dir, 8.0f*vg.time_delta, s->state.vl );
+   v3_lerp( s->state.vl, look_dir, 4.0f*vg.time_delta, s->state.vl );
 
    float *v  = s->state.vl,
          yaw = atan2f( v[0], -v[2] ),
@@ -1470,18 +1480,28 @@ VG_STATIC void player_skate_transport( player_interface *player,
    struct player_device_skate *s = at->storage;
 
    m4x3_mulv( gate->transport, player->rb.co,  player->rb.co );
+   m3x3_mulv( gate->transport, player->rb.v,   player->rb.v );
    m4x3_mulv( gate->transport, s->state.cog,   s->state.cog );
    m3x3_mulv( gate->transport, s->state.cog_v, s->state.cog_v );
-   m3x3_mulv( gate->transport, player->rb.v,   player->rb.v );
    m3x3_mulv( gate->transport, s->state.vl,    s->state.vl );
+   m3x3_mulv( gate->transport, s->state.throw_v, s->state.throw_v );
 
    v4f transport_rotation;
    m3x3_q( gate->transport, transport_rotation );
    q_mul( transport_rotation, player->rb.q, player->rb.q );
+   rb_update_transform( &player->rb );
 
    s->state_gate_storage = s->state;
 }
 
+VG_STATIC void player_skate_reset( player_interface *player,
+                                   player_attachment *at,
+                                   struct respawn_point *rp )
+{
+   struct player_device_skate *s = at->storage;
+   v3_muladds( player->rb.co, player->rb.to_world[1], 1.0f, s->state.cog );
+}
+
 VG_STATIC player_device player_device_skate =
 {
    .pre_update    = player_skate_pre_update,
@@ -1491,7 +1511,8 @@ VG_STATIC player_device player_device_skate =
    .debug_ui      = player_skate_ui,
    .bind          = player_skate_bind,
    .pose          = player_skate_pose,
-   .gate_transport= player_skate_transport
+   .gate_transport= player_skate_transport,
+   .reset         = player_skate_reset
 };
 
 #endif /* PLAYER_DEVICE_SKATE_H */
index 1b9e16bc6b59528681d277fc0caee1b1a1c43846..a4be40ed5177fe1a0fde9048a7c18d25740c9490 100644 (file)
@@ -310,6 +310,9 @@ VG_STATIC void player_spawn( player_interface *player,
    v3_zero( player->rb.w );
    q_identity( player->rb.q );
    rb_update_transform( &player->rb );
+
+   if( player->dev.device->reset )
+      player->dev.device->reset( player, &player->dev, rp );
 }
 
 /*
index 7318cac89d044434f05b4ef95c683ce35e3b3962..08fe21edb838ab280fde040862da9265845dd59f 100644 (file)
@@ -7,6 +7,7 @@ static struct vg_shader _shader_fscolour = {
    .link = shader_fscolour_link,
    .vs = 
 {
+.orig_file = "../../shaders/blit.vs",
 .static_src = 
 "layout (location=0) in vec2 a_co;\n"
 "out vec2 aUv;\n"
@@ -19,6 +20,7 @@ static struct vg_shader _shader_fscolour = {
 ""},
    .fs = 
 {
+.orig_file = "../../shaders/colour.fs",
 .static_src = 
 "out vec4 FragColor;\n"
 "uniform vec4 uColour;\n"
@@ -34,7 +36,7 @@ static struct vg_shader _shader_fscolour = {
 
 static GLuint _uniform_fscolour_uColour;
 static void shader_fscolour_uColour(v4f v){
-   glUniform4fv(_uniform_fscolour_uColour,1,v);
+   glUniform4fv( _uniform_fscolour_uColour, 1, v );
 }
 static void shader_fscolour_register(void){
    vg_shader_register( &_shader_fscolour );
index 7b5b31f4dd2d31a0a44bf1e55a64db6b55ceb8ce..51eb312d2af53053f600b08fa3d982855c522b14 100644 (file)
@@ -7,6 +7,7 @@ static struct vg_shader _shader_gate = {
    .link = shader_gate_link,
    .vs = 
 {
+.orig_file = "../../shaders/gate.vs",
 .static_src = 
 "layout (location=0) in vec3 a_co;\n"
 "layout (location=1) in vec3 a_norm;\n"
@@ -35,6 +36,7 @@ static struct vg_shader _shader_gate = {
 ""},
    .fs = 
 {
+.orig_file = "../../shaders/gate.fs",
 .static_src = 
 "out vec4 FragColor;\n"
 "\n"
@@ -74,25 +76,25 @@ static GLuint _uniform_gate_uInvRes;
 static GLuint _uniform_gate_uTime;
 static GLuint _uniform_gate_uCam;
 static void shader_gate_uPv(m4x4f m){
-   glUniformMatrix4fv(_uniform_gate_uPv,1,GL_FALSE,(float*)m);
+   glUniformMatrix4fv( _uniform_gate_uPv, 1, GL_FALSE, (float *)m );
 }
 static void shader_gate_uMdl(m4x3f m){
-   glUniformMatrix4x3fv(_uniform_gate_uMdl,1,GL_FALSE,(float*)m);
+   glUniformMatrix4x3fv( _uniform_gate_uMdl, 1, GL_FALSE, (float *)m );
 }
 static void shader_gate_uTexMain(int i){
-   glUniform1i(_uniform_gate_uTexMain,i);
+   glUniform1i( _uniform_gate_uTexMain, i );
 }
 static void shader_gate_uTexWater(int i){
-   glUniform1i(_uniform_gate_uTexWater,i);
+   glUniform1i( _uniform_gate_uTexWater, i );
 }
 static void shader_gate_uInvRes(v2f v){
-   glUniform2fv(_uniform_gate_uInvRes,1,v);
+   glUniform2fv( _uniform_gate_uInvRes, 1, v );
 }
 static void shader_gate_uTime(float f){
-   glUniform1f(_uniform_gate_uTime,f);
+   glUniform1f( _uniform_gate_uTime, f );
 }
 static void shader_gate_uCam(v3f v){
-   glUniform3fv(_uniform_gate_uCam,1,v);
+   glUniform3fv( _uniform_gate_uCam, 1, v );
 }
 static void shader_gate_register(void){
    vg_shader_register( &_shader_gate );
index e61776898ba2336214378d90d1de6ca594f2ab4d..4bd7e86eb06b1824dff68abc9e1fc48f4bb5d3ef 100644 (file)
@@ -7,6 +7,7 @@ static struct vg_shader _shader_planeinf = {
    .link = shader_planeinf_link,
    .vs = 
 {
+.orig_file = "../../shaders/standard.vs",
 .static_src = 
 "layout (location=0) in vec3 a_co;\n"
 "layout (location=1) in vec3 a_norm;\n"
@@ -16,11 +17,29 @@ static struct vg_shader _shader_planeinf = {
 "layout (location=5) in ivec4 a_groups;\n"
 "\n"
 "#line      2        0 \n"
+"#line       1        2 \n"
+"const float k_motion_lerp_amount = 0.01;\n"
+"\n"
+"#line      2        0 \n"
+"\n"
+"out vec3 aMotionVec0;\n"
+"out vec3 aMotionVec1;\n"
+"\n"
+"void vs_motion_out( vec4 vproj0, vec4 vproj1 )\n"
+"{\n"
+"   // This magically solves some artifacting errors!\n"
+"   //\n"
+"   vproj1 = vproj0*(1.0-k_motion_lerp_amount) + vproj1*k_motion_lerp_amount;\n"
+"\n"
+"   aMotionVec0 = vec3( vproj0.xy, vproj0.w );\n"
+"   aMotionVec1 = vec3( vproj1.xy, vproj1.w );\n"
+"}\n"
+"\n"
+"#line      3        0 \n"
 "\n"
 "uniform mat4x3 uMdl;\n"
 "uniform mat4 uPv;\n"
-"\n"
-"uniform mat4x3 uMotion;\n"
+"uniform mat4 uPvmPrev;\n"
 "\n"
 "out vec4 aColour;\n"
 "out vec2 aUv;\n"
@@ -28,19 +47,13 @@ static struct vg_shader _shader_planeinf = {
 "out vec3 aCo;\n"
 "out vec3 aWorldCo;\n"
 "\n"
-"out vec3 aMotionVec0;\n"
-"out vec3 aMotionVec1;\n"
-"\n"
 "void main()\n"
 "{\n"
-"   vec3 world_pos0 = uMdl    * vec4(a_co,1.0);\n"
-"   vec3 world_pos1 = uMotion * vec4(world_pos0,1.0);\n"
-"   \n"
-"   vec4 vproj0 = uPv * vec4( world_pos0, 1.0 );\n"
-"   vec4 vproj1 = uPv * vec4( world_pos1, 1.0 );\n"
+"   vec3 world_pos0 = uMdl     * vec4( a_co, 1.0 );\n"
+"   vec4 vproj0     = uPv      * vec4( world_pos0, 1.0 );\n"
+"   vec4 vproj1     = uPvmPrev * vec4( a_co, 1.0 );\n"
 "\n"
-"   aMotionVec0 = vec3( vproj0.xy, vproj0.w );\n"
-"   aMotionVec1 = vec3( vproj1.xy, vproj1.w );\n"
+"   vs_motion_out( vproj0, vproj1 );\n"
 "\n"
 "   gl_Position = vproj0;\n"
 "   aWorldCo = world_pos0;\n"
@@ -52,6 +65,7 @@ static struct vg_shader _shader_planeinf = {
 ""},
    .fs = 
 {
+.orig_file = "../../shaders/planeinf.fs",
 .static_src = 
 "\n"
 "#line      2        0 \n"
@@ -85,23 +99,23 @@ static struct vg_shader _shader_planeinf = {
 
 static GLuint _uniform_planeinf_uMdl;
 static GLuint _uniform_planeinf_uPv;
-static GLuint _uniform_planeinf_uMotion;
+static GLuint _uniform_planeinf_uPvmPrev;
 static GLuint _uniform_planeinf_uCamera;
 static GLuint _uniform_planeinf_uPlane;
 static void shader_planeinf_uMdl(m4x3f m){
-   glUniformMatrix4x3fv(_uniform_planeinf_uMdl,1,GL_FALSE,(float*)m);
+   glUniformMatrix4x3fv( _uniform_planeinf_uMdl, 1, GL_FALSE, (float *)m );
 }
 static void shader_planeinf_uPv(m4x4f m){
-   glUniformMatrix4fv(_uniform_planeinf_uPv,1,GL_FALSE,(float*)m);
+   glUniformMatrix4fv( _uniform_planeinf_uPv, 1, GL_FALSE, (float *)m );
 }
-static void shader_planeinf_uMotion(m4x3f m){
-   glUniformMatrix4x3fv(_uniform_planeinf_uMotion,1,GL_FALSE,(float*)m);
+static void shader_planeinf_uPvmPrev(m4x4f m){
+   glUniformMatrix4fv( _uniform_planeinf_uPvmPrev, 1, GL_FALSE, (float *)m );
 }
 static void shader_planeinf_uCamera(v3f v){
-   glUniform3fv(_uniform_planeinf_uCamera,1,v);
+   glUniform3fv( _uniform_planeinf_uCamera, 1, v );
 }
 static void shader_planeinf_uPlane(v4f v){
-   glUniform4fv(_uniform_planeinf_uPlane,1,v);
+   glUniform4fv( _uniform_planeinf_uPlane, 1, v );
 }
 static void shader_planeinf_register(void){
    vg_shader_register( &_shader_planeinf );
@@ -110,7 +124,7 @@ static void shader_planeinf_use(void){ glUseProgram(_shader_planeinf.id); }
 static void shader_planeinf_link(void){
    _uniform_planeinf_uMdl = glGetUniformLocation( _shader_planeinf.id, "uMdl" );
    _uniform_planeinf_uPv = glGetUniformLocation( _shader_planeinf.id, "uPv" );
-   _uniform_planeinf_uMotion = glGetUniformLocation( _shader_planeinf.id, "uMotion" );
+   _uniform_planeinf_uPvmPrev = glGetUniformLocation( _shader_planeinf.id, "uPvmPrev" );
    _uniform_planeinf_uCamera = glGetUniformLocation( _shader_planeinf.id, "uCamera" );
    _uniform_planeinf_uPlane = glGetUniformLocation( _shader_planeinf.id, "uPlane" );
 }
index f7e0370a06aeaa2c73a93d63198d166cef711968..fb98283b0d6dd080679f1074783fe9bf49d62f64 100644 (file)
@@ -20,6 +20,7 @@ void main()
    vec3 halfview = uCamera - aWorldCo;
    float fdist = length( halfview );
    halfview /= fdist;
+   fdist -= 0.08;
 
    vec3 qnorm = normalize(floor(aNorm*2.0)*0.5) + vec3(0.001,0.0,0.0);
 
@@ -28,6 +29,6 @@ void main()
    vfrag = do_light_shadowing( vfrag );
    vfrag = apply_fog( vfrag, fdist );
 
-   float opacity = clamp( fdist*fdist, 0.1, 1.0 );
+   float opacity = clamp( fdist*fdist, 0.0, 1.0 );
    oColour = vec4(vfrag,opacity);
 }
index 604cae2534ba85af4b973e54d2d565de9b5e614e..f65b5eaa3eb27c02dc54c72855b65cf1978c3a28 100644 (file)
@@ -223,6 +223,7 @@ static struct vg_shader _shader_viewchar = {
 "   vec3 halfview = uCamera - aWorldCo;\n"
 "   float fdist = length( halfview );\n"
 "   halfview /= fdist;\n"
+"   fdist -= 0.08;\n"
 "\n"
 "   vec3 qnorm = normalize(floor(aNorm*2.0)*0.5) + vec3(0.001,0.0,0.0);\n"
 "\n"
@@ -231,7 +232,7 @@ static struct vg_shader _shader_viewchar = {
 "   vfrag = do_light_shadowing( vfrag );\n"
 "   vfrag = apply_fog( vfrag, fdist );\n"
 "\n"
-"   float opacity = clamp( fdist*fdist, 0.1, 1.0 );\n"
+"   float opacity = clamp( fdist*fdist, 0.0, 1.0 );\n"
 "   oColour = vec4(vfrag,opacity);\n"
 "}\n"
 ""},