I’m implementing lightmaps, and i’m using the tecnique described for the apparition engine, to get the light impact on a surface.
Well, briefly, what i do is the following:
First, i seek in the polygon, wich ones have the same axis coordinate, if all the X’s are equals then i work in Z/Y, if all the Y’s are equal i work in XZ, and if all the Z’s are equal i work in XY.
lets’s imagine i’m working in XY
My next step, is to find out the biggest X and the lowest X, the biggest Y, and the lowest Y.
X = BIG_X - MIN_X;
Y = BIG_Y - MIN_Y;
As i’m using 16x16 lightmaps, i’m going to get the u,v steps to scan the polygon
u_steps = X /16;
v_steps = Y /16;
for(float xx=MIN_X; xx<= BIG_X; xx=xx + u_steps)
for(float yy=MIN_Y; yy<=BIG_Y; yy = yy + v_steps)
float position; position = xx; position = yy; position = next_dados->z; // this is from the structure where my poly is stored
// Get the distance from the light
attenuation = (distancia*distancia) / (RADIUS*RADIUS); intensity = 1 - attenuation; Value[p] = intensity; p++; } } p=0;
To render the lightmap, i doing this:
Using normal polygon coordinates, but divided by the lightmap height/lenght.
Now, my lightmaps don’t look correct, they appear dark/bright where they shouldn’t.
Also, the variable Value, that is where i’m storing the values of the lightmaps, i see that for 0 i get total darkeness, 1 total darkeness, but 0.50 it’s bright!! how come ?
shouldn’t be 0, total dark, 1 total brightness?
I’m using GL_LUMINANCE!
thanks for any help