阴影映射(Shadow Map)的研究(一)
来源:互联网 发布:电力负荷计算软件 编辑:程序博客网 时间:2024/05/15 00:29
阴影映射(Shadow Map)的研究(一)
这段时间在搭好自己的框架后,就开始马不停蹄地研究阴影映射的内容了,说起阴影映射,倒不如说shadow map更容易被专业人士所接受。shadow map是我进阶图形学的第一课,以后的图形学内容,会变得非常复杂,每写一个例子,都要牵涉到非常多的算法以及代码。但是我不得不这么做,因为只有这样才能成为计算机图形学的高手。
蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/44628427。欢迎同行前来探讨。
shadow map简单地说,就是让通过计算机图形的模拟,在3D场景中产生阴影的效果。这个算法可以说很久之前就已经存在了,而随着硬件性能的提升,我们可以从帧缓存中提取阴影,然后在让其作用在我们想要产生阴影的表面上,非常简单。本例呢,就是将FBO与shadowmap结合起来,渲染一个带有阴影的场景。
要生成含有shadow map的场景,我们要进行至少两遍的渲染。要知道,阴影的形成是要有光源的。但是除了ADS(Ambient、Diffuse、Specular)渲染之外,我们只用到光源的位置以及视向(lookAt)。但是这是一个很重要的信息:我们正在创建阴影!
下面是我将FBO与shadow map结合的一些实践。
1、 FBO绑定,开始渲染到FBO;
2、 视点转移到光源位置,利用position以及lookAt生成viewMatrix;
3、 将着色器中渲染light space shadow map的深度图(有关深度图生成的shader,参照这里);
4、 FBO解除绑定,开始渲染到default render target;
5、 视点转移到摄像机,准备普通的渲染;
6、 在着色器中普通地渲染场景,同时,在需要添加阴影映射的地方使用我们的深度图作为纹理贴上去即可。
需要说明的是,这只是一个不完全的演示效果,因为只是生硬地将深度FBO纹理贴在了下面的平面上,所以深度的颜色效果还是看得出来的,并且这个程序没有做ADS光照效果,更没有做遮挡的深度比较,所以接下来需要将这个例子深入,以后添加上多纹理混合,这样效果会更好一些。最后是这个程序在Android以及Windows Phone上面的运行情况。
- 阴影映射(Shadow Map)的研究(一)
- 阴影映射(Shadow Map)的研究(二)
- 阴影映射(Shadow Map)的研究(三)
- 阴影映射(Shadow Map)的研究(四)
- 阴影映射(Shadow Map)的研究(五)
- 阴影映射(Shadow Map)的研究(六)
- [OpenGL] shadow mapping(实时阴影映射)
- [OpenGL] shadow mapping(实时阴影映射)
- 【CSS3】阴影 box-shadow(一)
- 阴影制作(Shadow)
- 基于CPU实现的Shadow Map(阴影图)技术--(Cg语言实现)
- 基于CPU实现的Shadow Map(阴影图)技术--(Cg语言实现)
- shadow map 阴影图算法的思考
- 基于Shadow Map的阴影实现
- 阴影贴图(Shadow mapping)
- 阴影技术:Shadow Map 初探
- 对于法线映射(Normal Map) 的深入研究
- 对于法线映射(Normal Map) 的深入研究
- vim带你装逼带你飞(一)
- hdoj 1840 Equations
- 完美解决 未能打开编辑器:Unmatched braces in the pattern.
- pysftp Exception: Expecting packet from (31,), got 94
- [ 正则 ]正则表达式进阶!
- 阴影映射(Shadow Map)的研究(一)
- 直接链接字段的添加以及substring内存泄露的考虑
- activity生命周期
- 基于java反射知识的类查看器
- Hibernate缓存机制
- Decode ways--LeetCode
- 让Dev C++支持C++11
- JSP知识点
- 用c语言实现 编写一个函数reverse_string(char * string)