我正在尝试在 d3d 中渲染带纹理的四边形,并且它不使用要渲染纹理的四边形顶点的 alpha 值。而是使用 TEXTURE 的 alpha。
我希望 d3d 使用它所在的多边形的顶点的 alpha。
我有一个想法,它与SetTextureStageState有关,但我还不能完全找到它..
我正在尝试在 d3d 中渲染带纹理的四边形,并且它不使用要渲染纹理的四边形顶点的 alpha 值。而是使用 TEXTURE 的 alpha。
我希望 d3d 使用它所在的多边形的顶点的 alpha。
我有一个想法,它与SetTextureStageState有关,但我还不能完全找到它..
好的,这就是我得到的:
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.
我认为这行得通。
进一步理解: 此链接包含一个古老但非常简洁的工具,称为 MFCtex:
因此,当您使用不同的参数时,很容易看到正在发生的事情的影响。
我意识到这不再是一种很酷的方式了,而且真正很酷的方式已经有一段时间了,可以编写自己的顶点和像素着色器。