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

目标:使用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节点之下试试看。

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

时间: 2024-10-25 18:30:54

OSG粒子系统应用:雨雪效果的相关文章

Cocos2d-x粒子系统 -- 实现下雪效果

先来说说我对粒子系统的了解吧,粒子系统是为了模仿自然世界的真实显现,比如说烟,雾,火花,闪电,火焰,下雪.粒子系统中需要包括四个部分:粒子对象,运动规律,随机性,粒子状态.大量的粒子叠加就可以产生我们需要的特效. 在Cocos2d-x中,实现粒子效果可以有三种方法,下面我一一道来. 1.代码自定义 使用这种方法,我们需要自己写代码,使用Cocos2d-x提供的CCParticleSystem来实现,使用这种方法,可以实现我们想要的任意效果. 这段文字的前面是雪花的图片,大家可能看不见,雪花是白的

Cesium应用篇--添加雨雪天气

作为一个三维地球,在场景中来点雨雪效果,貌似可以增加一点真实感.Cesium官网Demo中有天气系统的实例,用的是Cesium中的粒子系统做的.效果如下图所示,粒子系统的本质是向场景中添加了很多物体,用BillBoard技术展现.这种实现方式有一个麻烦的地方就是当视角变化(拉近.拉远.平移.旋转)时,粒子就会变化,甚至会消失,影响体验.考虑用shader的方式直接模拟雨雪效果,恰好发现了Catzpaw大神写的模拟雨雪的shader,果断增添到Cesium中. 1. 添加GLSL代码 Catzpa

canvas粒子系统的构建

前面的话 本文将从最基本的imageData对象的理论知识说开去,详细介绍canvas粒子系统的构建 效果演示 下面是实例效果演示,博文结尾有全部源码 imageData 关于图像数据imageData共有3个方法,包括getImageData().putImageData().createImageData() [getImageData()] 2D上下文可以通过getImageData()取得原始图像数据.这个方法接收4个参数:画面区域的x和y坐标以及该区域的像素宽度和高度 例如,要取得左上

FirstPersonManipulator ---------osg与qt 第一人称相机封装

osg与qt配置环境的讲解: http://blog.csdn.net/sadasasdasd/article/details/44573637 osg与qt百度贴吧: http://tieba.baidu.com/f?ie=utf-8&kw=osg%E4%B8%8Eqt&fr=search 配置环境第一讲试看地址:链接:http://pan.baidu.com/s/1gdjEOkb 密码:l3bt 认识并简单的应用qt试看地址:   链接:http://pan.baidu.com/s/1

二维标签在三维里显示 ---------------osg与qt

osg与qt配置环境的讲解: http://blog.csdn.net/sadasasdasd/article/details/44573637 osg与qt百度贴吧: http://tieba.baidu.com/f?ie=utf-8&kw=osg%E4%B8%8Eqt&fr=search 配置环境第一讲试看地址:链接:http://pan.baidu.com/s/1gdjEOkb 密码:l3bt 认识并简单的应用qt试看地址:   链接:http://pan.baidu.com/s/1

Cesium官方教程10--高级粒子特效

原文地址:https://cesiumjs.org/tutorials/Particle-Systems-More-Effects-Tutorial/高级粒子系统特效这篇教程学习更多的效果,包括天气和火箭推进器.如果没有学习过粒子系统基础知识,请学习这篇教程 粒子系统介绍 .天气下雪下雨 最开始下雪的教程是来自 追踪圣诞老人项目里的实现.步骤我们即将介绍如何做下雪效果,然后怎么把下雪变为下雨效果.我们将给每个粒子添加雪花图片,然后在updateParticle函数里定义每个粒子的移动属性和其他动

使用CocosSharp制作一个游戏 - CocosSharp中文教程

注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了GoneBananas项目代码后,对本教程进行了部分修改,但当前只涉及Android方面,iOS因没有环境验证代码,暂未修改. 本人博客地址:http://fengyu.name 原文链接:http://fengyu.name/?cat=game&id=295 相关资源: 离线PDF文档:Downloa

Qt移动应用开发(四):应用粒子特效

上一篇文章介绍了Qt Quick是怎样对帧动画进行支持的.帧动画的实现离不开状态机.而状态机.动画和状态切换(transitions)则是Qt框架的核心内容,也就是说它们可以建立在任何一个QObject对象中而不必非得依赖Qt的任何图形显示模块.拿一个例子说吧,如果你想实现背景音乐的平滑过渡,你可以不用写多余的代码,将背景音乐的音量作一下动画插值就可以达到效果了.事实上我制作的游戏<吃药了>就是这么实现效果的.而这一篇文章将要聚焦的是Qt Quick另外一个非常强大的系统--粒子系统. 原创文

CALayer动画

Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中.而我们常使用的UIView中都包括一个background layer.在iOS中有4种层级树:视图树.图层树.呈现树.渲染树.那么我们来对比下UIView和CALayer在什么情况下适用. UIView CALayer 阴影,圆角,带颜色的边框 响应链 3D变换 自动布局 非矩形范围   透明遮罩   多级非线性动画   一.CALayer属