|
|

楼主 |
发表于 2006-4-20 14:11:00
|
显示全部楼层
Re: 刚刚发现,D3DTA_TEMP在固定流水线中是个很有用的东东
//本轮进行取纹理Alpha值和RGB值
pD3DDev->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pD3DDev->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
pD3DDev->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
pD3DDev->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 ); // 注意此处,取Alpha值到颜色寄存器
//本轮进行RGB的DP3运算
pD3DDev->SetTextureStageState( 1, D3DTSS_RESULTARG, D3DTA_TEMP ); // 结果输出到Temp寄存器
pD3DDev->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_CURRENT );
pD3DDev->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3 ); // 注意:此处DP3运算会将结果输出到寄存器的所有分量(.rgba),所以,不能直接将结果输出到“颜色寄存器”,因为这样会覆盖掉之前取到的Alpha分量,而应指定输出到Temp寄存器
pD3DDev->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
//本轮将DP3运算的结果取回到颜色寄存器的RGB分量中
pD3DDev->SetTextureStageState( 2, D3DTSS_RESULTARG, D3DTA_CURRENT ); // 恢复对颜色寄存器的操作
pD3DDev->SetTextureStageState( 2, D3DTSS_COLORARG1, D3DTA_TEMP ); // 从Temp寄存器取出RGB值到颜色寄存器
pD3DDev->SetTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
|
|