游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2207|回复: 2

Shadow Mapping Using OpenGL演示

[复制链接]

73

主题

149

帖子

185

积分

注册会员

Rank: 2

积分
185
发表于 2005-10-7 10:18:00 | 显示全部楼层 |阅读模式
这个Demo是基于codesampler的“shadow mapping”例子。他那个使用了NVIDIA专有的扩展WGL_NV_render_depth_texture来设置pbuffer直接渲染到深度纹理,这个可能在ATI显卡上不能正确运行。我改进了一下,用glCopyTexSubImage2D来取代WGL_NV_render_depth_texture扩展,虽然速度可能没有后者快,但用的都是ARB核心扩展,通用性很好。

Shadow mapping的基本思想比较简单。首先,从光源位置为视点来渲染深度缓存,得到depth map(shadow map),其本质是表示离光源最近像素的深度的2D函数;其次,从眼睛位置为视点来渲染场景,即对每个光栅化的片断,确定片断相对于光源的XYZ位置,该光源的位置应对应用于创建depth map的frustum;最后,将depth map中的在光位置XY处的深度值与片断的光位置Z比较,如果后者大于前者,则必有比该片断离光源更近的物体,所以该片断在阴影中;若两者近似相等,则片断被光照。

本演示主要使用了GL_ARB_depth_texture、GL_ARB_shadow、WGL_ARB_pbuffer、WGL_ARB_pixel_format和WGL_ARB_render_texture扩展,所以你的显卡必须支持这些扩展才能运行(最好是支持OpenGL 1.5)。

详情请见:
http://blog.csdn.net/skyman_2001/archive/2005/10/07/496164.aspx

下面是截图(黄色小球为光源):
sf_2005107101758.jpg

6

主题

29

帖子

37

积分

注册会员

Rank: 2

积分
37
QQ
发表于 2006-2-17 16:38:00 | 显示全部楼层

Re:Shadow Mapping Using OpenGL演示

  我关注shadowmap已经有一个多月了。
  尽管我已经将你的主题读了4-5遍,还是无法理解shadowmaping的真正原理。
  另外,我还有一个疑问:用shadowmaping产生的阴影,到底是
   1 将阴影区的光照过滤掉,也就是,阴影区没有接受光照,所以出现阴影(我希望的)
   2 阴影区本来已经被光照渲染过了,然后用一个‘灰度值’将阴影区域重新绘制一遍。

如果能将shadowmaping阐述的更加明了一些就好了。

  烦请赐教!

5

主题

26

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2006-2-24 12:23:00 | 显示全部楼层

Re:Shadow Mapping Using OpenGL演示

如何用在多光源?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 17:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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