Additive blending. How to do it?
Hello.
I would like to make a fire effect using my particle engine. Additive blending seems to be the perfect thing for me, but i have no idea how should i do it. I've tried searching for additive blending tutorials, but found nothing. So, could someone explain how to do it or point me in the right direction to learn about it?
I'm using OpenGL btw.
I do know how to make things transparent, but making something transparent isn't all there is to additive blending, right?
Additive blending is done very much in the same way as alpha blending. I haven't worked in OGL, but in D3D, you set the source blend to one and the dest blend to one* to get additive blending.
*i.e.
*i.e.
mD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);mD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
As Cypher19 said, all you need to do is switch to a proper blend function. In OpenGL you do this...
glEnable(GL_BLEND);glBlendFunc(GL_ONE, GL_ONE);
This will make the blend equationCo = 1*Cs + 1*Cd
where Co is the output color, Cs is the source color, and Cd is the destination color.
Ahh... It's that simple then :)
Rating++ for all of you.
And can i just use glBlendFunc(GL_SRC_ALPHA, GL_ONE); instead of glBlendFunc(GL_ONE, GL_ONE);? I seem to be getting the same results.
Rating++ for all of you.
And can i just use glBlendFunc(GL_SRC_ALPHA, GL_ONE); instead of glBlendFunc(GL_ONE, GL_ONE);? I seem to be getting the same results.
Quote:Original post by ZadrraSYep, that is still additive, but the blend equation then becomes
And can i just use glBlendFunc(GL_SRC_ALPHA, GL_ONE); instead of glBlendFunc(GL_ONE, GL_ONE);? I seem to be getting the same results.
Co = As*Cs + 1*Cd
so that the source color is first scaled by source alpha, then added to destination color. So if your source alpha equals 1.0, it will be equivalent to glBlendFunc(GL_ONE, GL_ONE).
There are other additive type blend modes. One of my favorite is
srccolor * one + destcolor * invsrccolor.
This scales down the dest by 1-src, then adds in the src. This keeps things from oversaturating, and can give a foggy feel.
srccolor * one + destcolor * invsrccolor.
This scales down the dest by 1-src, then adds in the src. This keeps things from oversaturating, and can give a foggy feel.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement