void BeginShadow(){ glTexGenfv(GL_S, GL_EYE_PLANE, row0); glTexGenfv(GL_T, GL_EYE_PLANE, row1); glTexGenfv(GL_R, GL_EYE_PLANE, row2); glTexGenfv(GL_Q, GL_EYE_PLANE, row3); glEnable(GL_ALPHA_TEST); glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_GEN_R); glEnable(GL_TEXTURE_GEN_Q);}......// first pass (shadows)glColor4f(1, 1, 1, 0); //!!!!!!!!!!!!!!!glColorMask(1, 1, 1, 1);float clr[] = {0.3,0.3,0.3,1}; float clr2[] = {1,1,1,1};glActiveTextureARB(GL_TEXTURE1_ARB);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_GREATER);glPushAttrib(GL_ENABLE_BIT);BeginShadow();glLightfv(GL_LIGHT0, GL_DIFFUSE, clr);RenderScene();// second passglActiveTextureARB(GL_TEXTURE1_ARB);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL );glLightfv(GL_LIGHT0, GL_DIFFUSE, clr2);RenderScene();...glPopAttrib();
You can copy the code completely in yours.