Guest User

Untitled

a guest
Sep 25th, 2011
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.11 KB | None | 0 0
  1. //This function will compute a block's UV given a block's normal in world coordinates and it's world position.
  2. void ComputeBlockUV(inout float3 normal, float4 worldPos, out float2 uv0, out float4 dxdy)
  3. {
  4.   float3 dx = ddx(worldPos.xyz);
  5.   float3 dy = ddy(worldPos.xyz);
  6.   normal = normalize(cross(dy, dx));
  7.  
  8.   if(normal.x > 0.5)
  9.     {
  10.       uv0 = frac(float2(-worldPos.z, -worldPos.y));
  11.       dxdy = float4(dx.zy, dy.zy);
  12.     }
  13.  
  14.   if(normal.x < -0.5)
  15.     {
  16.       uv0 = frac(float2(worldPos.z, -worldPos.y));
  17.       dxdy = float4(dx.zy, dy.zy);
  18.     }
  19.   //top
  20.  
  21.   if(normal.y > 0.5)
  22.     {
  23.       uv0 = frac(worldPos.xz);
  24.       dxdy = float4(dx.xz, dy.xz);
  25.     }
  26.  
  27.   //bottom
  28.   if(normal.y < -0.5)
  29.     {
  30.       uv0 = frac(float2(-worldPos.x, worldPos.z));
  31.       dxdy = float4(dx.xz, dy.xz);
  32.     }
  33.  
  34.   if(normal.z > 0.5)
  35.     {
  36.       uv0 = frac(float2(worldPos.x, -worldPos.y));
  37.       dxdy = float4(dx.xy, dy.xy);
  38.       //uv0 = float2(In.worldPos.x, -In.worldPos.y);
  39.     }
  40.   if(normal.z < -0.5)
  41.     {
  42.       uv0 = frac(float2(-worldPos.x,-worldPos.y));
  43.       dxdy = float4(dx.xy, dy.xy);
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment