纹理投影测试

2018-05-23 10:38:44 浏览数 (1)

对于不规则的几何体的纹理坐标, 差不多都是通过投影来算的吧

冒似有个"球状纹理"投影到一个物体上, 就像CubeMap

还有一种"圆柱形纹理", 对物体一圈进行投影

GPU Gems3里有个不规则地形(X,Y,Z三个方向上都有面), 这时就没法简单地用X,Z坐标来计算UV了

对于基于高度图的地形来说, 如果Y方向很高的话, 纹理会有明显的拉伸现象

这时就可以换个方向进行投影, 用于制作悬崖之类的复杂地形

  1. float4x4 matViewProjection;  
  2. float scaler;  
  3. struct VS_INPUT   
  4. {  
  5.    float4 Position : POSITION0;  
  6.    float3 Normal   : NORMAL0;  
  7. };  
  8. struct VS_OUTPUT   
  9. {  
  10.    float4 Position : POSITION0;  
  11.    float2 Texcoord : TEXCOORD0;  
  12. };  
  13. float2 GetCliffUV(float3 pos, float3 normal)  
  14. {  
  15. if (abs(normal.x) < abs(normal.z))  
  16.    {  
  17. return float2(pos.x, pos.y);  
  18.    }  
  19. else
  20.    {  
  21. return float2(pos.z, pos.y);  
  22.    }  
  23. }  
  24. VS_OUTPUT vs_main( VS_INPUT Input )  
  25. {  
  26.    VS_OUTPUT Output;  
  27.    Output.Position = mul( Input.Position, matViewProjection );  
  28.    Output.Texcoord = GetCliffUV(Input.Position, Input.Normal) * scaler;  
  29. return( Output );  
  30. }  

不过有个接缝问题该怎么处理呢?

用两层进行过渡吗?

0 人点赞