Author: Not specified Language: c
Description: Not specified Timestamp: 2017-06-17 17:40:38 +0000
View raw paste Reply
  1.         case AGEN_NORMALZFADE:
  2.         {
  3.                 float alpha, range, lowest, highest, dot;
  4.                 vec3_t worldUp;
  5.                 qboolean zombieEffect = qfalse;
  6.  
  7.                 if ( VectorCompare( backEnd.currentEntity->e.fireRiseDir, vec3_origin ) ) {
  8.                         VectorSet( backEnd.currentEntity->e.fireRiseDir, 0, 0, 1 );
  9.                 }
  10.  
  11.                 if ( backEnd.currentEntity->e.hModel ) {    // world surfaces dont have an axis
  12.                         VectorRotate( backEnd.currentEntity->e.fireRiseDir, backEnd.currentEntity->e.axis, worldUp );
  13.                 } else {
  14.                         VectorCopy( backEnd.currentEntity->e.fireRiseDir, worldUp );
  15.                 }
  16.  
  17.                 lowest = pStage->zFadeBounds[0];
  18.                 if ( lowest == -1000 ) {    // use entity alpha
  19.                         lowest = backEnd.currentEntity->e.shaderTime.f; // FIXME support intShader correctly from tess.shaderTime or something
  20.                         zombieEffect = qtrue;
  21.                 }
  22.                 highest = pStage->zFadeBounds[1];
  23.                 if ( highest == -1000 ) {   // use entity alpha
  24.                         highest = backEnd.currentEntity->e.shaderTime.f; // FIXME support intShader correctly from tess.shaderTime or something
  25.                         zombieEffect = qtrue;
  26.                 }
  27.                 range = highest - lowest;
  28.                 for ( i = 0; i < tess.numVertexes; i++ ) {
  29.                         dot = DotProduct( tess.normal[i], worldUp );
  30.  
  31.                         // special handling for Zombie fade effect
  32.                         if ( zombieEffect ) {
  33.                                 alpha = (float)backEnd.currentEntity->e.shaderRGBA[3] * ( dot + 1.0 ) / 2.0;
  34.                                 alpha += ( 2.0 * (float)backEnd.currentEntity->e.shaderRGBA[3] ) * ( 1.0 - ( dot + 1.0 ) / 2.0 );
  35.                                 if ( alpha > 255.0 ) {
  36.                                         alpha = 255.0;
  37.                                 } else if ( alpha < 0.0 ) {
  38.                                         alpha = 0.0;
  39.                                 }
  40.                                 tess.svars.colors[i][3] = (byte)( alpha );
  41.                                 continue;
  42.                         }
  43.  
  44.                         if ( dot < highest ) {
  45.                                 if ( dot > lowest ) {
  46.                                         if ( dot < lowest + range / 2 ) {
  47.                                                 alpha = ( (float)pStage->constantColor[3] * ( ( dot - lowest ) / ( range / 2 ) ) );
  48.                                         } else {
  49.                                                 alpha = ( (float)pStage->constantColor[3] * ( 1.0 - ( ( dot - lowest - range / 2 ) / ( range / 2 ) ) ) );
  50.                                         }
  51.                                         if ( alpha > 255.0 ) {
  52.                                                 alpha = 255.0;
  53.                                         } else if ( alpha < 0.0 ) {
  54.                                                 alpha = 0.0;
  55.                                         }
  56.  
  57.                                         // finally, scale according to the entity's alpha
  58.                                         if ( backEnd.currentEntity->e.hModel ) {
  59.                                                 alpha *= (float)backEnd.currentEntity->e.shaderRGBA[3] / 255.0;
  60.                                         }
  61.  
  62.                                         tess.svars.colors[i][3] = (byte)( alpha );
  63.                                 } else {
  64.                                         tess.svars.colors[i][3] = 0;
  65.                                 }
  66.                         } else {
  67.                                 tess.svars.colors[i][3] = 0;
  68.                         }
  69.                 }
  70.         }
View raw paste Reply