Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.10 KB | None | 0 0
  1. vec2 CalcTexCoords()
  2. {
  3.   vec2 tempTexCoords;
  4.   switch (projector)
  5.   {
  6.   case PROJ_CUBE:
  7.     {
  8.       vec3 absVec;
  9.       if (texEntity == TEXENT_NORMAL)
  10.         absVec = abs(vNormal);
  11.       else // TEXENT_POSITION
  12.         absVec = abs(vPos);
  13.       vec2 UV;
  14.  
  15.       // +-X
  16.       if (absVec.x >= absVec.y && absVec.x >= absVec.z)
  17.       {
  18.         if (vPos.x < 0.0)
  19.           (UV.s = vPos.z);
  20.         else
  21.           (UV.s = -vPos.z);
  22.         UV.t = vPos.y;
  23.         UV.s /= maxbox.z;
  24.         UV.t /= maxbox.y;
  25.         //UV.s /= absVec.x;
  26.         //UV.t /= absVec.x;
  27.       }
  28.       // +-Y
  29.       else if (absVec.y >= absVec.x && absVec.y >= absVec.z)
  30.       {
  31.         if (vPos.y < 0.0)
  32.           (UV.t = vPos.z);
  33.         else
  34.           (UV.t = -vPos.z);
  35.         UV.s = vPos.x;
  36.         UV.s /= maxbox.x;
  37.         UV.t /= maxbox.z;
  38.       }
  39.       // +-Z
  40.       else
  41.       {
  42.         if (vPos.z < 0.0)
  43.           (UV.s = -vPos.x);
  44.         else
  45.           (UV.s = vPos.x);
  46.         UV.t = vPos.y;
  47.         UV.s /= maxbox.x;
  48.         UV.t /= maxbox.y;
  49.       }
  50.  
  51.       UV = (UV + 1.f) / 2.f;
  52.       tempTexCoords = UV;
  53.     }
  54.     break;
  55.   case PROJ_SPHERE:
  56.     {
  57.       vec3 tpos;
  58.       if (texEntity == TEXENT_POSITION)
  59.         tpos = vPos - center;
  60.       else if (texEntity == TEXENT_NORMAL)
  61.         tpos = vNormal;
  62.       float theta = atan(tpos.y / tpos.x);
  63.       float Z = (tpos.z - minbox.z) / (maxbox.z - minbox.z);
  64.       float r = length(tpos);
  65.       float phi = acos(tpos.z / r);
  66.       float U = theta / TWO_PI; // convert to 0-1 range
  67.       float V = (PI - phi) / (PI);
  68.       tempTexCoords = vec2(U, V);
  69.     }
  70.     break;
  71.   case PROJ_CYLINDER:
  72.     {
  73.       vec3 tpos;
  74.       if (texEntity == TEXENT_POSITION)
  75.         tpos = vPos - center;
  76.       else if (texEntity == TEXENT_NORMAL)
  77.         tpos = vNormal;
  78.       float theta = atan(tpos.y / tpos.x);
  79.       float Z = (tpos.z - minbox.z) / (maxbox.z - minbox.z);
  80.       float U = theta / TWO_PI; // convert to 0-1 range
  81.       float V = Z;
  82.       tempTexCoords = vec2(U, V);
  83.     }
  84.     break;
  85.   default:
  86.     break;
  87.   }
  88.   return tempTexCoords;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement