查看: 2112|回复: 4

关于shadowMap模拟实时阴影时的问题

[复制链接]

该用户从未签到

发表于 2011-6-16 16:44:25 | 显示全部楼层 |阅读模式
在使用shadowMap模拟实时阴影效果时,我想某些时候不产生阴影效果,做法是将光源的各组分的值都设定成(0.0,0.0,0.0,1.0)结果是还会产生阴影效果。
求解释及其他实现方法!
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-6-16 22:34:40 | 显示全部楼层
    应该可以通过改变节点的mask来实现不绘制。
    在添加阴影场景的时候应该使用的是:
    setReceivesShadowTraversalMask
    setCastsShadowTraversalMask

    这样的话节点的mask就很关键。

    该用户从未签到

     楼主| 发表于 2011-6-17 09:26:18 | 显示全部楼层
    回复 2# FreeSouth
    我想自己写个shader来自定义阴影效果,先是将shadowMap.cpp中预定义的fragment拷贝了出来:
    1. static const char fragmentShaderSource[] =
    2. "uniform sampler2DShadow osgShadow_shadowTexture; \n"
    3. "uniform vec2 osgShadow_ambientBias; \n"
    4. "\n"
    5. "void main(void) \n"
    6. "{ \n"
    7. "    gl_FragColor = gl_Color * (osgShadow_ambientBias.x + shadow2DProj( osgShadow_shadowTexture, gl_TexCoord[0] ) * osgShadow_ambientBias.y); \n"
    8. "}\n";
    复制代码


    然后在程序中:

    1. osg::ref_ptr<osgShadow::ShadowMap> sm = new osgShadow::ShadowMap;
    2.         osg::Shader* irShader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderSource);
    3.         sm->clearShaderList();
    4.         sm->addShader(irShader);
    复制代码


    运行结果中没有阴影效果,而注释掉sm->addShader(irShader)就有了阴影效果。
    这到底是什么情况?

    该用户从未签到

    发表于 2011-6-17 14:58:36 | 显示全部楼层
    我没有这样尝试过,不知道您这种做法是否可行

    该用户从未签到

    发表于 2011-6-17 15:53:48 | 显示全部楼层
    不需要vertex  shader么?控制台有没有显示什么错误信息?
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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