自从在一家创业小公司当了客户端主程以后,就忙的没有时间写博客了,整个公司没有一个人有完整的项目经验,所有一切都在摸索中前进,但初生牛犊不怕虎,项目还算进展顺利。但我始终认为,安静下来总结整理一下工作心得是必要的,可惜这个愿望恐怕得等到这个项目忙完以后。
周末有点时间,还是可以抽空随便写点东西。
lightmap的重要性不用多说,没必要所有阴影都动态去渲染,那些一辈子也不会动的静态物体,贴一张lightmap就行了,可惜Ogre只提供动态阴影给我们,帮人也不帮到底。
如何生成天龙八部一样lightmap,如果你去百度一下,他们会告诉你各种方法,什么光线追踪,shader,之类
以上都是告诉你,自己去产生一个阴影。但是Ogre已经帮我们产生了动态阴影,我们就没必要再自己去生成阴影,
只要用动态阴影的渲染一张静态阴影图,保存下来不就行了么。
那么如何用Ogre的动态阴影去产生一张静态的阴影图呢?
1)先学会渲染一张minimap的缩略图,缩略图大家都应该会吧,创建一个垂直俯瞰的摄像机,平行投影拍一张就是
2)改进minimap,让垂直俯瞰的摄像机的视口只渲染地形队列。不渲染其他队列
这样拍出来的minimap就只有阴影和地形纹理混合后效果了
Ogre::RenderQueueInvocationSequence* rqis =
Ogre::Root::getSingleton().createRenderQueueInvocationSequence("Lightmap maker");
Ogre::RenderQueueInvocation* rqi =
rqis->add(Ogre::RENDER_QUEUE_WORLD_GEOMETRY_1, "World Geometry");
viewport->setRenderQueueInvocationSequenceName("Lightmap maker");
3)再改进一下,把地形材质设置为BaseWhite,全白,那么minimap就变成了lightmap了。
4)Ogre的阴影并不好用,所以你需要优化,怎么优化,或者用shader实现,以后再写。
//这是动态阴影的图片、、、、、、、、、、、、、、、、、、、、、、、、、、
//这是贴上lightmap的图片
./这是阴影图、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
附上代码,看看思路就好!