- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- glLoadIdentity();
- m_Camera.Move();
- // normale Scene rendern (zu testzwecken nur einen ball)
- glCullFace(GL_BACK);
- m_Terrain.DrawTerrain(terType);
- m_pBalls[0].DrawBall();
- glDepthMask(GL_FALSE);
- glDepthFunc(GL_LEQUAL);
- glEnable(GL_STENCIL_TEST);
- glColorMask(0,0,0,0);
- glStencilFunc(GL_ALWAYS,1,0xFFFFFFFF);
- glStencilOp(GL_KEEP,GL_KEEP,GL_INCR);
- glCullFace(GL_BACK);
- // Schattenvolumen rendern
- glPushMatrix();
- CVector3 p = m_pBalls[0].GetPos();
- glTranslatef(p.x,p.y,p.z);
- glCallList(m_pBalls[0].GetShadowVolume());
- glPopMatrix();
- glCullFace(GL_FRONT);
- glStencilOp(GL_KEEP,GL_KEEP,GL_DECR);
- // Schattenvolumen rendern
- glPushMatrix();
- p = m_pBalls[0].GetPos();
- glTranslatef(p.x,p.y,p.z);
- glCallList(m_pBalls[0].GetShadowVolume());
- glPopMatrix();
- glColorMask(1,1,1,1);
- // blended ein schwarzes quad über den ges. bildschirm
- RenderShadow();
- glDepthFunc(GL_LEQUAL);
- glDepthMask(GL_TRUE);
- glDisable(GL_STENCIL_TEST);