View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

# Additive blending. How to do it?

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.

9 replies to this topic

Posted 23 September 2005 - 10:00 PM

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.

### #2hanstt  Members

Posted 23 September 2005 - 10:27 PM

Lesson 8 at NeHe

Posted 24 September 2005 - 05:57 AM

I do know how to make things transparent, but making something transparent isn't all there is to additive blending, right?

### #4Cypher19  Members

Posted 24 September 2005 - 06:04 AM

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.
mD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);mD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);

### #5Kalidor  Members

Posted 24 September 2005 - 06:31 AM

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 equation
Co = 1*Cs + 1*Cd
where Co is the output color, Cs is the source color, and Cd is the destination color.

Posted 24 September 2005 - 06:41 AM

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.

### #7Kalidor  Members

Posted 24 September 2005 - 07:00 AM

Quote:
 Original post by ZadrraSAnd 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.
Yep, that is still additive, but the blend equation then becomes
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).

### #8SimmerD  Members

Posted 24 September 2005 - 05:45 PM

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.

Posted 24 September 2005 - 07:24 PM

Is the invsrccolor - Inversed Source Color? What flag do I need to get it?

### #10superpig  Members

Posted 25 September 2005 - 02:46 AM

GL_ONE_MINUS_SRC_COLOR.

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.