如何让d3d使用我的顶点alpha值?

时间:2010-08-31 21:23:17

标签: textures direct3d translucency directx-9

我正在尝试在d3d中渲染纹理四边形,并且它不使用纹理渲染到四边形的VERTICES的alpha值。而是使用TEXTURE的alpha。

我希望d3d使用它所放置的多边形的VERTICES的alpha。

我知道它与SetTextureStageState有关,但我还是找不到它。

1 个答案:

答案 0 :(得分:0)

好的,这就是我得到的:

D3DTSS枚举(包含D3DTSS_ *设置的默认值)

D3DTA枚举

// where does the SRC color come from?
// why, the currently bound texture of course!
d3d->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
// Default:  D3DTA_TEXTURE (anyway.  So this setting is redundant.)

大变化即将发生:

// let the alpha component be read from the
// diffuse color of the vertex..
d3d->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
// Default: D3DTA_TEXTURE (which would be "pull alpha from the texture")

// because my vertex declaration is set up to send 1 color, and
// D3DRS_DIFFUSEMATERIALSOURCE is set to D3DMCS_COLOR1, this means
// to use the vertex alpha i specify.  i think.

其余部分并没有真正改变默认值,但它在这里可以看到所有内容:

// DEST where does the alpha value come from?  also the
// diffuse component
d3d->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
// Default:  D3DTA_CURRENT.  I believe this means "the destination will
// be whatever the existing color in the framebuffer already is"

// setting up as is default, 
d3d->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT);
// Default:  D3DTA_CURRENT.  No change.

我认为这很有效。

进一步理解:this link包含一个名为MFCTex的旧但非常简洁的工具:

MFCTex program

因此,当您使用不同的args时,很容易看到正在发生的事情的效果。

我意识到不再是这样做很酷的方式,而且很酷的方式已经有一段时间来编写自己的顶点和像素着色器了。