|
发表于 2007-3-30 18:32:00
|
显示全部楼层
Re:疑惑ing....关于室外场景管理
感谢 noslopforever 的解答
高手说话就不同 一说我就懂.
再问问你 3通道2元插值法
比如你看过的那文章里
float4 TransPixels
(
in float2 vTexture0 : TEXCOORD0,
in float2 vTexture1 : TEXCOORD1,
in float2 vTexture2 : TEXCOORD2,
in float2 vTexture3 : TEXCOORD3,
in float2 vTexture4 : TEXCOORD4,
in float2 FadeAndWater : COLOR,
in float ZDepth : TEXCOORD5,
in float3 Pos : TEXCOORD6
) : COLOR
{
//tex0 DetailMap
//tex1~tex4 DetailTex
//tex5 ColorMap
float3 vColor;
float3 vDetail1;
float4 vfade = tex2D(s0, vTexture0);
float ffade = vfade.a ;
vfade.a = 1.0f-(vfade.r+vfade.g+vfade.b);
//计算表面色
vColor = tex2D(s9, vTexture0);
//计算细节色权重 细节颜色
//方法一 三通道二元插值法
float4 vDetailMatTemp = g_vDetailMarterial[1]*vfade;
float fMart = vDetailMatTemp.r+vDetailMatTemp.g+vDetailMatTemp.b+vDetailMatTemp.a+
( g_vDetailMarterial[0].r+g_vDetailMarterial[0].g+g_vDetailMarterial[0].b+g_vDetailMarterial[0].a -
( g_vDetailMarterial[1].r+g_vDetailMarterial[1].g+g_vDetailMarterial[1].b+g_vDetailMarterial[1].a) )*vfade*ffade;
//这里是8个详情图的混合计算
vDetail1 = vfade.r*lerp(tex2D(s5, vTexture1),tex2D(s1, vTexture1),ffade)
+vfade.g*lerp(tex2D(s6, vTexture2),tex2D(s2, vTexture2),ffade)
+vfade.b*lerp(tex2D(s7, vTexture3),tex2D(s3, vTexture3),ffade)
+vfade.a*lerp(tex2D(s8, vTexture4),tex2D(s4, vTexture4),ffade);
//混合细节色和表面色//计算材质颜色//输出最终水雾混合的颜色
ffade = dot(tex2D(s10, vTexture0),-g_vSunDirection.xyz);
vColor = lerp(vColor*vDetail1,vColor,ZDepth);
vColor = lerp((g_vSunColor* ffade +g_vAmbColor)*vColor*fMart, g_vWaterColor.xyz,FadeAndWater.y);
vColor = lerp(g_vFogColor,vColor,FadeAndWater.x);
其中 s1~s8 都是详情图 其实他们是4种贴图族 草地*2,沙*2,路面*2,石头*2...
那么 他是如何根据下面的几张图确定此处应该贴的是草地还是石头呢???
颜色图上色彩很杂 即使是绿色也不一定在一个色位上,而alpha图只是决定混合的程序
他程序里有没有如 if color < xx and > xx detailmap = texXX???
颜色图

alpha图

草地1
 |
|