对于不规则的几何体的纹理坐标, 差不多都是通过投影来算的吧
冒似有个"球状纹理"投影到一个物体上, 就像CubeMap
还有一种"圆柱形纹理", 对物体一圈进行投影
GPU Gems3里有个不规则地形(X,Y,Z三个方向上都有面), 这时就没法简单地用X,Z坐标来计算UV了
对于基于高度图的地形来说, 如果Y方向很高的话, 纹理会有明显的拉伸现象
这时就可以换个方向进行投影, 用于制作悬崖之类的复杂地形
- float4x4 matViewProjection;
- float scaler;
- struct VS_INPUT
- {
- float4 Position : POSITION0;
- float3 Normal : NORMAL0;
- };
- struct VS_OUTPUT
- {
- float4 Position : POSITION0;
- float2 Texcoord : TEXCOORD0;
- };
- float2 GetCliffUV(float3 pos, float3 normal)
- {
- if (abs(normal.x) < abs(normal.z))
- {
- return float2(pos.x, pos.y);
- }
- else
- {
- return float2(pos.z, pos.y);
- }
- }
- VS_OUTPUT vs_main( VS_INPUT Input )
- {
- VS_OUTPUT Output;
- Output.Position = mul( Input.Position, matViewProjection );
- Output.Texcoord = GetCliffUV(Input.Position, Input.Normal) * scaler;
- return( Output );
- }
不过有个接缝问题该怎么处理呢?
用两层进行过渡吗?