Not by altering the gamma tables, no.
I can't think of any way to do it with the normal blending modes either.
There is one possiblity however. It may be possible to do it with the dot3 blending mode.
Dot 3 works by mulltiplying two vectors together and producing a grayscale result. This is then blended which pixels for lighting.
The dot 3 blend works like so. The color of the pixel, R, G, B represents a vector, V1xyz. The color of the object that the dot 3 blend is set on is also converted to a vector.
A dot product is then performed:
Dot# = V1x#*V2x# + V1y#*V2y# + V1z#*V2z#
The resulting color is computed by multiplying Dot# by 255.
If the RGB color of the pixel is 255,255,255 that would result in a vector of 1,1,1. 1*1 + 1*1 + 1*1 = 3. 3*255 is too high a value. So, you want to blend a plane over the scene using dot 3 whose color is 255/3.0, ie, (85, 85, 85) so that the maximum greyscale value will be 1.0.
I think that should work! :-)
[edit]
Hm, just thought of something. The vectors can have negative values. Any color channel less than 127 goes negative... Hm... Not sure how that will affect the result. You may have to add 127 to the color of the dot 3 overlay quad. And you may have to first add blend a 127,127,127 quad over the scene to obliterate the values which are so low they are negative. But that would obliterate all values which ended up being positive... Leading the image to appear overexposed. Perhaps you could reach a compromise with an add plane of 64,64,64. Negative values are clamped to 0, so you would end up with a scene that has some "overexposed" dark areas and some "overexposed" light areas, But the midrange would be okay.
[/edit]
I can't think of any way to do it with the normal blending modes either.
There is one possiblity however. It may be possible to do it with the dot3 blending mode.
Dot 3 works by mulltiplying two vectors together and producing a grayscale result. This is then blended which pixels for lighting.
The dot 3 blend works like so. The color of the pixel, R, G, B represents a vector, V1xyz. The color of the object that the dot 3 blend is set on is also converted to a vector.
A dot product is then performed:
Dot# = V1x#*V2x# + V1y#*V2y# + V1z#*V2z#
The resulting color is computed by multiplying Dot# by 255.
If the RGB color of the pixel is 255,255,255 that would result in a vector of 1,1,1. 1*1 + 1*1 + 1*1 = 3. 3*255 is too high a value. So, you want to blend a plane over the scene using dot 3 whose color is 255/3.0, ie, (85, 85, 85) so that the maximum greyscale value will be 1.0.
I think that should work! :-)
[edit]
Hm, just thought of something. The vectors can have negative values. Any color channel less than 127 goes negative... Hm... Not sure how that will affect the result. You may have to add 127 to the color of the dot 3 overlay quad. And you may have to first add blend a 127,127,127 quad over the scene to obliterate the values which are so low they are negative. But that would obliterate all values which ended up being positive... Leading the image to appear overexposed. Perhaps you could reach a compromise with an add plane of 64,64,64. Negative values are clamped to 0, so you would end up with a scene that has some "overexposed" dark areas and some "overexposed" light areas, But the midrange would be okay.
[/edit]