I’ve been playing about with reflections and the stencil buffer for the first time the past few days and I’ve run into a problem again:
The reflected object (a sphere) also appears in the “void” around the “mirror” object.
So basically I have a plane and a sphere, and when I move the reflection off the plane, it becomes visible from beneath the plane.
Code:
void Game3D::reflect(Ball3D ball, int wall)
{
double eqr = {0,0,0,0};
float scaler = {1,1,1};
if (wall == 1)
{
eqr[1] = 1.0f;
eqr[3] = w_scale;
}
if (wall == 2)
{
eqr[1] = -1.0f;
eqr[3] = -w_scale;//floor
}
if (wall == 3)
{
eqr[0] = 1.0f;
eqr[3] = w_scale;
}
if (wall == 4)
{
//double eqr = {0.0f,-1.0f, 0.0f, -1.0f};
eqr[0] = -1.0f;
eqr[3] = -w_scale;
}if (eqr[0] != 0) scaler[0]=-1; if (eqr[1] != 0) scaler[1]=-1; if (eqr[2] != 0) scaler[2]=-1;
glClear(GL_STENCIL_BUFFER_BIT);
glColorMask(0,0,0,0);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);glDisable(GL_DEPTH_TEST);
drawWalls(wall);glEnable(GL_DEPTH_TEST);
glColorMask(1,1,1,1);
glStencilFunc(GL_EQUAL, 1, 1);glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glEnable(GL_CLIP_PLANE0);glClipPlane(GL_CLIP_PLANE0, eqr);
glPushMatrix();
glTranslatef(eqr[3]2abs(eqr[0]), eqr[3]2abs(eqr[1]), eqr[3]2abs(eqr[2]));glScalef(scaler[0], scaler[1], scaler[2]); glLightfv(GL_LIGHT0, GL_POSITION, LightPos); ball.draw(); // Draw The Sphere (Reflection)
glPopMatrix();
glDisable(GL_CLIP_PLANE0);
glDisable(GL_STENCIL_TEST);
glLightfv(GL_LIGHT0, GL_POSITION, LightPos);
glEnable(GL_BLEND);
glDisable(GL_LIGHTING);
glColor4f(1.0f, 1.0f, 1.0f, 0.8f);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
drawWalls(wall);glEnable(GL_LIGHTING);
glDisable(GL_BLEND);
}
If anyone can help me with this I’d be very happy
[This message has been edited by Structural (edited 01-04-2003).]