Shadow Mapping Using OpenGL

该博客介绍了基于codesampler的“shadow mapping”例子的改进Demo。原例子使用NVIDIA专有扩展,在ATI显卡可能运行异常,改进后用glCopyTexSubImage2D取代,通用性好。还阐述了Shadow mapping基本思想,且运行需显卡支持特定扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个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)。

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

程序下载:

shadow_mapping.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值