OSG粒子系统与阴影-雨效、雪效模拟(2)

雪效模拟示例

        雪效模拟示例的代码如程序清单11-2所示:

1.	/* 雪效模拟示例 */  
2.	void snow_11_2(const string &strDataFolder)  
3.	{  
4.	    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();  
5.	    osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;  
6.	    traits->x = 40;  
7.	    traits->y = 40;  
8.	    traits->width = 600;  
9.	    traits->height = 480;  
10.	    traits->windowDecoration = true;  
11.	    traits->doubleBuffer = true;  
12.	    traits->sharedContext = 0;  
13.	  
14.	    osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());  
15.	  
16.	    osg::ref_ptr<osg::Camera> camera = viewer->getCamera();  
17.	    camera->setGraphicsContext(gc.get());  
18.	    camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));  
19.	    GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;  
20.	    camera->setDrawBuffer(buffer);  
21.	    camera->setReadBuffer(buffer);  
22.	  
23.	    osg::ref_ptr<osg::Group> root = new osg::Group();  
24.	  
25.	    // 申请一个粒子系统  
26.	    osg::ref_ptr<osgParticle::PrecipitationEffect> pe = new osgParticle::PrecipitationEffect();  
27.	  
28.	    // 设置雪效的浓度为0.5  
29.	    pe->snow(0.5);  
30.	  
31.	    // 设置背景色  
32.	    camera->setClearColor(pe->getFog()->getColor());  
33.	  
34.	    // 读取模型  
35.	    string strDataPath = strDataFolder + "lz.osg";  
36.	    osg::ref_ptr<osg::Node> node = osgDB::readNodeFile(strDataPath);  
37.	      
38.	    // 使用雾效  
39.	    //node->getOrCreateStateSet()->setAttributeAndModes(pe->getFog());  
40.	  
41.	    root->addChild(node.get());  
42.	    root->addChild(pe.get());  
43.	  
44.	    // 优化场景数据  
45.	    osgUtil::Optimizer optimize;  
46.	    optimize.optimize(root.get());  
47.	  
48.	    viewer->setSceneData(root.get());  
49.	  
50.	    viewer->realize();  
51.	    viewer->run();  
52.	}  

        运行程序,截图如图11-4 所示。

图11-4雪效模拟示例图

 

​​​​​​​雨效模拟示例

        雨效模拟示例的代码如程序清单11-3所示:

1.	/* 雨效模拟示例 */  
2.	void rain_11_3(const string &strDataFolder)  
3.	{  
4.	    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();  
5.	    osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;  
6.	    traits->x = 40;  
7.	    traits->y = 40;  
8.	    traits->width = 600;  
9.	    traits->height = 480;  
10.	    traits->windowDecoration = true;  
11.	    traits->doubleBuffer = true;  
12.	    traits->sharedContext = 0;  
13.	  
14.	    osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());  
15.	  
16.	    osg::ref_ptr<osg::Camera> camera = viewer->getCamera();  
17.	    camera->setGraphicsContext(gc.get());  
18.	    camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));  
19.	    GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;  
20.	    camera->setDrawBuffer(buffer);  
21.	    camera->setReadBuffer(buffer);  
22.	  
23.	    osg::ref_ptr<osg::Group> root = new osg::Group();  
24.	  
25.	    // 申请一个粒子系统  
26.	    osg::ref_ptr<osgParticle::PrecipitationEffect> pe = new osgParticle::PrecipitationEffect();  
27.	  
28.	    // 设置雨效的浓度为0.5  
29.	    pe->rain(1.5);  
30.	  
31.	    // 设置背景色  
32.	    camera->setClearColor(pe->getFog()->getColor());  
33.	  
34.	    // 读取模型  
35.	    string strDataPath = strDataFolder + "lz.osg";  
36.	    osg::ref_ptr<osg::Node> node = osgDB::readNodeFile(strDataPath);  
37.	  
38.	    // 使用雾效  
39.	    //node->getOrCreateStateSet()->setAttributeAndModes(pe->getFog());  
40.	  
41.	    root->addChild(node.get());  
42.	    root->addChild(pe.get());  
43.	  
44.	    // 优化场景数据  
45.	    osgUtil::Optimizer optimize;  
46.	    optimize.optimize(root.get());  
47.	  
48.	    viewer->setSceneData(root.get());  
49.	  
50.	    viewer->realize();  
51.	    viewer->run();  
52.	}  

        运行程序,截图如图11-5所示

图11-5雨效示例截图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/169591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做管理的那4件事

01、用人&#xff0c;不废人 什么是用人&#xff0c;不废人&#xff1f;核心就是两个点。 1.不对人坏 在工作中&#xff0c;有一些管理者因为格局不够&#xff0c;缺乏胸怀。 所以总是摆架子&#xff0c;而且喜欢用权压人&#xff0c;当有人不听他的话&#xff0c;就给人穿小…

一个tomcat中部署的多个war,相当于几个jvm

请直接去看原文 原文链接:一个tomcat有几个jvm-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 前几天向unmi提问&#xff0c;今天他答复了。我觉得答复很清楚&#xff0c;…

如何学习VBA:3.2.8 OnTime方法与OnKey方法

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

System-V共享内存和基于管道通信实现的进程池

文章目录 一.进程间通信:进程间通信的本质: 二.Linux管道通信匿名管道:关于管道通信的要点:基于匿名管道构建进程池: 三.System-V共享内存共享内存和命名管道协同通信 参考Linux内核源码版本------linux-2.4.3 一.进程间通信: 操作系统中,为了保证安全性,进程之间具有严格的独…

Jquery ajax 进行网络请求,同步阻塞引起的UI线程阻塞 (loading图片不显示 )

jax重新获取数据刷新页面功能&#xff0c;因为ajax属于耗时操作&#xff0c;想在获取数据且加载页面时显示加载遮罩层&#xff0c;结果发现了ajax的好多坑。 ajax 执行http网络请示时时&#xff0c;让遮罩层显示&#xff0c;ajax加载完毕后遮罩层消失。 因为我想让loadChart()…

LeetCode算法题解|474. 一和零

474. 一和零 题目链接&#xff1a;474. 一和零 题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子…

c++模板模板参数,可变数量的模板参数

当使用模板模板参数时&#xff0c;我们可以将一个模板作为另一个模板的参数&#xff0c;从而实现更大的灵活性和重用性。模板模板参数的主要优势之一是它允许我们编写适用于多种模板类型的通用代码。 下面是一些关于模板模板参数的更多信息 template <template <typenam…

外贸独立站外部优化:提升网站可见度与吸引力的策略

随着全球电子商务的快速发展&#xff0c;外贸独立站已经成为众多企业拓展海外市场、提升品牌影响力的关键工具。然而&#xff0c;要想在竞争激烈的外贸市场中脱颖而出&#xff0c;除了产品优质、服务周到外&#xff0c;还需要做好网站的外部优化工作。本文将详细探讨如何通过有…

卷积神经网络(CNN)识别验证码

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、编译五、训练六、模型评估七、保存和加载模型八、预测 …

Ubuntu18.04安装A-Loam保姆级教程

系统环境&#xff1a;Ubuntu18.04.6 LTS 1.A-Loam的安装前要求&#xff1a; 1.1 ROS安装&#xff1a;参考我的另一篇博客 Ubuntu18.04安装ROS-melodic保姆级教程_灬杨三岁灬的博客-CSDN博客还是那句话&#xff0c;有时候加了这行也不好使&#xff0c;我是疯狂试了20次&#…

十六、互斥量

互斥量的目的就是为了实现互斥访问。 1、概述 (1)举例说明&#xff1a; 怎么独享厕所&#xff1f;自己开门上锁&#xff0c;完事了自己开锁。 你当然可以进去后&#xff0c;让别人帮你把门&#xff1a;但是&#xff0c;命运就掌握在别人手上了。 …

3.3.2 深度理解BITS_TO_LONGS函数

文章目录 定义物理意义内核应用应用一:直接使用应用二 间接使用测试驱动层示例应用层示例参考定义 BITS_TO_LONGS定义在include/linux/bitops.h中,具体如下 #define BITS_PER_BYTE 8 #define

Task.Run为什么会存在内存泄漏的风险?

由于值类型是拷贝方式的赋值&#xff0c;捕获的本地变量和类成员是指向各自的值&#xff0c;对本地变量的捕获不会影响到整个类。但如果把类中的值类型改为引用类型&#xff0c;那这两者最终指向的是同一个对象值&#xff0c;这是否意味着使用本地变量还是无法避免内存泄漏&…

【java】-D参数使用

在开发过程中我们使用开源工具经常会用到在启动命令时候加入一个 -Dxxx 类型的参数。到底-Dxxx是干什么用的了。 官方文档 地址&#xff1a;文档地址 java命令使用 下面是来源于官方文档&#xff1a; java [options] classname [args] java [options] -jar filename [args…

FFmpeg零基础学习(二)——视频文件信息获取

目录 前言正文一、获取宽高信息1、核心代码2、AVFormatContext3、avformat_alloc_context4、avformat_open_input5、avformat_find_stream_info6、av_dump_format7、av_find_best_stream End、遇到的问题1、Qt Debug模式avformat_alloc_context 无法分配对象&#xff0c;而Rele…

2023年汉字小达人市级比赛在线模拟题的使用顺序、建议和常见问题

今天是2023年11月25日&#xff0c;星期六&#xff0c;上午举办了2023年第八届上海小学生古诗文大会的复选活动&#xff08;复赛&#xff09;&#xff0c;结束了复选活动&#xff0c;很多学霸孩子们马上就开始投入到第十届汉字小达人的市级活动&#xff08;市级比赛&#xff09;…

PCL 计算两点云之间的最小距离

目录 一、 算法原理二、 代码实现三、 结果展示四、 相关链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、 算法原理 pcl::registration::CorrespondenceEstimation是确定目标和查询点集(或特征)之间对应关…

【Web】CmsEasy 漏洞复现

访问主页 到处点一点没啥发现 扫目录 访问/admin 账号密码都是admin admin,不知道为什么&#xff0c;这里就先当作是默认吧 &#xff08;其实都是信息检索&#xff0c;能在网上搜到就行hhh&#xff09; 登录成功 看到左边列表有模板&#xff0c;心里大概有数了哈 进行一波历…

Android虚拟化

一、开源项目 开源的项目有一些&#xff0c;比如完全虚拟化的&#xff1a; twoyi 两仪由两部分组成&#xff1a;两仪 App&#xff0c;它实际上是一个 UI 渲染引擎&#xff0c;两仪内部运行的 ROM。 但是看telegram和github&#xff0c;这个app没有完整开源&#xff0c;并且最近…

二维列表如何利用set()进行去重

一维列表去重 输入&#xff1a; a[1,2,3,4,5,6,6] print(a) print(type(a)) bset(a) print(b) 输出&#xff1a; [1, 2, 3, 4, 5, 6, 6] <class list> {1, 2, 3, 4, 5, 6} 代码显示一维列表去重是没有问题的 二维列表去重 输入&#xff1a; a[[1,2,3,],[4,5,6],[…