crown20

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

对于地形的纹理融合有很多方法,我使用的是一种利用顶点格式中添加纹理比重的方法实现的,有无需多次绘制地形和不需要地形纹理的Alph混合过程的两个优点,具体做法是在每个顶点中用4个浮点数分别表示4个纹理的比重,4个值的和为1.0f然后在像素着色过程根据比重融合相应的纹理,相关shader脚本部分如下

struct VS_OUTPUT
{
    ...
    float4 TextureTens      : TEXCOORD3;   // 各纹理的比重
};

VS_OUTPUT RenderSceneVS(..., float4 vTexCoord1 : TEXCOORD1 ) //纹理比重
{
    VS_OUTPUT Out;
    ...
    Out.TextureTens = vTexCoord1;
}

struct PS_OUTPUT
{
    float4 RGBColor : COLOR0;  // Pixel color   
};

PS_OUTPUT RenderScenePS( VS_OUTPUT In, ... uniform int  nTextureNum, ...) 
{
    PS_OUTPUT Output;
    ...
    //纹理融合
    Output.RGBColor = tex2D(TerrinTextureSampler0, In.TextureUV0.xy)*In.TextureTens[0];
    if( nTextureNum >= 2 )
        Output.RGBColor += tex2D(TerrinTextureSampler1, In.TextureUV0.xy)*In.TextureTens[1];
    if( nTextureNum >= 3 )
        Output.RGBColor += tex2D(TerrinTextureSampler2, In.TextureUV0.xy)*In.TextureTens[2];
    if( nTextureNum >= 4 )
        Output.RGBColor += tex2D(TerrinTextureSampler3, In.TextureUV0.xy)*In.TextureTens[3];
    ...
    return Output;
}

实现的效果截图

posted on 2011-09-23 23:13  crown20  阅读(832)  评论(0编辑  收藏  举报