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

公司自建网站备案百度云盘官网登录入口

公司自建网站备案,百度云盘官网登录入口,windows8 网站建站命令,旧金山互联网公司排名虚拟现实中有很多效果#xff0c;如雨效、雪效、雾效等#xff0c;这些都可以通过粒子系统来实现。一个真实的粒子系统的模式能使三维场景达到更好的效果。 本章对OSG粒子系统的使用以及生成自定义粒子系统的方法进行了详细介绍最后还附带说明了阴影的使用方法。在实时的场景…        虚拟现实中有很多效果如雨效、雪效、雾效等这些都可以通过粒子系统来实现。一个真实的粒子系统的模式能使三维场景达到更好的效果。 本章对OSG粒子系统的使用以及生成自定义粒子系统的方法进行了详细介绍最后还附带说明了阴影的使用方法。在实时的场景中阴影是非常重要的是一个很大的范畴笔者也没有深入研究因此这里只是简单介绍一下。 粒子系统 粒子系统是一个非常复杂的粒子模拟过程。在 OSG中专门定义了新的名字空间 osgParticle 来处理粒子系统的模拟。 osgParticle 能够高效地模拟粒子系统生成非常真实的效果。在OSG 预定义的粒子系统中大部分的粒子系统模拟都采用的是 Billboard 与色彩融合技术生成粒子。Billboard 技术前面已经讲到过虽然它还存在很多问题但是总体来说效果还是非常不错的。色彩融合技术就是在渲染的过程中将各种颜色如顶点颜色、光照颜色、质颜色和纹理颜色等按照 Alpha 值按一定的比例进行融合以达到真实的效果。在本书自定义的粒子系统示例中会向读者展示一个爆炸的效果当然只是演示一个简单的技术如果深入的话还需要重新定义模块。 粒子系统的主要模块 当打开粒子系统的文档时读者会发现里面包含很多类但很多类都是内部操作在模拟一个粒子系统时只需要使用其中的一部分就可以完成很好的模拟效果具体使用的类如图11-1 所示。 11-1子系统成块 对于一个普通的粒子系统的模拟可以用图 11-1 来显示主要模块。通过图 11-1 让读者明白一个粒子系统所需要的模块。下面分别介绍这些模块。 放射极(osgParticle::Emitter):一个标准放射极(osgParticle::ModularEmitter)包括一个计数器、一个放置器和一个发射器它为用户控制粒子系统中多个元素提供了一个标准机制。粒子系统(osgParticle::ParticleSystem):维护并管理一系列粒子的生成、更新染和销毁。粒子系统类继承自Drawable类用于控制粒子的渲染因此与其他 Drawable对象的渲染类似控制其渲染属性StateAttribute 即可。OSG提供了一个方便的函数以允许用户控制3个常用的渲染状态属性方法setDefaultAttributes可用于指定材质(或指定为NULL以禁用材质)、允许/禁止附加的图像融合及允许/禁止光照。粒子(osgParticle::Particle):粒子系统的基本单元。粒子类同时具有物理属性和图像属性,它的形状可以是任意的点(PONT)、四边形(QUAD)、四边形带(QUADTRIPSTRIP)、六角形(HEXAGON)或线(LINE)。每个粒子都有自己的生命周期生命周期也就是每个粒子可以存活的秒数生命周期为负数的粒子可以存活无限长时间。所有的粒子都具有大小(SIZE)、Alpha值和颜色(COLOR)属性每组粒子都可以指定其最大和最小值。为了便于粒子生命周期的管理粒子系统通过改变生命周期的最大和最小值来控制单个粒子的渲染它会根据已经消耗的时间在最小和最大值之间进行线性插值。放置器(osgParticle::Placer):设置粒子的初始位置。用户可以使用预定义的放置器或定义自己的放置器已经定义的放置器包括点放置器 PointPlacer(所有的粒子从同一点出生)、扇面放置器SectorPlacer(所有的粒子从一个指定中心点、半径范围和角度范围的扇面出生)以及多段放置器MultiSegmentPlacer(用户指定一系列的点粒子沿着这些点定义的线段出生)。发射器 (osgParticle::Shooter):指定粒子的初始速度。RadialShooter 类允许用户指定一个速度范围(米/秒)以及弧度值表示的方向方向由两个角度指定(theta角是与Z轴的夹角phi角是与XY平面的夹角)。计数器 (osgParticle::Counter):控制每一产生的粒子数。RandomRateCounter 类允许用户指定每帧产生粒子的最大和最小数。粒子系统更新器(osgParticle::ParticleSystemUpdater):用于自动更新粒子将其置于场景中时它会在拣选遍历中调用所有“存活”粒子的更新方法。标准编程器(osgParticle::ModularProgram):在单个粒子的生命周期中用户可以使用ModularProgram实例控制粒子的位置ModularProgram需要与Operator对象组合使用。操作器(osgParticle::Operator):提供了控制粒子在其生命周期中的运动特性的方法。用户可以改变现有 Operator 类实例的参数或定义自己的 Opcrator 类。OSG提供的Operator类包括AccelOperator(加速度)、AngularAccelOperator(角加速度)、FluidFrictionOperator (空气阻力或流体操作)以及ForceOperator(压力)。 在OSG中除了这些粒子系统的主要模块以外还包含其他的已经定义好的模块如osgParticle::ExplosionDebrisEfect(爆炸碎片)、osgParticle::ExplosionEffect (爆炸模拟)、osgParticle::SmokeEfect(烟雾模拟)和 osgParticle::FireEffect(火光模拟)。 还有一个比较重要的类osgParticle::PrecipitationEfect它是OSG定义的新类,用来模拟一些在OSG中已经定义好的粒子系统如雨效和雪效使用方法很简单可以直接加入到场景中。 ​​​​​​​粒子系统的模拟过程 下面将介绍如何模拟一个真实的粒子系统。对于模拟粒子系统的过程可以分为两种一是OSG中已经定义好的粒子系统模块二是根据需要自定义粒子系统。预定义粒子系统模块模拟过程如下; (1) 创建预定义粒子系统模块对象设置相应的参数。 (2) 作为子节点加到场景节点中。从上面列举的子系统的关系继承图中可以看出它们继承自osg::Node或osg::Group 节点因此可以直接作为一个节点加入到场景中。 自定义粒子系统模拟过程如下: (1)创建粒子系统(osgParticle::ParticleSystem)并将其加入到场景中设置相应的属性如材质、放射及光照。 (2)创建粒子模板(osgParticle::Particle)控制场景中每一个粒子的特性并关联到粒子系统设置粒子模板对应的特性如大小、颜色、生命周期及重量等。 (3)创建粒子系统放射器(osgParticle::ModularEmitter)标准的放射器包括计数器(Counter)、放置器(Placer)和发射器(Shooter)3 部分设置相应的属性如位置、形状、速度和方向等。 (4)创建粒子系统编程器对象(osgParticle::Program)控制粒子在声明周期内的运动。一个标准编程器对象包含各种操作器如osgParticle::AccelOperator和osgParticle;:FluidFrictionOperator等。 (5)创建粒子系统更新器(osgParticle::ParticleSystemUpdater)用于管理每一帧的粒子的属性如位置、速度和方向等。 通过上面的步骤可以完成一个简单的粒子系统的模拟。对于一般的需要而言是没有任何问题的。如果需要更高要求的可以从shader 开始编写属于自己的粒子系统。 ​​​​​​​雾效模示例 雾效其实并不是一种粒子系统只是一种状态属性放在这里来演示因为它本身很像一种粒子系统。 雾效的管理主要是由osg::Fog来控制染的。osg::Fog类直接继承自osg::StateAttribute类继承关系图如图11-2所示。 图11-2 osg::Fog 的继承关系图 从继承关系图中可以看到它继承自osgStateAttribute类因此它同样可以通过设置状态模式来控制雾效的开启或关闭代码如下: root-getOrCreateStateSet()-setAttributeAndModes(fog.get(),osg::StateAttribute::ON);  在OSG中雾效有两种模式可以通过下面的方式来获取或设置: void setMode(Mode mode)  Mode getMode() const  enum Mode  {      LINEAR  GL_LINEAR,// 线性务      EXP  GL_EXP, //全局雾      EXP2  GL_EXP2// 全局雾  };  雾的坐标源也有两种可以通过下面的方式来设置或获取: void setFogCoordinateSource(GLint source)  GLint getFogCoordinateSource() const  enum FogCoordinateSource  {      FOG_COORDINATE  GL_FOG_COORDINATE,//雾坐标      FRAGMENTDEPTH  GL_FRAGMENT_DEPTH// 眼坐标  };  雾的坐标源在使用固定管道的顶点处理时雾效的值可以是眼坐标系中的y坐标值也可以是经过插值的雾坐标这是由雾的标源是设置成GL_FRAGMENT_DEPTH还是GL_FOG_COORDINATE决定的在可编程管线中应用比较多。 雾效的特性还有颜色、浓度和起始位置等可以调用下列类的成员函数来设置相应的特性: void setDensity(float density)// 设置浓度  float getDensity() const  void setStart(float start)// 设置起点  float getStart() const  void setEnd(float end)// 设置终点  float getEnd() const  void setColor(const Vec4 color) // 设置雾的颜色  const Vec4 getColor() const   雾效的特性已经都讲了解释了雾效可能需要设置所有特性下面来看一个简单的示例。 代码如程序清单11-1 所示。 // 创建雾效 osg::ref_ptrosg::Fog createFog(bool m_Linear) {// 创建Fog对象osg::ref_ptrosg::Fog fog new osg::Fog();// 设置颜色fog-setColor(osg::Vec4(1.0, 1.0, 1.0, 1.0));// 设置浓度fog-setDensity(0.01);// 设置雾效模式为线性雾if (!m_Linear){fog-setMode(osg::Fog::LINEAR);}else// 设置雾效模式为全局零{fog-setMode(osg::Fog::EXP);}// 设置雾效近点浓度fog-setStart(5.0);// 设置雾效远点浓度fog-setEnd(2000.0);return fog.get(); }void fog_11_1(const string strDataFolder) {osg::ref_ptrosgViewer::Viewer viewer new osgViewer::Viewer();osg::ref_ptrosg::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_ptrosg::GraphicsContext gc osg::GraphicsContext::createGraphicsContext(traits.get());osg::ref_ptrosg::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_ptrosg::Group root new osg::Group();// 读取模型string strDataPath strDataFolder lz.osg;osg::ref_ptrosg::Node node osgDB::readNodeFile(strDataPath);root-addChild(node.get());// 启用雾效root-getOrCreateStateSet()-setAttributeAndModes(createFog(false), osg::StateAttribute::ON);// 优化场景数据osgUtil::Optimizer optimize;optimize.optimize(root.get());viewer-setSceneData(root.get());viewer-realize();viewer-run(); } 运行程序截图如图11-3所示 图11-3 雾效模拟示例截图
http://www.w-s-a.com/news/68553/

相关文章:

  • 电脑上不了建设厅网站常德网站建设费用
  • 做单页免费模板网站最新办公室装修风格效果图
  • 中国铁路建设投资公司网站熊学军想开网站建设公司
  • 优化一个网站多少钱网站开发北京
  • html教学关键词优化价格
  • 黄冈论坛网站有哪些给wordpress首页添加公告栏
  • 初中做数学题的网站做淘宝必备网站
  • 买拆车件上什么网站谁有那种手机网站
  • 一家专做有机蔬菜的网站万户网络是干嘛的
  • 十堰百度网站建设八宝山做网站公司
  • 地区电商网站系统建筑施工图纸培训班
  • 网站外包维护一年多少钱医院网站 功能
  • 电子商务市场的发展前景seo推广平台服务
  • 乐清网页设计公司哪家好seo推广任务小结
  • 360建筑网是什么pc优化工具
  • 越秀免费网站建设风景区网站建设项目建设可行性
  • 网站建站公司一站式服务学校网站开发招标
  • asp.net mvc 5 网站开发之美电商网站 流程图
  • 室内设计素材网站推荐郑州专业做淘宝网站建设
  • 新建的网站怎么做seo优化模板规格尺寸及价格
  • 平湖网站设计做电子元器件销售什么网站好
  • 可视化网站模板我想建个网站网站怎么建域名
  • 达州网站建设qinsanw南京市建设发展集团有限公司网站
  • django 网站开发实例公司排行榜
  • 韩国做美食网站阳江网站建设 公司价格
  • 网站开发哪里接业务长春高端模板建站
  • 深圳网站制作公司方案dw一个完整网页的代码
  • asp手机网站源码下载做seo推广网站
  • 网站优化建议怎么写网站维护主要有哪些内容和方法
  • 建设网站需要钱吗网络推广加盟