Вот сам render тени.
Код:
void CShadow::RenderShadow()
{
for(unsigned int m=0;m<pObj->pMesh.size();m++)
{
SMesh *mesh = pObj->pMesh[m];
DrawShadowVolume(mesh,m,true);
}
}
void CShadowVolume::Render()
{
glPushAttrib(GL_ENABLE_BIT);
glDisable(GL_LIGHTING);
glDisable(GL_FOG);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_FALSE);
glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE);
glEnable(GL_STENCIL_TEST);
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(0.0f,1.0f);
glDisable(GL_CULL_FACE);
glStencilFunc( GL_ALWAYS, 0, ~0 );
glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_INCR_WRAP, GL_KEEP);
glStencilOpSeparate(GL_BACK, GL_KEEP, GL_DECR_WRAP, GL_KEEP);
for(unsigned int i=0;i<pShadow.size();i++)
pShadow[i]->RenderShadow();
glDisable(GL_POLYGON_OFFSET_FILL);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glStencilFunc(GL_NOTEQUAL,0,~0);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glPushMatrix();
glLoadIdentity();
glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(-0.1f, 0.1f,-0.1f);
glVertex3f(-0.1f,-0.1f,-0.1f);
glVertex3f( 0.1f, 0.1f,-0.1f);
glVertex3f( 0.1f,-0.1f,-0.1f);
glEnd();
glPopMatrix();
glPopAttrib();
}
Я думаю что проблема где то здесь, если я сделаю так:
Код:
void CShadowVolume::Render()
{
glPushAttrib(GL_ENABLE_BIT);
/* glDisable(GL_LIGHTING);
glDisable(GL_FOG);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_FALSE);
glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE);
glEnable(GL_STENCIL_TEST);
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(0.0f,1.0f);
glDisable(GL_CULL_FACE);
glStencilFunc( GL_ALWAYS, 0, ~0 );
glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_INCR_WRAP, GL_KEEP);
glStencilOpSeparate(GL_BACK, GL_KEEP, GL_DECR_WRAP, GL_KEEP);*/
for(unsigned int i=0;i<pShadow.size();i++)
pShadow[i]->RenderShadow();
/* glDisable(GL_POLYGON_OFFSET_FILL);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glStencilFunc(GL_NOTEQUAL,0,~0);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glPushMatrix();
glLoadIdentity();
glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(-0.1f, 0.1f,-0.1f);
glVertex3f(-0.1f,-0.1f,-0.1f);
glVertex3f( 0.1f, 0.1f,-0.1f);
glVertex3f( 0.1f,-0.1f,-0.1f);
glEnd();
glPopMatrix();*/
glPopAttrib();
}
то FPS не так круто подает, до 300. Помогите решить проблему, что мне с этим делать.