"uniform mat4 uPv;"
"uniform mat4x3 uMdl;"
- "uniform vec3 uOpacityLight;"
+ "uniform float uOpacity;"
""
"out vec4 aColour;"
"out vec2 aUv;"
"aUv = a_uv;"
"aNorm = mat3(uMdl) * a_norm;"
"aCo = a_co;"
- "aOpacity = 1.0-(gl_Position.y+0.5);"
+ "aOpacity = 1.0-(gl_Position.y+0.5)*uOpacity;"
"}",
/* Fragment */
"out vec4 FragColor;"
"FragColor = vec4(pow(diffuse,vec3(1.0)),aOpacity);"
"}"
,
- UNIFORMS({ "uTexMain", "uPv", "uMdl", "uOpacityLight" })
+ UNIFORMS({ "uTexMain", "uPv", "uMdl", "uOpacity" })
)
#define FOREACH_PART(FN) \
#define B3D_CO( X, Y, Z ) (v3f){ X, Z, -Y }
-struct character_rig_lower
+typedef struct character_pose character_pose;
+struct character_pose
{
v3f b0, b1, p, fr, fl, pl, pr, hl, hr, apl, apr, cam;
};
-static struct character_rig_lower character_pose_aero =
+static character_pose pose_aero =
{
.b0 = {0.0721f, 0.8167f, 0.1365f},
.b1 = {-0.0773f, 1.1559f, -0.1699f},
.cam = {-0.3394f, 1.2661f, 0.2936f}
};
-static struct character_rig_lower character_pose_slide =
+static character_pose pose_slide =
{
.b0 = {0.6732f, 0.5565f, -0.0000f},
.b1 = {0.8116f, 1.0547f, 0.0613f},
.cam = {0.9888f, 1.4037f, 0.6081f}
};
-static struct character_rig_lower character_pose_slide1 =
+static character_pose pose_slide1 =
{
.b0 = {-0.2385f, 0.6403f, 0.1368f},
.b1 = {-0.5151f, 1.1351f, 0.1380f},
.cam = {-1.0508f, 1.0769f, 0.0528f}
};
-static struct character_rig_lower character_pose_aero_reverse =
+static character_pose pose_aero_reverse =
{
.b0 = {0.0616f, 0.8167f, -0.1415f},
.b1 = {0.0148f, 1.1559f, 0.1861f},
.cam = {-0.3394f, 1.2661f, -0.2936f}
};
-static struct character_rig_lower character_pose_stand =
+static character_pose pose_stand =
{
.b0 = {0.1877f, 1.0663f, 0.0063f},
.b1 = {0.0499f, 1.5564f, -0.0584f},
.cam = {-0.3477f, 1.5884f, -0.0019f}
};
-static struct character_rig_lower character_pose_fly =
+static character_pose pose_fly =
{
.b0 = {0.2995f, 0.6819f, -0.1369f},
.b1 = {0.1618f, 1.1720f, -0.2016f},
.cam = {-0.2727f, 1.2606f, 0.3564f}
};
-static void character_rig_lower_blend( struct character *ch,
- struct character_rig_lower *pose, float q )
+static
+void character_pose_blend( struct character *ch, character_pose *pose, float q )
{
v3_muladds( ch->ik_body.base, pose->b0, q, ch->ik_body.base );
v3_muladds( ch->ik_body.end, pose->b1, q, ch->ik_body.end );
v3_muladds( ch->cam_pos, pose->cam, q, ch->cam_pos );
}
-static void character_pose_with_tilt( struct character *ch, v3f cog,
- struct character_rig_lower *pose, float q )
+static
+void character_final_pose( struct character *ch, v3f cog,
+ character_pose *pose, float q )
{
- struct character_rig_lower npose;
+ character_pose npose;
float dip = vg_clampf(cog[1], -1.0f, 0.3f) * 0.35f,
tilt = vg_clampf(cog[2], -1.0f, 1.0f) * 0.3f;
v3_copy( pose->fl, npose.fl );
v3_copy( pose->cam, npose.cam );
- character_rig_lower_blend( ch, &npose, q );
+ character_pose_blend( ch, &npose, q );
}
static void zero_ik_basic( struct ik_basic *ik )
m4x3_identity( ch->matrices[k_chpart_wf] );
}
-static void character_draw( struct character *ch )
+static void character_draw( struct character *ch, float temp )
{
SHADER_USE(shader_player);
glUniformMatrix4fv( SHADER_UNIFORM( shader_player, "uPv" ),
1, GL_FALSE, (float *)vg_pv );
glUniform1i( SHADER_UNIFORM( shader_player, "uTexMain" ), 0 );
- glUniform3fv( SHADER_UNIFORM( shader_player, "uOpacityLight" ), 1,
- ch->matrices[k_chpart_neck][3] );
+ glUniform1f( SHADER_UNIFORM( shader_player, "uOpacity" ), temp );
GLint kuMdl = SHADER_UNIFORM( shader_player, "uMdl" );
SHADER_INIT(shader_player);
}
-#undef FOREACH_PART
-#undef MAKE_ENUM
-#undef MAKE_STRING
-#undef ADD_ONE
#endif