码迷,mamicode.com
首页 > 其他好文 > 详细

OSG粒子系统应用:雨雪效果

时间:2015-07-22 20:54:05      阅读:459      评论:0      收藏:0      [点我收藏+]

标签:

目标:使用OSG的粒子系统完全对天气中雨雪效果的模拟

雨效果

直接上代码

    osg::Matrixd matrixEffect;
    matrixEffect.makeTranslate(pos);

    // 设置粒子位置
    osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform;
    // 对粒子范围进行了放大
    trans->setMatrix(matrixEffect * osg::Matrixd::scale(100, 100, 100));

    // 创建雨粒子
    osg::ref_ptr<osgParticle::PrecipitationEffect> pe =
        new osgParticle::PrecipitationEffect;
    pe->rain(1.0);
    pe->setUseFarLineSegments(true);
    // iLevel参数是一个int值,表示雨的级别,一般1-10就够用了
    pe->setParticleSize(iLevel / 10.0);
    // 设置颜色
    pe->setParticleColor(osg::Vec4(1, 1, 1, 1));

    trans->addChild(pe);
    m_pRainGroup->addChild(trans);

雪效果

雪效果的实现和雨几乎是一样的,只是对PrecipitationEffect的粒子类型设置不一样,代码:

osg::Matrixd mat;
    mat.makeTranslate(getPostion(x, y));

    // 设置粒子位置
    osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform;
    trans->setMatrix(mat * osg::Matrixd::scale(10, 10, 10));

    osg::ref_ptr<osgParticle::PrecipitationEffect> pe = new osgParticle::PrecipitationEffect;
    // 注意,这里区分雨雪效果
    pe->snow(1.0);
    pe->setParticleSize(iLevel / 10.0);
    // 设置颜色
    pe->setParticleColor(osg::Vec4(1, 1, 1, 1));

    trans->addChild(pe);
    m_pSnowGroup->addChild(trans);

使用上面的方式是为了加到我的OSGEarth地球中,如果普通的Group不能显示以上效果的话,可以加入MapNode节点之下试试看。

版权声明:本文为博主原创文章,未经博主允许不得转载。

OSG粒子系统应用:雨雪效果

标签:

原文地址:http://blog.csdn.net/chlk118/article/details/47009027

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!