多重纹理

HRESULT SetTextureStageState(      

    DWORD Stage,
    D3DTEXTURESTAGESTATETYPE Type,
    DWORD Value
);

 

 

它有三个参数:

参数

说明

Stage

设定需要修改的纹理层。由于Direct3D支持8个纹理层而且是从0开始的,因此合理值为0~7

Type

设定需要修改的纹理层属性(状态)。每个层都有一些状态,但是只关心其中少数几个

Value

设定需要把纹理层的状态设置成什么内容。此处的设置值取决于Type参数的设置值

 

 

下面是Type可以设置的状态.

D3DTSS_COLOROP:设置纹理状态的颜色运算符

D3DTSS_ALPHAOP:设置纹理状态的alpha运算符

D3DTSS_COLORARG:设置纹理状态的第一个颜色输入。

D3DTSS_COLORARG2:设置纹理状态的第二个颜色输入。

D3DTSS_ALPHAARG1:设置纹理状态的第一个alpha输入。

D3DTSS_ALPHAARG2 :设置纹理状态的第二个alpha输入。

 

Type参数列表

typedef enum _D3DTEXTURESTAGESTATETYPE {
    D3DTSS_COLOROP = 1,
    D3DTSS_COLORARG1 = 2,
    D3DTSS_COLORARG2 = 3,
    D3DTSS_ALPHAOP = 4,
    D3DTSS_ALPHAARG1 = 5,
    D3DTSS_ALPHAARG2 = 6,
    D3DTSS_BUMPENVMAT00 = 7,
    D3DTSS_BUMPENVMAT01 = 8,
    D3DTSS_BUMPENVMAT10 = 9,
    D3DTSS_BUMPENVMAT11 = 10,
    D3DTSS_TEXCOORDINDEX = 11,
    D3DTSS_BUMPENVLSCALE = 22,
    D3DTSS_BUMPENVLOFFSET = 23,
    D3DTSS_TEXTURETRANSFORMFLAGS = 24,
    D3DTSS_COLORARG0 = 26,
    D3DTSS_ALPHAARG0 = 27,
    D3DTSS_RESULTARG = 28,
    D3DTSS_CONSTANT = 32,
    D3DTSS_FORCE_DWORD = 0x7fffffff
} D3DTEXTURESTAGESTATETYPE;

 

        如果把Type参数设置为D3DTSS_COLOROP或者D3DTSS_ALPHAOP,Value参数就告诉Diret3D这个层需要执行的运算。对于运算,有很多选择。SDK中包含了完整列表,但是最常用的一些运算如下:

 

D3DTOP_DISABLE:

禁用运算。通知Direct3D使用最后一个层的输出作为最终的颜色。

 

D3DTOP_SELECTARG1:

通知Direct3D使用这个纹理层的第一个输入作为输出,不做任何改变。

 

D3DTOP_SELECTARG2:

通知Direct3D使用这个纹理层的第二个输入作为输出,不做任何改变。

 

D3DTOP_MODULATE:

把两个输入颜色调制(相乘)在一起。

 

D3DTOP_ADD:

把两个输入颜色加到一起。

 

D3DTOP_SUBTRACT:

从第一个输入中减去第二个输入。

 

D3DTOP_BLENDDIFFUSEALPHA:

使用对定点的漫射颜色进行内插替换得到的alpha值混合两个输入。例如,如果制作了一个四边形,其左边顶点的alpha值为0.0,右边顶点的alpha值为1.0,这样对两个输入的混合的结果是在四边形的左边,第二个输入是完全则是透明的。

 

D3DTOP_BLENDTEXTUREALPHA:

使用这个层纹理的适当纹理元素的alpha值来混合两个输入。

 

D3DTOP_BLENDFACTORALPHA:

使用常量alpha值混合两个输入。在调用SetRenderState时设置D3DRS_TEXTUREFACTOR渲染状态来设定这个alpha值:

                //常量alpha值0.5(128大约是255的50%)

                pDevice->SetRenderState( D3DRS_TEXTUREFACTOR, D3DCOLOR_RGBA(0,0,0,127) );

 

D3DTOP_BLENDCURRENTALPHA:

使用前一个层输出的alpha值来混合两个输入。

 

如果给Type参数设置了任何颜色或者alpha变量,可以使用Input参数来通知Direct3D从何处获取该输入的颜色信息。选择内容如下:

 

D3DTA_DIFFESE:

Direct3D使用漫反射颜色(如果使用的是gourand明暗模式,就对顶点间进行插值)作为输入。如果可变定点格式中没有包括定点颜色,Direct3D就使用RGB(255, 255, 255)作为漫反射颜色。

 

D3DTA_SPECULAR:

Direct3D使用镜面反射颜色作为输入,如果顶点不包含镜面反射颜色,Direct3D就使用RGB(255, 255, 255)作为镜面颜色。

 

D3DTA_TEXTURE:

Direct3D使用纹理作为输入,也就是Direct3D使用设定的纹理的适当的纹理元素的颜色(调用SetTexture函数)作为输入。

 

D3DTA_CURRENT:

通知Direct3D使用前一个纹理层的输出作为这个纹理层的输入。如果对0层使用这个设置,Direct3D将使用漫反射颜色,就想设置D3DTA_DIFFUSE一样。请注意,如果正在使用凹凸映射,则跳过用于凹凸映射的纹理层。如果设置层3的输入为D3DTA_CURRENT,层2是凹凸映射,则Direct3D使用层1的输出作为层3的一个输入。

 

D3DTA_TEMP:

某些图形卡有一个用于临时存放颜色数据的空间,程序可以随意对其读取或写入。本标记表示通知Direct3D使用这个临时空间作为输入颜色。请注意,在使用之前要检查设备的D3DPMISCCAPS_TSSARGTEMP功能,以确保设备有一个临时纹理槽。

 

还可以对这些D3DTA_标记联合适应下面两个修饰符之一:

 

 D3DTA_ALPHAREPLICATE:通知Direct3D将这个alpha信息复制到所有颜色通道,给过的输入颜色是灰色阴影。

D3DTA_COMPLEMENT:通知Direct3D对变量进行非运算(也就是说,如果变量的初始值为x,翻转后就变成了1.0-x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值