• Create Account

## How to do this in Direct3D?

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

6 replies to this topic

### #1Sphere  Members

122
Like
Likes
Like

Posted 03 January 2000 - 07:17 AM

Hi everyone. in OpenGL: glColor4f( 1.0f, 1.0f, 1.0f, 0.0f ); // This call render primitives at 0 intensity // we can not see the primitive right? glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); // This call render primitives at full intensity // we can see the primitive right? By incrementing or decrementing the fourth parameter (the alpha value), we can fade in or fade out primitives right? Ok, now the question is how can I do this in D3D? Please for all the D3D Masters out there, please reply. Ok, thanks a lot

### #2Shinkage  Members

595
Like
Likes
Like

Posted 03 January 2000 - 12:55 PM

When specifying your vertex format, make sure that you add vertex color as one of the options. Your vertex structure would, of course, have to have a field containing its color. To set that color use the macro D3DRGBA if you want to give it an alpha value or D3DRGB if you don''t. You can look them up in the DirectX help file.

### #3mutex  Members

1111
Like
Likes
Like

Posted 03 January 2000 - 01:47 PM

it took me a while to find this one as the documentation was _very_ confusing regarding alpha blending. but here''s code for ya:

// prepare statesdevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR /	D3DTA_ALPHAREPLICATE);device->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE);device->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA);device->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA);// to enable the alpha for a primitivedevice->SetRenderState(D3DRENDERSTATE_TEXTUREFACTOR,	dwTrans);device->SetTextureStageState(0, D3DTSS_ALPHAOP,	D3DTOP_SELECTARG2);device->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,	TRUE);// to disable alphadevice->SetTextureStageState(0, D3DTSS_ALPHAOP,	D3DTOP_DISABLE);device->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,	FALSE);

### #4Sphere  Members

122
Like
Likes
Like

Posted 04 January 2000 - 04:17 AM

Hey, thanks, it works.

What if I have alpha info in the texture? the code mutex wrote discard the alpha info on texture right?

I have tried some combinations, but the part that is supposed to be invinsible becomes visible just before the whole primitive becomes invinsible.

Ok, thanks again.

### #5Shinkage  Members

595
Like
Likes
Like

Posted 04 January 2000 - 04:48 AM

Those texture stage codes aren''t exactly right if you want to use the alpha value from both vertices and textures. Try this and you should have some luck.

device->SetTextureStageState( D3DTSS_ALPHAOP, D3DTOP_MODULATE );device->SetTextureStageState( D3DTSS_ALPHAARG1, D3DTA_TEXTURE );device->SetTextureStageState( D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );

I hope that works for ya, those parameters always do confuse me.

### #6Sphere  Members

122
Like
Likes
Like

Posted 04 January 2000 - 05:04 AM

But I want to to fade in or fade out my primitives in the loop. I think your code can''t do this.

I think the D3DTA_FACTOR has to be set somewhere in argument1 or 2, because later on in the main loop I can call

device->SetRenderState( D3DRENDERSTATE_TEXTUREFACTOR, rgba )

and by modifying the ''alpha'' in ''rgba'' the primitives can fade in and fade out. But the texture''s alpha itself is discarded.

Ok, thanks again.

### #7Sphere  Members

122
Like
Likes
Like

Posted 04 January 2000 - 06:22 AM

Hi again.

I''ll make it simple this time.
Ok, do you know the smoke effect? as the smoke get higher and higher, it get bigger also, and it fade out, then at last it''s gone.

Yeah, that''s what I want to do in D3D.

Ok, thanks again.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.