位置: 编程技术 - 正文
推荐整理分享阴影映射(Shadow Map)的研究(三)(阴影映射可视域分析),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:阴影效果有什么用,阴影使用方法,阴影映射可视域分析,阴影效果是什么,阴影映射可视域分析,阴影映射纹理,阴影映射纹理,阴影映射可视域分析,内容如对您有帮助,希望把文章链接给更多的朋友!
最近为了自己制作的项目可是吃了不少苦头,这其中关键的一点就是想要实现阴影映射(Shadow Map)。为了实现目标,我参考了网络上很多相关的资料,也看了一些案例,最终花了我一个月的时间将这个效果实现了。
阴影映射这样的效果,其实在即将发布的Qt 3D中已经有相关的介绍,KDAB中有一篇文章《Shadow Mappingin Qt3D 2.0》就在Qt 3D的框架上实现了阴影映射。不过当时这个效果是假定目标机器支持OpenGL 3.0规范的,目前大部分设备,至少是现在,还只能支持OpenGL ES2.0,因此文章无法很好的参考,于是我转到了其它相关的教程,看看的能不能在OpenGL ES 2.0下实现阴影映射的效果。好在网络上是有这样宝贵的资料的,在code project网站上,有一篇很好的文章,虽然是基于Android的,使用Java语言编写,但是能够很好地显示阴影映射的效果,最重要的是,由于Android基本上是支持OpenGL ES 2.0的,因此它这个是基于OpenGL ES 2.0来写的,给我们带来了很好的参考。原文是:《Shadow Mappingwith Android OpenGL ES 2》。此外,文章引用了其它的链接,其中《Tutorial :Shadow mapping》这篇文章从问题开始入手,研究阴影映射的本质,参考的价高。
要实现基于OpenGL ES 2.0的阴影映射,要攻克这三个技术难点:
1、 熟练操作FBO。帧缓存FBO是需要熟练操控的,因为FBO可以很快地将深度图写入一块显存中,然后作为纹理渲染到真实的场景中。
2、 掌握着色器的使用。由于OpenGL ES 2.0只允许使用着色器来对其进行渲染,因此对着色器的书写熟练程度要求较高。
3、 掌握将float深度数据分拆成vec4再将vec4合并成float的操作。这个已经成为业内熟练掌握的技能之一了,网络上搜索“how to pack float into RGBA”,能够得到很多有用的回答。
我在熟读《Shadow Mappingwith Android OpenGL ES 2》文章以及源码数遍之后,使用Qt将测试的场景移植了过来。下面是效果图:
源码下载地址:这里
OSG 中 常用的 Uniforms osg中的Uniforms主要存在两个地方,一个是SceneView中,voidSceneView::updateUniforms()voidSceneView::updateUniforms(){if(!_localStateSet){_localStateSet=newosg::StateSet;}if(!_localStateS
OPENGL矩阵变换
Bullet有关六自由度弹性约束研究 Bullet有关六自由度弹性约束研究这段时间打算将物理引擎整合进来,于是对Bullet这款开源的物理引擎进行了一些研究。Bullet的研究也有了一段时间了,Bu
标签: 阴影映射可视域分析
本文链接地址:https://www.jiuchutong.com/biancheng/369485.html 转载请保留说明!友情链接: 武汉网站建设