查看: 2654|回复: 10

阴影

[复制链接]

该用户从未签到

发表于 2009-12-28 11:41:49 | 显示全部楼层 |阅读模式
各位高手:
      我想在整个场景中加阴影效果,由于场景中有很多node,不知道哪些是阴影接受节点,哪些是阴影投射节点,请问各个node的setNodeMask应该怎么设置啊?

该用户从未签到

发表于 2009-12-28 12:21:19 | 显示全部楼层
添加实时阴影是需要很多前提条件的,不仅要预先设置阴影的投射和接收者,还必须保证参与运算的节点数量不会众多。这世界上恐怕还不存在完全没有限制的实时阴影算法,如果想对大规模的数据添加阴影,那么请直接使用3dsmax等模型处理软件烘焙纹理

该用户从未签到

发表于 2009-12-28 12:57:04 | 显示全部楼层
3dmax烘培的纹理能直接倒出来么?

该用户从未签到

 楼主| 发表于 2009-12-29 10:06:30 | 显示全部楼层
2# array

您好,我用setShadowTechnique给ShadowScene设置了阴影实现方法(ShadowMap),
shadowMap = new osgShadow::ShadowMap();
shadowScene->setShadowTechnique(shadowMap);
然后我再想清除阴影,应该怎么做啊?
我用
shadowMap = NULL;
shadowScene->setShadowTechnique(NULL);
报错;

shadowScene->setShadowTechnique(NULL);
shadowMap = NULL;
也报错,

shadowScene->cleanSceneGraph();
shadowMap = NULL;
阴影没有去除?

该用户从未签到

发表于 2009-12-29 10:49:19 | 显示全部楼层
设置shadowScene为DYNAMIC再看一看

该用户从未签到

 楼主| 发表于 2009-12-29 11:21:37 | 显示全部楼层
5# array

还是不行,另外我还有个问题,如果场景中有多个Ambient光(这几个Ambient光颜色不同),那么 ShadowMap的setAmbientBias应该怎么设置啊?

该用户从未签到

 楼主| 发表于 2009-12-30 10:29:52 | 显示全部楼层
本帖最后由 guoliang1986 于 2009-12-30 10:38 编辑

5# array

第一个问题,我改为在初始化时
shadowMap = new osgShadow::ShadowMap();
shadowScene->setShadowTechnique(NULL);
然后加入阴影时,用
shadowScene->setShadowTechnique(shadowMap);
清除阴影时,用
shadowScene->setShadowTechnique(NULL);
结果有时会报错,有时不报错,这是为什么啊?
shadowMap和shadowScene都设置为setDataVariance(osg::Object:YNAMIC)的了

该用户从未签到

发表于 2009-12-30 10:45:49 | 显示全部楼层
那么不好说了,我个人没有关注过osgShadow的内部实现,并且暂时也没有用它来构建阴影,因此不好给出解决方案。

该用户从未签到

 楼主| 发表于 2009-12-30 11:02:38 | 显示全部楼层
8# array

奥,请问您是用什么在OSG中实现阴影效果啊?

该用户从未签到

发表于 2009-12-30 11:11:11 | 显示全部楼层
事实上对于城市和海量地形的构建,实时阴影是很不现实的。通用的解决方案是在建模的时候就把阴影作为贴图添加到模型和地形影像之上,例如伟景行的数字城市效果就是这样实现的,非常逼真和美观,并且不会耗用额外的CPU和GPU资源;缺点是无法灵活控制。

我个人的看法,实时阴影在很长一段时间内应当都只是用在学术研究之上,在实际应用中的用武之地还比较有限~~osgShadow库事实上也正是为各种阴影算法提供了一个很好的承载和比较的平台

该用户从未签到

 楼主| 发表于 2010-2-1 10:39:22 | 显示全部楼层
10# array

您好,前面的问题解决了。
但是我在场景中加入shadowMap后,场景中原来的Ambient光都被改为(0,0,0,1)了,我在网上查的结果是fixed pipeline只计算光的diffuse分量,而没有计算Ambient分量 http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/2008-December/020563.html
于是我读了OpenGL shading language,但由于我水平有限,读完后还是没想明白Ambient分量为什么被修改为(0,0,0,1)了,请问是在哪里被修改的啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表