|
我已经实现导入3ds模型文件,但是我一加阴影,3ds模型的贴图就都不显示,变成一个空洞的白色模型,请问有没有做过阴影方面算法的人,帮助我解决一下。 [em24],下面是我渲染函数:
- void renderScene(void)
- {
- if(Shadows)
- { printf("%d\n",temp1++);
- p_light[0] = light_mvnt * cos(lightangle/2000.0);
- p_light[2] = light_mvnt * sin(lightangle/2000.0);//用来移动光源
- //First step: Render from the light POV to a FBO, story depth values only
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fboId); //激活帧缓冲区fboId,下面的渲染都在fboId中进行
- //不用着色器,换句话说就是用固定管线
- glUseProgramObjectARB(0);
- // In the case we render the shadowmap to a higher resolution, the viewport must be modified accordingly.
- glViewport(0 , 0 , WINDOW_WIDTH * SHADOW_MAP_RATIO , WINDOW_HEIGHT* SHADOW_MAP_RATIO); // Clear previous frame values glClear( GL_DEPTH_BUFFER_BIT); //Disable color rendering, we only want to write to the Z-Buffer glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); setupMatrices(p_light[0],p_light[1],p_light[2],l_light[0],l_light[1],l_light[2]); // Culling switching, rendering only backface, this is done to avoid self-shadowing
- glCullFace(GL_FRONT);
- glEnable(GL_POLYGON_OFFSET_FILL);
- glPolygonOffset(8.0f,1.0f);
- drawObjects(GL_FALSE,GL_FALSE,2);
- glDisable(GL_POLYGON_OFFSET_FILL); //Save modelview/projection matrice into texture7, also add a bias
- setTextureMatrix(); // Now rendering from the camera POV, using the FBO to generate shadows
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);//关闭帧缓冲区,下面的代码在即将刷新到屏幕的缓冲区中绘制 }
- glViewport(0,0 , WINDOW_WIDTH , WINDOW_HEIGHT);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); // Clear previous frame values
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- if (Shadows)
- {
- //Using the shadow shader
- glUseProgramObjectARB(shadowShaderId);
- glUniform1iARB(shadowMapUniform,7);
- glUniform1fARB(shadowMapStepXUniform , 1.0/ (WINDOW_WIDTH * SHADOW_MAP_RATIO)); glUniform1fARB(shadowMapStepYUniform , 1.0/ (WINDOW_HEIGHT * SHADOW_MAP_RATIO)); glActiveTextureARB(GL_TEXTURE7);
- glBindTexture(GL_TEXTURE_2D,textures[SHADOWTEXTURE]);
- glEnable(GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE0);
- glEnable(GL_TEXTURE_2D);
- } setupMatrices(p_camera[0],p_camera[1],p_camera[2],l_camera[0],l_camera[1],l_camera[2]); //实际只是进行了设置视点位置和方向
- //用于设置环境光和散射光
- GLfloat ambientLight[]={ 1.0f , 1.0f , 1.0f , 1.0f };
- glEnable(GL_LIGHTING);
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight);
- glEnable(GL_COLOR_MATERIAL);
- glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
- glCullFace(GL_BACK);
- //glEnable(GL_BLEND);
- //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- drawObjects(GL_TRUE,GL_FALSE,2);
- glutSwapBuffers();
- }
复制代码 |
|