游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2312|回复: 0

求问怎样让有贴图的3ds模型产生阴影

[复制链接]

2

主题

3

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2012-5-23 19:48:00 | 显示全部楼层 |阅读模式
我已经实现导入3ds模型文件,但是我一加阴影,3ds模型的贴图就都不显示,变成一个空洞的白色模型,请问有没有做过阴影方面算法的人,帮助我解决一下。 [em24],下面是我渲染函数:

  1. void renderScene(void)
  2. {
  3. if(Shadows)
  4. { printf("%d\n",temp1++);
  5. p_light[0] = light_mvnt * cos(lightangle/2000.0);
  6. p_light[2] = light_mvnt * sin(lightangle/2000.0);//用来移动光源
  7. //First step: Render from the light POV to a FBO, story depth values only

  8. glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fboId); //激活帧缓冲区fboId,下面的渲染都在fboId中进行
  9. //不用着色器,换句话说就是用固定管线
  10. glUseProgramObjectARB(0);
  11. // In the case we render the shadowmap to a higher resolution, the viewport must be modified accordingly.

  12. 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
  13. glCullFace(GL_FRONT);
  14. glEnable(GL_POLYGON_OFFSET_FILL);
  15. glPolygonOffset(8.0f,1.0f);
  16. drawObjects(GL_FALSE,GL_FALSE,2);
  17. glDisable(GL_POLYGON_OFFSET_FILL); //Save modelview/projection matrice into texture7, also add a bias

  18. setTextureMatrix(); // Now rendering from the camera POV, using the FBO to generate shadows

  19. glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);//关闭帧缓冲区,下面的代码在即将刷新到屏幕的缓冲区中绘制 }

  20. glViewport(0,0 , WINDOW_WIDTH , WINDOW_HEIGHT);

  21. glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); // Clear previous frame values

  22. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  23. if (Shadows)
  24. {
  25. //Using the shadow shader
  26. glUseProgramObjectARB(shadowShaderId);
  27. glUniform1iARB(shadowMapUniform,7);
  28. glUniform1fARB(shadowMapStepXUniform , 1.0/ (WINDOW_WIDTH * SHADOW_MAP_RATIO)); glUniform1fARB(shadowMapStepYUniform , 1.0/ (WINDOW_HEIGHT * SHADOW_MAP_RATIO)); glActiveTextureARB(GL_TEXTURE7);
  29. glBindTexture(GL_TEXTURE_2D,textures[SHADOWTEXTURE]);
  30. glEnable(GL_TEXTURE_2D);
  31. glActiveTextureARB(GL_TEXTURE0);
  32. glEnable(GL_TEXTURE_2D);
  33. } setupMatrices(p_camera[0],p_camera[1],p_camera[2],l_camera[0],l_camera[1],l_camera[2]); //实际只是进行了设置视点位置和方向
  34. //用于设置环境光和散射光
  35. GLfloat ambientLight[]={ 1.0f , 1.0f , 1.0f , 1.0f };
  36. glEnable(GL_LIGHTING);
  37. glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight);
  38. glEnable(GL_COLOR_MATERIAL);
  39. glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
  40. glCullFace(GL_BACK);
  41. //glEnable(GL_BLEND);
  42. //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  43. drawObjects(GL_TRUE,GL_FALSE,2);
  44. glutSwapBuffers();
  45. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-28 06:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表