Directx11教程十一之AlphaMap(混合贴图)

先看看本次教程的构架吧,



构架其实与前两个教程差不多,就是前两个教程的纹理资源为两个,这次变为三个.


一,AlphaMap(混合贴图)的简介.

AlphaMap(混合贴图)用于实现贴图的混合效果,其实AlphaMap跟黑白色的光照贴图差不多,
如图:                   


假设还有另外两张纹理图,
一张为:


另外一张为:


最终的混合的结果是:


那么结果是如何实现的呢?其实很简单,下面慢慢道来.

白色像素为(1.0f,1.0f,1.0f)  //这里忽略第四个参数alpha
黑色像素为  (0.0f,0.0f,0.0f)      //这里忽略第四个参数alpha

假设第一张纹理图(AlphaMap)像素颜色为AlphaColor(ra,ba,ga),第二张纹理图的像素 颜色为PixelColor2=(r1,b1,g1),
第三张纹理图的像素 颜色为PixelColor2=(r2,b2,g2),
 假设输出最终混合颜色为color(r,g,b)
建立起公式:

color=PixelColor1* AlphaColor+PixelColor2*(1.0f-AlphaColor);

先前说过,AlphaMap上的像素颜色要不就是白色(1.0f,1.0f,1.0f),要不就是黑色(0.0f,0.0f,0.0f)
两种情况:

第一种情况,当提取的像素为黑色时,即 AlphaColor(ra,ba,ga)=(0.0f,0.0f,0.0f)

此时color=(r1*0.0f,b1*0.0f,g1*0.0f)+(r2,b2,g2)*(1.0f,1.0f,1.0f)=(r2,b2,g2);

第二种情况,当提取的像素为黑色时,即AlphaColor(ra,ba,ga)=(1.0f,1.0f,1.0f)

color=(r1,b1,g1)*(1.0f,1.0f,1.0f)+(r2*0.0f,b2*0.0f,g2*0.0f)= (r1,b1,g1);
这样AlphaMap就完美的把另外两张纹理图合并为一张一部分像素来自第二张纹理图,一部分像素来自第三张纹理图的图.


贴出我的Shader代码
Texture2D ShaderTexture[3];  //纹理资源数组
SamplerState SampleType:register(s0);   //采样方式

//VertexShader
cbuffer CBMatrix:register(b0)
{
	matrix World;
	matrix View;
	matrix Proj;
};

struct VertexIn
{
	float3 Pos:POSITION;
	float2 Tex:TEXCOORD0;  //多重纹理可以用其它数字
};


struct VertexOut
{
	float4 Pos:SV_POSITION;
	float2 Tex:TEXCOORD0;
};


VertexOut VS(VertexIn ina)
{
	VertexOut outa;
	outa.Pos = mul(float4(ina.Pos,1.0f), World);
	outa.Pos = mul(outa.Pos, View);
	outa.Pos = mul(outa.Pos, Proj);
	outa.Tex= ina.Tex;
	return outa;
}


float4 PS(VertexOut outa) : SV_Target
{
	float4 BasePixel;
    float4 ColorPixel;
	float4 AlphaPixel;
	float4 color;
    BasePixel = ShaderTexture[0].Sample(SampleType, outa.Tex);
	ColorPixel= ShaderTexture[1].Sample(SampleType, outa.Tex);
	AlphaPixel= ShaderTexture[2].Sample(SampleType, outa.Tex);
	//	color = BasePixel*AlphaPixel + ColorPixel*(float4(1.0f,1.0f,1.0f,1.0f) - AlphaPixel);
	color = BasePixel*AlphaPixel + ColorPixel*(1.0f - AlphaPixel);
	color = saturate(color);
	return color;
}


我的源代码链接如下:






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
不错的dx11入门教程 Tutorial 1: Setting up DirectX 11 with Visual Studio Tutorial 2: Creating a Framework and Window Tutorial 3: Initializing DirectX 11 Tutorial 4: Buffers, Shaders, and HLSL Tutorial 5: Texturing Tutorial 6: Diffuse Lighting Tutorial 7: 3D Model Rendering Tutorial 8: Loading Maya 2011 Models Tutorial 9: Ambient Lighting Tutorial 10: Specular Lighting Tutorial 11: 2D Rendering Tutorial 12: Font Engine Tutorial 13: Direct Input Tutorial 14: Direct Sound Tutorial 15: FPS, CPU Usage, and Timers Tutorial 16: Frustum Culling Tutorial 17: Multitexturing and Texture Arrays Tutorial 18: Light Maps Tutorial 19: Alpha Mapping Tutorial 20: Bump Mapping Tutorial 21: Specular Mapping Tutorial 22: Render to Texture Tutorial 23: Fog Tutorial 24: Clipping Planes Tutorial 25: Texture Translation Tutorial 26: Transparency Tutorial 27: Reflection Tutorial 28: Screen Fades Tutorial 29: Water Tutorial 30: Multiple Point Lights Tutorial 31: 3D Sound Tutorial 32: Glass and Ice Tutorial 33: Fire Tutorial 34: Billboarding Tutorial 35: Depth Buffer Tutorial 36: Blur Tutorial 37: Coming Soon... DirectX 10 Tutorials: Tutorial 1: Setting up DirectX 10 with Visual Studio Tutorial 2: Creating a Framework and Window Tutorial 3: Initializing DirectX 10 Tutorial 4: Buffers, Shaders, and HLSL Tutorial 5: Texturing Tutorial 6: Diffuse Lighting Tutorial 7: 3D Model Rendering Tutorial 8: Loading Maya 2011 Models Tutorial 9: Ambient Lighting Tutorial 10: Specular Lighting Tutorial 11: 2D Rendering Tutorial 12: Font Engine Tutorial 13: Direct Input Tutorial 14: Direct Sound Tutorial 15: FPS, CPU Usage, and Timers Tutorial 16: Frustum Culling Tutorial 17: Multitexturing and Texture Arrays Tutorial 18: Light Maps Tutorial 19: Alpha Mapping Tutorial 20: Bump Mapping Tutorial 21: Specular Mapping Tutorial 22: Render to Texture Tutorial 23: Fog Tutorial 24: Clipping Planes Tutorial 25: Texture Translation Tutorial 26: Transparency Tutorial 27: Reflection Tutorial 28: Screen Fades Tutorial 29: Water Tutorial 30: Multiple Point Lights Tutorial 31: 3D Sound Tutorial 32: Glass and Ice Tutorial 33: Fire Tutorial 34: Billboarding Tutorial 35: Depth Buffer Tutorial 36: Blur Tutorial 37: Coming Soon... DirectX 10 Terrain Tutorials: Tutorial 1: Grid and Camera Movement Tutorial 2: Height Maps Tutorial 3: Terrain Lighting Tutorial 4: Terrain Texturing Tutorial 5: Color Mapped Terrain Tutorial 6: Quad Trees Tutorial 7: Coming Soon... 。。。。。。。。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值