I have a dynamic light I am rendering as a decal on a wall in a second pass.
-The light texture should only increase the brightness of the texture on the wall, not darken it.
-The light should brighten the wall towards the full-bright color of the wall texture, NOT towards the white color of the light.
-The wall is actually darkened because I rendered a second pass with a lightmap. Lightmapped surfaces are full-bright, just textured with a dark lightmap. They are not effected by GL lights.
Right now I am using GL_SRC_COLOR,GL_ONE. This meets the first condition listed above, but it tends to gray-out the wall.
See how gray this is?
Here is a more visual display of what I am after.
Start with the texture:
This is the lightmap:
Texture+lightmap with multiplicative blending:
This is the decal:
This is the texture+lightmap+decal, as it is now:
And here is what I actually want. The decal lightens the lightmap, so the original texture shows through with its correct colors:
It’s worth noting that the lightmap and decal are at very different resolutions, so altering the lightmap is not a good idea.
Thanks.
[This message has been edited by halo (edited 12-19-2003).]
I would try multitexture (extension again…).
See the glspec15.pdf, Figure 3.11 shows that you can use (CT0 + CT1) * CT2 .
Or if you use multipass, render with precalc_lightmap, additive blend light_decal, then modulate with the texture.
I added a routine that cycles through all 81 possible blend modes. There doesn’t seem to be any way to blend the texture in after drawing the two lightmaps. However, if the texture is drawn first, the second lightmap will blend with the result of the texture and first lightmap, resulting in loss of color.
However, if your do really use alpha for material transparency, well, it will be complex without using multitexture extension.
By the way, multitexture is supported by many old cards, at least with 2 texture units (Ati rage128, intel i810, NVidia TNT1,3dfx voodoo3). See http://delphi3d.net/hardware/index.php .
A bit too bright
Well, for pass 2, put back your :
glBlendFunc GL_SRC_alpha,GL_ONE
Do not use the ‘boosted’ pass 3 of course…
Maybe use glBlendFunc GL_SRC_alpha,GL_ZERO for pass 1 as well…
From your initial post pictures above I though you did not used alpha for your lightmaps, I must be wrong. Details on how luminance information is stored on decal and static lighting textures ?