views:

18

answers:

1

I'm trying to render a textured quad in d3d, and its not using the alpha values of the VERTICES of the quad the texture is being rendered to. Rather it is using the alpha of the TEXTURE.

I want d3d to use the alpha of the VERTICES of the polygon it is placed upon.

I have an idea it has to do with SetTextureStageState, but I can't quite find it yet..

A: 

OK, here's what I got:

D3DTSS enumeration (containing default values for D3DTSS_* settings)

D3DTA enumeration

// 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.)

THE BIG CHANGE COMES NEXT:

// 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.

The rest doesn't really change anything from the default values, but its here so everything can be seen:

// 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.

I think that works.

Further to understanding: this link contains an old but very neat tool called MFCTex:

MFCTex program

So its very easy to see the effect of what's going on when you use different args.

I realize this is not the cool way to do this anymore, and really the cool way has been for some time to write your own vertex and pixel shaders.

bobobobo