查看: 3192|回复: 13

请教osg阴影变黑问题

[复制链接]

该用户从未签到

发表于 2013-2-21 17:38:28 | 显示全部楼层 |阅读模式
用osgShadow::MinimalShadowMap的算法做的阴影效果,场景地形相对复杂,有3层纹理,第一层是本身的材质,第二层是colormap,第三层是lightmap,我的阴影设置在第四层,部分代码如下:
        osg::ref_ptr<osgShadow::MinimalShadowMap> mShadowMap = new osgShadow::MinimalShadowMap();
        mShadowMap->setShadowTextureUnit(3);
        mShadowMap->setShadowVertexShader( NULL);
        mShadowMap->setShadowFragmentShader( NULL );
        mShadowMap->setMainVertexShader( NULL );
        mShadowMap->setMainFragmentShader( NULL );
        mShadowMap->setTextureSize( osg::Vec2s( 2048, 2048 ) );
          mShadowMap->setLight(light.get());
        float minLightMargin = 100.f;
          float maxFarPlane =5000;
          unsigned int texSize = 1024;
          unsigned int baseTexUnit = 0;
          unsigned int shadowTexUnit = 1;

        mShadowMap->setMinLightMargin( minLightMargin );
        mShadowMap->setMaxFarPlane( maxFarPlane );
        mShadowMap->setShadowTextureCoordIndex( shadowTexUnit );
        mShadowMap->setBaseTextureCoordIndex( baseTexUnit );
        mShadowMap->setBaseTextureUnit( baseTexUnit );
运行之后阴影都是黑色的,很不自然,请各位大牛帮忙解答下,哪里出问题了?
黑色阴影.PNG

该用户从未签到

发表于 2013-2-25 09:10:04 | 显示全部楼层
建议您用ViewDependShadowMap来实验。这个类计划中将取代其它所有osgShadow库中的方法,我目前也在为它做代码贡献和试验

该用户从未签到

发表于 2013-2-25 12:47:02 | 显示全部楼层
array 发表于 2013-2-25 09:10
建议您用ViewDependShadowMap来实验。这个类计划中将取代其它所有osgShadow库中的方法,我目前也在为它做代 ...

array大哥,阴影变黑会不会跟场景地形的贴图层数有关系!目前的阴影算法支持地形多层贴图么?还是我根本就不需要考虑层数的概念!我也遇到了类似的问题!不论用哪种阴影技法,阴影都很黑!地形是多层贴图的,有本身的材质层,colormap以及lightmap! 不知道从哪些方面考虑去解决这个问题?

该用户从未签到

 楼主| 发表于 2013-2-25 15:59:04 | 显示全部楼层
array 发表于 2013-2-25 09:10
建议您用ViewDependShadowMap来实验。这个类计划中将取代其它所有osgShadow库中的方法,我目前也在为它做代 ...

ViewDependShadowMap的阴影也是黑色的,并且加入代码之后投射阴影的物体就不见了,只剩下阴影了。我用的是osg3.1.4版本的。请教array可能造成这种情况的原因有哪里呢?

该用户从未签到

发表于 2013-3-4 13:38:13 | 显示全部楼层
哦,目前不直接支持多层阴影贴图,此外我的更改还没有审核通过,因此也不存在于核心代码中。通过之后VDSM可以自己编写shader来处理阴影和默认贴图的合并问题。您现在要处理的话,也需要自己重写shader来做

该用户从未签到

发表于 2013-3-4 21:12:45 | 显示全部楼层
array 发表于 2013-3-4 13:38
哦,目前不直接支持多层阴影贴图,此外我的更改还没有审核通过,因此也不存在于核心代码中。通过之后VDSM可 ...

那锐哥有没有相关的例子可以学的啊?哈哈!分享分享。。。。。。。

该用户从未签到

 楼主| 发表于 2013-3-5 09:52:51 | 显示全部楼层
array 发表于 2013-3-4 13:38
哦,目前不直接支持多层阴影贴图,此外我的更改还没有审核通过,因此也不存在于核心代码中。通过之后VDSM可 ...

自己学的东西实在是太少了,关于shader简直一窍不通,能不能帮忙给个例子参考下?不胜感激~~~~

该用户从未签到

发表于 2013-3-5 10:51:59 | 显示全部楼层
新的VDSM我已经提交了,什么时候会通过这就不是我能决定的问题了。至于shader的例子,我想网络上应该俯拾皆是

该用户从未签到

 楼主| 发表于 2013-3-5 11:24:03 | 显示全部楼层
array 发表于 2013-3-5 10:51
新的VDSM我已经提交了,什么时候会通过这就不是我能决定的问题了。至于shader的例子,我想网络上应该俯拾皆 ...

在网上找了好多例子,但是应用在程序中没有一个是合适的,关于您说的“通过之后VDSM可以自己编写shader来处理阴影和默认贴图的合并问题”这个具体用shader怎么实现的能再提示一下不? 着色语言学习中~~~

该用户从未签到

发表于 2013-3-5 16:01:26 | 显示全部楼层
想问下您这边的树是怎么弄的,我场景中的树是3dmax里面自带的,然后导入osg后很不真实,是透明的,不知道该怎么解决!!!!!谢谢!

该用户从未签到

 楼主| 发表于 2013-3-6 14:49:01 | 显示全部楼层
1162810317 发表于 2013-3-5 16:01
想问下您这边的树是怎么弄的,我场景中的树是3dmax里面自带的,然后导入osg后很不真实,是透明的,不知道该 ...

树木是自己建模建的,要是书是透明的可能和模型的透明通道有关~~~

该用户从未签到

发表于 2013-3-6 15:51:38 | 显示全部楼层
yangwangzu 发表于 2013-3-6 14:49
树木是自己建模建的,要是书是透明的可能和模型的透明通道有关~~~

自己用3dmax做的吗???能具体点不??我感觉用公告板做太麻烦了,因为不知道具体位置,添加的时候很麻烦,所以很想知道是怎么弄的。谢谢!

该用户从未签到

发表于 2013-3-6 16:25:54 | 显示全部楼层
1162810317 发表于 2013-3-6 15:51
自己用3dmax做的吗???能具体点不??我感觉用公告板做太麻烦了,因为不知道具体位置,添加的时候很麻烦 ...

在max或者maya里边建模型,然后使用osgEXP(max导出osg的插件)或者maya2osg(maya导出插件),将模型导出成.osg格式或者.ive格式或者obj等等只要osg可以读取的格式。

该用户从未签到

发表于 2013-3-6 17:38:31 | 显示全部楼层
buptronin 发表于 2013-3-6 16:25
在max或者maya里边建模型,然后使用osgEXP(max导出osg的插件)或者maya2osg(maya导出插件),将模型导出成 ...

你说的这个我知道,我想问你树的模型是怎么弄的,我学校的场景就是3dmax做的然后导出。ive文件,因为里面的 树是3dmax自带,不真实,在osg里树冠是一个透明的圆球。然后我今天去3dmax论坛找了很久也没找到有树的模型,其他模型倒很多,然后发了一个贴子求树的模型,到现在还没回应,所以想问下你的树的模型是怎么做的,如果可以的话能不能发几个模型给我,,,,有点急。非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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