熟悉OPENGL 和 体积阴影的请进来帮帮忙
ZeuX 2003-10-17 03:33:16 我在学习做一个体积阴影, 按照Nehe的Lesson27的例子进行修改.我新建了一个工程, 做了如下的一个函数来在模板缓存中标识阴影区域.
/// 渲染阴影
BOOL RenderShadow()
{
glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);
glDisable(GL_LIGHTING);
glDepthMask(GL_FALSE);
glDepthFunc(GL_LEQUAL);
glEnable(GL_STENCIL_TEST);
glColorMask(0, 0, 0, 0);
glStencilFunc(GL_ALWAYS, 1, 0xffffffff);
/*
//......标识体积阴影区域的过程
*/
glFrontFace(GL_CCW);
glColorMask(1, 1, 1, 1);
glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glStencilFunc(GL_NOTEQUAL, 0, 0xffffffff);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glPushMatrix();
glLoadIdentity();
glBegin(GL_TRIANGLE_STRIP);
glVertex3d(-1.0f, 1.0f, -1.0f);
glVertex3d(-1.0f,-1.0f, -1.0f);
glVertex3d( 1.0f, 1.0f, -1.0f);
glVertex3d( 1.0f,-1.0f, -1.0f);
glEnd();
glPopMatrix();
glDisable(GL_BLEND);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_TRUE);
glEnable(GL_LIGHTING);
glDisable(GL_STENCIL_TEST);
glShadeModel(GL_SMOOTH);
return TRUE;
}
上面一段代码里面我把标识体积阴影的部分去掉, 那么模板缓存的值应该一直保持清除后的0值, 那么在后面绘制阴影的时候应该是因为所有的点的模板缓存值为零而不进行绘制, 可是我绘制的时候却把整个视区的场景都加上了一层阴影色
另外, 我运行Nehe的lesson27的时候在窗口模式时速度非常的慢, 但是全屏模式却很快, 是不是根显卡的加速有关
望高手指教一二, 不胜感激...