How to do this in Direct3D?

Started by
5 comments, last by Sphere 24 years, 3 months ago
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
Advertisement
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.
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); 

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.
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.
Thanks for reply Shinkage.

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.
Hi again.

Sorry about my bad English, I think I made you confuse.

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.

This topic is closed to new replies.

Advertisement