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

news2024/10/5 17:17:52

雪效模拟示例

        雪效模拟示例的代码如程序清单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.coloradmin.cn/o/1251818.html

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

相关文章

一文教你优惠券样式代码编写,让你的网站脱颖而出!

样式1&#xff1a; 代码实例&#xff1a; <div class"box"><div class"itemBox"><div class"leftBox">全额抵扣</div><div class"rightBotton"><button>立即使用</button></div><…

使用YOLOV8 CLI训练自己的数据集

YOLOV8现在可以直接通过命令行工具运行训练, 推理过程了, 方法如下, 首先安装ultralytics的包: pip install ultralytics接着尝试使用yolov8n来简单做个推理: yolo taskdetect modepredict modelyolov8n.pt conf0.25 sourcesome_picture.jpeg接下来我们使用一个安全防护, 包括…

代码随想录算法训练营第四十五天|139.单词拆分、背包问题总结

LeetCode 139. 单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 这道题使用完全背包来实现&#xff0c;我们首先考虑字符串是否可以由字符串列表组成&#xff0c;因此dp数组大小为n 1 &#xff0c;其意义是&#xff0c;在n个位置时是否能…

2015年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

Section I Use of English Directions : Read the following text. Choose the best word(s) for each numbered blank and mark A&#xff0c;B&#xff0c;Cor D on the ANSWER SHEET.( 10 points)   In our contemporary culture&#xff0c;the prospect of communicatin…

最全的软件测试教程(功能、工具、接口、自动化、性能)

一、软件测试功能测试 测试用例编写是软件测试的基本技能&#xff1b;也有很多人认为测试用例是软件测试的核心&#xff1b;软件测试中最重要的是设计和生成有效的测试用例&#xff1b;测试用例是测试工作的指导&#xff0c;是软件测试的必须遵守的准则。 在这我也准备了一份…

数据结构二叉树——堆

前言&#xff1a;哈喽小伙伴们&#xff0c;紧随上篇文章树的讲解&#xff0c;我们这篇文章开始进行二叉树的讲解。 先来看二叉树的一种特殊形式——堆。 目录 一.什么是堆 二.堆的概念 三.堆的实现 1.堆的创建 2.堆的销毁 3.堆顶数据 4.堆的判空 5.堆的数据个数 6.堆的…

itop4412移植lrzsz工具踩坑笔记

4412开发板在传输文件一直用的都是tftp文件传输&#xff0c;但这样效率有点慢&#xff0c;平常在linux上习惯用lrzsz工具来传输文件&#xff0c;特此记录下&#xff0c;因为不熟悉linux编译 踩坑了很多地方 在操作前 我们的虚拟机要线安装好编译环境 下载lrzsz源码&#xff0…

CSS新手入门笔记整理:CSS基本选择器

id属性 id属性具有唯一性&#xff0c;也就是说&#xff0c;在一个页面中相同的id只能出现一次。在不同的页面中&#xff0c;可以出现两个id相同的元素。 语法 <div id"text"> ...... </div> class属性 class&#xff0c;顾名思义&#xff0c;就是“类…

医疗机构最核心的资源是什么?如何利用去获取客流?

核心资源一&#xff1a;医生——直接影响医疗机构口碑声誉 核心资源二&#xff1a;效率——直接影响患者满意度 医生为患者提供专业医疗服务的同时&#xff0c;也得确保高效地处理患者就诊需求&#xff0c;这是保障机构的服务质量和长久发展的根本。 那么该如何有效提升资源的…

如何处理枚举类型(上)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 我们会分为上、下两篇分…

HCIA-RS基础-RIP路由协议

前言&#xff1a; RIP路由协议是一种常用的距离矢量路由协议&#xff0c;广泛应用于小规模网络中。本文将详细介绍RIP路由协议的两个版本&#xff1a;RIPv1和RIPv2&#xff0c;并介绍RIP的常用配置命令。通过学习本文&#xff0c;您将能够掌握RIP协议的基本原理、RIPv1和RIPv2的…

福州大学《嵌入式系统综合设计》实验七:图像灰度直方图

一、实验目的 直方图是一种统计特征&#xff0c;在图像中广为使用&#xff0c;因为具有计算简便、不受平移、旋转的影响&#xff0c;因此可以作为图像的一种有效的局部/全局特征来表示图像&#xff0c;是图像的重要特征之一。直方图在SIFT算法、HOG算法、直方图均衡等图像特征…

【阿里云】图像识别 智能分类识别 增加网络控制功能点(三)

一、增加网络控制功能 实现需求TCP 心跳机制解决Soket异常断开问题 二、Linux内核提供了通过sysctl命令查看和配置TCP KeepAlive参数的方法。 查看当前系统的TCP KeepAlive参数修改TCP KeepAlive参数 三、C语言实现TCP KeepAlive功能 四、setsockopt用于设置套接字选项的系…

为什么别人能做好CSGO游戏搬砖,而你不能?

CSGO搬砖日常出货更新 做Steam游戏搬砖的门槛很低&#xff0c;以至于这两年不断有小白涌入市场&#xff0c;想要在饰品市场中分一杯羹。这个项目是很简单&#xff0c;但想要站稳脚跟&#xff0c;有稳定收入的第一步就得搞清楚项目逻辑。 首先你得搞清楚&#xff0c;steam搬砖盈…

【MySQL系列】PolarDB入门使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码

基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于孔雀优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

巧妙之中见真章:深入解析常用的创建型设计模式

设计模式之创建型设计模式详解 一、设计模式是什么&#xff1f;二、模板方法2.1、代码结构2.2、符合的设计原则2.3、如何扩展代码2.4、小结 三、观察者模式3.1、代码结构3.2、符合的设计原则3.3、如何扩展代码3.4、小结 四、策略模式4.1、代码结构4.2、符合的设计原则4.3、如何…

计算机视觉面试题-01

计算机视觉面试通常涉及广泛的主题&#xff0c;包括图像处理、深度学习、目标检测、特征提取、图像分类等。以下是一些可能在计算机视觉面试中遇到的常见问题&#xff1a; 图像处理和计算机视觉基础 图像是如何表示的&#xff1f; 图像在计算机中可以通过不同的表示方法&…

Leetcode—28.找出字符串中第一个匹配项的下标【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—28.找出字符串中第一个匹配项的下标 实现代码 int strStr(char* haystack, char* needle) {int len1 strlen(haystack);int len2 strlen(needle);int idx -1;int i 0;while(i < len1 - len2) {if(strncmp(haystac…

尺度为什么是sigma?

我们先看中值滤波和均值滤波。 以前&#xff0c;我认为是一样的&#xff0c;没有区分过。 他们说&#xff0c;均值滤波有使图像模糊的效果。 中值滤波有使图像去椒盐的效果。为什么不同呢&#xff1f;试了一下&#xff0c;果然不同&#xff0c;然后追踪了一下定义。 12345&…