Original Post
Hi there!
I''m trying to implement reflective surfaces. But It''s not working correctly...
can someone tell me what''s wrong? I''ve mixtured the NeHe tutorial with a reflection matrix I found. But it just renders two boxes and the quad cutting the "copy-box" in half by z-value.
"No lies of sugar can sweeten the sournes of reality"
}+TITANIUM+{ A.K.A. DXnewbie[onMIRC]
glColorMask(0,0,0,0); // Set Color Mask glEnable(GL_STENCIL_TEST); // Enable Stencil Buffer For "marking" The Floor glStencilFunc(GL_ALWAYS, 1, 1); // Always Passes, 1 Bit Plane, 1 As Mask glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); // We Set The Stencil Buffer To 1 Where We Draw Any Polygon // Keep If Test Fails, Keep If Test Passes But Buffer Test Fails // Replace If Test Passes glDisable(GL_DEPTH_TEST); // Disable Depth Testing glClear( GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); cSceneData::GetInstance()->m_Quad.Render(); // glEnable(GL_DEPTH_TEST); // Enable Depth Testing glColorMask(1,1,1,1); // Set Color Mask to TRUE, TRUE, TRUE, TRUE glStencilFunc(GL_EQUAL, 1, 1); // We Draw Only Where The Stencil Is 1 // (I.E. Where The Floor Was Drawn) glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); // Don''t Change The Stencil Buffer glEnable(GL_CLIP_PLANE0); // Enable Clip Plane For Removing Artifacts // (When The Object Crosses The Floor) glClipPlane(GL_CLIP_PLANE0, eqr); // Equation For Reflected Objects glPushMatrix(); // Push The Matrix Onto The Stack glMultMatrixf(reflectionmatrix); cSceneData::GetInstance()->m_Box.Render(); glPopMatrix(); // Pop The Matrix Off The Stack glDisable(GL_CLIP_PLANE0); // Disable Clip Plane For Drawing The Floor glDisable(GL_STENCIL_TEST); // We Don''t Need The Stencil Buffer Any More (Disable) glEnable(GL_BLEND); // Enable Blending (Otherwise The Reflected Object Wont Show) glDisable(GL_LIGHTING); // Since We Use Blending, We Disable Lighting glColor4f(1.0f, 1.0f, 1.0f, 0.8f); // Set Color To White With 80% Alpha glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Blending Based On Source Alpha And 1 Minus Dest Alpha cSceneData::GetInstance()->m_Quad.Render(); glEnable(GL_LIGHTING); // Enable Lighting glDisable(GL_BLEND); // Disable Blending cSceneData::GetInstance()->m_Box.Render();