hi…I am creating a 3d world with a building , ground and a sun.I recently put shadows using the stencill buffer.
The shadows works correctly but i have a problem.
This is the code of the building.
void LIBRARY()
{
glPushMatrix();
LiblaryPavement();
LiblaryBase();
Liblary1stFloorSideDoorWalls();
Liblary1stFloor();
Liblary2ndFloor();
LiblaryFront();
LiblaryCeiling();
LiblaryStairs();
LiblaryPilars();
LiblaryStairFence();
LiblaryFence();
LiblaryBalcony();
LiblaryRoof();
LiblaryUpperPillars();
LiblaryMainDoor();
LiblaryDoors();
glPopMatrix();
}
As you see i created parts of the building separately and when i put the stencill buffer to do his work and create the shadows of the building
it projects the shadows of the above code ( LiblaryMainDoor(); , LiblaryDoors(); …) separately.
This is a photo of the problem.
[ATTACH=CONFIG]734[/ATTACH]
You see? The shadows are the one above the other , having different dark values each.
I want all the shadows have the same dark values.
One solution is alpha blending but i cant figure out how…PlZ help
This is the code of creating the shadows…
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDepthMask(GL_FALSE);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
DrawWorld();
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glDepthMask(GL_TRUE);
glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
DrawWorld();
glPushMatrix();
glColor4f(0.0, 0.0, 0.0, 0.2);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
shadowmatrix(floorShadow, groundplane, lightPosition);
glMultMatrixf((float *)floorShadow);
glPushMatrix(); LIBRARY(); glPopMatrix();
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glEnable(GL_LIGHTING);
glDisable(GL_STENCIL_TEST);
glPopMatrix();
glEnable(GL_BLEND);
float illumination[4] = {1.0, 1.0, 0.82, 1.0};
float illumination1[4] = {0.2, 0.2, 0.2, 1.0};
glLightfv(GL_LIGHT0, GL_DIFFUSE, illumination);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, illumination);
glLightfv(GL_LIGHT0, GL_AMBIENT, illumination1);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, illumination1);
glPushMatrix(); LIBRARY(); glPopMatrix();