当前位置: 首页 > news >正文

OSG粒子系统与阴影-自定义粒子系统示例<1>(4)

自定义粒子系统示例(一)

        自定义粒子系统示例(一)的代码如程序清单11-5所示:

/* 自定义粒子系统示例1 */
void particleSystem_11_5(const string &strDataFolder)
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;traits->x = 40;traits->y = 40;traits->width = 600;traits->height = 480;traits->windowDecoration = true;traits->doubleBuffer = true;traits->sharedContext = 0;osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());osg::ref_ptr<osg::Camera> camera = viewer->getCamera();camera->setGraphicsContext(gc.get());camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;camera->setDrawBuffer(buffer);camera->setReadBuffer(buffer);osg::ref_ptr<osg::Group> root = new osg::Group();// 自定义粒子系统加入场景root->addChild(createParticleScene(strDataFolder));// 优化场景数据osgUtil::Optimizer optimize;optimize.optimize(root.get());viewer->setSceneData(root.get());viewer->realize();viewer->run();
}// 创建自定义粒子系统
osg::ref_ptr<osg::Group> createParticleScene(const string &strDataFolder)
{osg::ref_ptr<osg::Group> root = new osg::Group();// 创建粒子系统模板osgParticle::Particle ptemplate;	ptemplate.setLifeTime(2);// 设置声明周期ptemplate.setSizeRange(osgParticle::rangef(0.75, 3.0));// 设置粒子大小变化范围	ptemplate.setAlphaRange(osgParticle::rangef(0.0, 1.0));// 设置粒子Alpha变化范围ptemplate.setColorRange(osgParticle::rangev4(osg::Vec4(1.0, 0.5, 0.3, 1.0),osg::Vec4(0.0, 0.7, 1.0, 0.0)));// 设置粒子颜色变化范围	ptemplate.setRadius(0.05);// 设置半径	ptemplate.setMass(0.05);// 设置重量// 创建粒子系统osg::ref_ptr<osgParticle::ParticleSystem> ps = new osgParticle::ParticleSystem();string strClrPath = strDataFolder + "Images\\smoke.rgb";ps->setDefaultAttributes(strClrPath, false, false);// 设置材质,是否放射粒子,是否添加光照	ps->setDefaultParticleTemplate(ptemplate);// 加入模板// 创建发射器和计数器,调整每一帧增加的粒子的数目osg::ref_ptr<osgParticle::RandomRateCounter> counter = new osgParticle::RandomRateCounter();counter->setRateRange(100.0,100.0);// 设置每秒增加的粒子的个数// 设置一个点放置器osg::ref_ptr<osgParticle::PointPlacer> placer = new osgParticle::PointPlacer();placer->setCenter(osg::Vec3(0.0, 0.0, 0.0));// 设置位置// 创建弧度发射器osg::ref_ptr<osgParticle::RadialShooter> shooter = new osgParticle::RadialShooter();shooter->setInitialSpeedRange(100, 0);// 设置发射器速度变化范围// 创建粒子放射器(包括计数器、放射器和发射器)osg::ref_ptr<osgParticle::ModularEmitter> emitter = new osgParticle::ModularEmitter();emitter->setParticleSystem(ps.get());// 关联粒子系统emitter->setCounter(counter.get());// 关联计数器emitter->setPlacer(placer.get());// 关联点放置器emitter->setShooter(shooter.get());// 关联发射器root->addChild(emitter.get());// 加入场景// 创建重力模拟对象osg::ref_ptr<osgParticle::AccelOperator> ap = new osgParticle::AccelOperator();ap->setToGravity(-1.0);// 设置重力加速度,默认值为9.80665// 创建空气阻力模拟osg::ref_ptr<osgParticle::FluidFrictionOperator> ffo = new osgParticle::FluidFrictionOperator();	// FluidViscosity为1.8e-5,FluidDensity为1.2929ffo->setFluidToAir();// 设置空气属性// 创建标准编程器对象,控制粒子在生命周期中的更新osg::ref_ptr<osgParticle::ModularProgram> program = new osgParticle::ModularProgram();program->setParticleSystem(ps.get());// 关联粒子系统program->addOperator(ap.get());// 关联重力	program->addOperator(ffo.get());// 关联空气阻力root->addChild(program.get());// 添加到场景// 添加更新器,实现每帧粒子的管理osg::ref_ptr<osgParticle::ParticleSystemUpdater> psu = new osgParticle::ParticleSystemUpdater();	psu->addParticleSystem(ps.get());// 关联粒子系统osg::ref_ptr<osg::Geode> geode = new osg::Geode;geode->addDrawable(ps.get());	root->addChild(geode.get());// 加入到场景中root->addChild(psu.get());return root.get();
}

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

图11-7自定义粒子系统示例(一)截图

相关文章:

OSG粒子系统与阴影-自定义粒子系统示例<1>(4)

自定义粒子系统示例(一) 自定义粒子系统示例(一)的代码如程序清单11-5所示&#xff1a; /* 自定义粒子系统示例1 */ void particleSystem_11_5(const string &strDataFolder) {osg::ref_ptr<osgViewer::Viewer> viewer new osgViewer::Viewer();osg::ref_ptr<os…...

激活函数与其导数:神经网络中的关键元素

激活函数是神经网络中的重要组成部分&#xff0c;有力地推动了深度学习的发展。然而&#xff0c;仅仅了解和选择激活函数是不够的&#xff0c;我们还需要理解激活函数的导数。本文将详细介绍激活函数的概念、作用及其导数的重要性&#xff0c;并探究导数对神经网络训练的影响。…...

微信公众号对接获取用户openid预约项目心路全历程

公众号对接获取openid全历程 一、背景二、选型三、开始修改若依框架四、自己搭后端框架五、前端框架uni-app修改六、对接获取公众号登录用户openId七、总结 一、背景 老板接了朋友的一个公众号需求&#xff0c;要求做一个简单的疫苗预约系统。功能是获取当前登录用户&#xff0…...

大中小协作 共筑科学梦——华中科技大学附属花城中学举办首届科技节

为普及科学知识&#xff0c;张扬科学精神&#xff0c;创设浓郁的科学氛围&#xff0c;11月24日&#xff0c;华中科技大学附属花城中学举办了以“走近科学&#xff0c;触碰未来”为主题的首届科技节暨科创文化展示周活动。学生们在学习中感受科技的魅力&#xff0c;在“玩”中感…...

ElasticSearch之Health API

查看当前集群全部健康指标的信息&#xff0c;执行如下命令&#xff1a; curl -X GET "https://localhost:9200/_health_report?pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; {&quo…...

图的建立基本操作

#include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 添加头文件#define MAX_VERTEX_NUM 100 //图中最大顶点数//struct ArcNode* nextarc; //ArcNode* firstarc; //这两个是很有必要的&#xff0c;如果你没有这两个指针&#xff0c;你就无法判…...

影响语音芯片识别率的因素概述

语音芯片识别率是指芯片对人类语音信号的识别能力。在实际应用中&#xff0c;语音芯片识别率的高低直接影响了用户对芯片的体验和满意度。因此&#xff0c;提高语音芯片识别率是当前语音技术领域的重要任务之一。 1.、语音芯片的硬件设计&#xff1a;设计良好的芯片可以更好地…...

操作系统的主要功能--处理机、存储器、设备、文件

一、处理机管理功能 对处理机的管理可以归结为对进程的管理。处理机管理的主要功能包括&#xff1a;创建和撤销进程&#xff0c;对进程的运行进行协调&#xff0c;实现进程之间的信息交换&#xff0c;并且按照异地你给的算法将处理机分配给进程 进程控制&#xff1a;为一个作…...

PDF 批量处理软件BatchOutput PDF mac中文版介绍

BatchOutput PDF mac是一款适用于 Mac 的 PDF 批量处理软件。它可以帮助用户将多个 PDF 文件进行异步处理&#xff0c;提高工作效率。 BatchOutput PDF 可以自动化执行许多任务&#xff0c;包括 PDF 文件的打印、转换、分割、压缩、加密、重命名等&#xff0c;而且它还可以将自…...

oracle安装的肘腋之疾小合集

#临时空间指定 export TMP/tmp export TMPDIR/tmp #图形化显示框不全 java问题&#xff0c;使用系统自带的jre ./runInstaller -jreLoc/usr/local/jdk1.7.0_80/ #ins30131 Failed to access the temporary location 给/tmp/CVU*加x权限 #linux桌面太小 xrandr -s 1440x900_60…...

django(千锋教育)

创建一个django项目 官网下载python最新版本 配置到环境变量中 打开intlij编辑器 创建django项目 安装django&#xff1a;pip install django 创建django项目: django-admin startproject django01 创建djangoAPP&#xff1a;python manage.py startapp user 启动&#xff1…...

Python 前后端分离项目Vue部署应用

一、视图创建 from django.http import JsonResponse from django.shortcuts import render# Create your views here. from django.views import Viewclass IndexView(View):def get(self,request):# 前后端分离 &#xff08;前端JS代码渲染数据&#xff09;return JsonRespo…...

Linux中安装MySQ-合集

Linux中安装MySQL Centos中 1、卸载不必要的软件 先卸载mariadb安装MySQL必要环境 rpm -qa|grep mariadb rpm -e --nodeps mariadb-libs yum install -y gcc-c yum install net-tools yum -y install gcc如果需要Java等程序 yum install -y java* java-1.8.0-openjdk* op…...

elk 简单操作手册

1.1. 基础概念 EFK不是一个软件,而是一套解决方案,开源软件之间的互相配合使用,高效的满足了很多场合的应用,是目前主流的一种日志系统。 EFK是三个开源软件的缩写,分别表示:Elasticsearch , Filebeat, Kibana , 其中Elasticsearch负责日志保存和搜索,Filebeat负责收集日志,Ki…...

CSS画一条线

<p style"border: 1px solid rgba(0, 0, 0, 0.1);"></p> 效果&#xff1a;...

分享常用设计模式之单例模式(懒汉模式和饿汉模式)和几种关于设计模式的面试题

目录 1.单例模式 1.懒汉模式 2.饿汉模式 2.设计一个不能被继承的类 3.设计一个不能被继承但是可以在外部环境创建该类对象的类 4.设计一个可以被继承但不能在外部环境创建该类的对象的类 5.限制派生类对象不能拷贝也不能赋值 1.单例模式 设计一个不能在外部环境创建该类…...

python每日一题——6三数之和

题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 …...

黑马点评笔记 分布式锁

文章目录 分布式锁基本原理和实现方式对比Redis分布式锁的实现核心思路实现分布式锁版本一Redis分布式锁误删情况说明解决Redis分布式锁误删问题分布式锁的原子性问题分布式锁-Redission分布式锁-redission可重入锁原理分布式锁-redission锁重试和WatchDog机制分布式锁-redissi…...

java---抽象类 用abstract修饰

抽象类是不能被[ 直接 ] [ 显式 ]实例化的如果抽象类中有一个抽象方法,那么这个类一定要声明为抽象类(反过来说,如果一个类是抽象类,那么它里面可以没有抽象方法)如果父类中有一个抽象方法,那么抽象的子类,要么也得是抽象的,要么就把抽象的方法全部给具体化(实现了) 抽象方法 …...

JVM 之 javac、java、javap 命令详解

目录 一. 前言 二. javac 命令 三. java 命令 四. javap 命令 一. 前言 在日常工作中&#xff0c;我们新建 Java工程&#xff0c;写好代码后&#xff0c;编译和运行几乎都是通过 IDE&#xff08;如idea、eclipse&#xff09;工具完成。但作为 Java开发者还是要了解下 Java虚…...

保姆级教程:用NVIDIA Jetson AGX Xavier和MAX9296采集板搭建8路GMSL2相机系统

保姆级教程&#xff1a;用NVIDIA Jetson AGX Xavier和MAX9296采集板搭建8路GMSL2相机系统 在自动驾驶和机器人视觉系统中&#xff0c;多路相机同步采集是环境感知的基础。NVIDIA Jetson AGX Xavier凭借其强大的AI算力和丰富的接口资源&#xff0c;成为这类应用的理想平台。本文…...

Windows Cleaner:免费终极清理工具,3步彻底解决C盘爆红问题

Windows Cleaner&#xff1a;免费终极清理工具&#xff0c;3步彻底解决C盘爆红问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到C盘空间不足的红…...

LiuJuan Z-Image Generator代码实例:API化封装供内部系统调用的FastAPI示例

LiuJuan Z-Image Generator代码实例&#xff1a;API化封装供内部系统调用的FastAPI示例 1. 项目背景与需求 如果你正在使用LiuJuan Z-Image Generator这个强大的本地图片生成工具&#xff0c;可能会遇到这样一个场景&#xff1a;团队里的设计师、运营同事&#xff0c;或者公司…...

RexUniNLU在客户服务工单自动分类中的实战应用

RexUniNLU在客户服务工单自动分类中的实战应用 客户服务工单处理效率直接影响用户体验和企业运营成本&#xff0c;传统人工分类方式面临效率低、准确率不稳定等痛点 在现代客户服务体系中&#xff0c;工单处理是第一道也是最重要的环节之一。每天&#xff0c;客服团队需要处理大…...

lsp_signature.nvim快速上手:5分钟配置你的第一个签名帮助

lsp_signature.nvim快速上手&#xff1a;5分钟配置你的第一个签名帮助 【免费下载链接】lsp_signature.nvim LSP signature hint as you type 项目地址: https://gitcode.com/gh_mirrors/ls/lsp_signature.nvim lsp_signature.nvim是一款专为Neovim设计的LSP签名提示插件…...

bootstrap怎么给div添加自定义的边框样式

本文讲解如何利用 go 的反射机制&#xff0c;根据一个实现了特定接口&#xff08;如 encoding.binaryunmarshaler&#xff09;的样例对象&#xff0c;动态创建同类型的新实例&#xff0c;适用于数据库批量反序列化等泛型场景。 本文讲解如何利用 go 的反射机制&#xff0c…...

Pixel Fashion Atelier部署教程:Mac M2/M3芯片通过MLX适配Stable Diffusion方案

Pixel Fashion Atelier部署教程&#xff1a;Mac M2/M3芯片通过MLX适配Stable Diffusion方案 1. 项目介绍 Pixel Fashion Atelier是一款专为时尚设计打造的AI图像生成工具&#xff0c;基于Stable Diffusion与Anything-v5模型构建。它采用独特的像素艺术风格界面&#xff0c;将…...

告别光电编码器?聊聊MT6835磁编码器在直流无刷电机控制中的实战应用

告别光电编码器&#xff1f;MT6835磁编码器在直流无刷电机控制中的实战解析 在工业自动化与精密控制领域&#xff0c;电机位置反馈元件的选择往往直接影响系统性能和可靠性。传统光电编码器虽占据主流市场多年&#xff0c;但其对灰尘敏感、机械安装精度要求高等痛点始终困扰着工…...

Selenium自动化测试中,页面一刷新就报错?手把手教你搞定StaleElementReferenceException

Selenium自动化测试中StaleElementReferenceException的深度解析与实战解决方案 在自动化测试的世界里&#xff0c;Selenium无疑是Web应用测试的利器。然而&#xff0c;当测试脚本遇到动态页面时&#xff0c;一个令人头疼的异常常常让测试工程师们抓狂——StaleElementReferenc…...

Python 3.12 Special Attribute - 28 - __match_args__

Python 3.12 Special Attribute - __match_args____match_args__ 是 Python 3.10 引入的一个 类属性 &#xff0c;用于支持 结构模式匹配&#xff08;Structural Pattern Matching&#xff09; 中的 类模式 。它定义了类实例在 match 语句中按 位置 解构时&#xff0c;属性与…...