float VLight_LerpLight(int index1, int index2, float ilerp, float apitch, float ayaw) { float lightval1; float lightval2; lightval1 = VLight_GetLightValue(index1, apitch, ayaw); lightval2 = VLight_GetLightValue(index2, apitch, ayaw); return (lightval2*ilerp) + (lightval1*(1-ilerp)); }
float VLight_LerpLight ( int32_t index1, int32_t index2, float ilerp, vec3_t dir, vec3_t angles, qboolean dlight ) { vec3_t normal; normal[0] = r_avertexnormals[index1][0] + ( r_avertexnormals[index2][0] - r_avertexnormals[index1][0] ) * ilerp; normal[1] = r_avertexnormals[index1][1] + ( r_avertexnormals[index2][1] - r_avertexnormals[index1][1] ) * ilerp; normal[2] = r_avertexnormals[index1][2] + ( r_avertexnormals[index2][2] - r_avertexnormals[index1][2] ) * ilerp; VectorNormalize ( normal ); return VLight_GetLightValue( normal, dir, angles[PITCH], angles[YAW], dlight ); }
/* ================= R_LightAliasModel ================= */ void R_LightAliasModel (vec3_t baselight, vec3_t normal, vec3_t lightOut, byte normalindex, qboolean shaded) //byte oldnormalindex, float backlerp) { int i; float l; if (r_model_shading->value) { if (shaded) { if (r_model_shading->value == 3) l = 2.0 * shadedots[normalindex] - 1; else if (r_model_shading->value == 2) l = 1.5 * shadedots[normalindex] - 0.5; else l = shadedots[normalindex]; VectorScale(baselight, l, lightOut); } else VectorCopy(baselight, lightOut); if (model_dlights_num) for (i=0; i<model_dlights_num; i++) { l = 2.0 * VLight_GetLightValue (normal, model_dlights[i].direction, currententity->angles[PITCH], currententity->angles[YAW], true); VectorMA(lightOut, l, model_dlights[i].color, lightOut); } } else { l = 2.0 * VLight_GetLightValue (normal, aliasLightDir, currententity->angles[PITCH], currententity->angles[YAW], false); VectorScale(baselight, l, lightOut); } for (i=0; i<3; i++) lightOut[i] = max(min(lightOut[i], 1.0f), 0.0f); }