学习笔记:多重纹理
(2009-09-01 14:20:52)分类: 学习笔记 |
多重纹理
多重纹理就是在渲染一个多边形的时候可以用到多张纹理图.把多张纹理图进行一些颜色的操作,可以达到一些效果.但是多重纹理必须是在显卡支持的情况下.但是还有一种多次渲染.可以替代多重纹理,但是这样做的话,速度会很慢.
多重纹理的相关代码如下:
//设置第一张纹理
多次渲染可以得到相同的结果.代码如下:
//设置第一个纹理
具体效果如下:
多重纹理的操作类型
多重纹理的操作类型,
D3DTOP_DISABLE:使一个纹理阶段不管用,自己的理解.
D3DTOP_SELECTARG1 & D3DTOP_SELECTARG2:选择第一个和第2个纹理,用来混合.
D3DTOP_MODULATE:把两个纹理的颜色进行乘法运算,final=tex1*tex2;
D3DTOP_MODULATE2X:把两个纹理的颜色进行乘法运算,然后乘2来提高亮度,final=(tex1*tex2)<<1;
D3DTOP_MODULATE4X:把两个纹理的颜色进行乘法运算,然后乘4来提高亮度,final=(tex1*tex2)<<2;
D3DTOP_ADD:把两个纹理的颜色进行加法运算,得到的图象会变亮,final=tex1+tex2;
D3DTOP_ADDSIGNED:final=tex1+tex2-0.5,得到的效果是第2张图片的黑的地方边的更暗,而白地方边的更亮
D3DTOP_ADDSIGNED2X:在上面的基础上,把图片放亮,final=(tex1+tex2+0.5)<<1;
D3DTOP_SUBTRACT:把第一个纹理的亮度,根据第2个纹理来降低,final=tex1-tex2;
D3DTOP_BLENDDIFFUSEALPHA:用顶点上的透明值来线形混合纹理,final=tex1*alpha+tex2*(1-alpha);
D3DTOP_BLENDTEXTUREALPHA:用纹理的透明值来混合纹理
D3DTOP_BLENDFACTORALPHA:用纹理因子来混合
D3DTOP_BLENDTEXTUREALPHAPM:final=tex1*tex2(1-alpha);
D3DTOP_BLENDCURRENTALPHA:用上一张纹理的透明来混合.
D3DTOP_MODULATEALPHA_ADDCOLOR:final=tex1+tex1a*tex2;
D3DTOP_MODULATEINVALPHA_ADDCOLOR:final=tex1+(1-tex1a)*tex2.
/
黑暗映射:用到是D3DTOP_MODULATE;
混合纹理与材质慢反射颜色:这个效果,是用慢反射的到的颜色,来混合纹理颜色.具体代码如下,
Device->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
Device->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
Device->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_ADD);
发光映射:用到是D3DTOP_ADD.
细节映射:用到就是D3DTOP_ADDSIGNED.让暗亮更加分明
/
ALPHA操作
Device->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
Device->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_DIFFUSE);
Device->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE);
用材质的颜色和ALPHA来混合纹理.
纹理因子的使用(TEXTUREFACTOR)
Device->SetRenderState(D3DRS_TEXTUREFACTOR,0xFF000000);第2个参数是一个32位的颜色值.可以用这个来设置物体的透明度.具体方法如下!