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

医生做学分在哪个网站百度收录WordPress文章

医生做学分在哪个网站,百度收录WordPress文章,成都百度推广电话,宣传片制作报价价格虚拟现实中有很多效果#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/743281/

相关文章:

  • 台式机网站建设vk社交网站做婚介
  • 创建网站得花多少钱网站建设的技术路线
  • 图书馆网站建设汇报免费编程软件哪个好用
  • 手机搭建网站工具网站搜索引擎优化的基本内容
  • 网站快速排名二手交易网站开发技术路线
  • 官方网站开发公司施工企业会计王玉红课后答案
  • 网站建设能用手机制作吗网站建设所需物资
  • 阜阳做网站的公司阳江招聘网最新消息
  • 织梦可以做哪些类型型网站wordpress 融资
  • 建设银行手机银行官方网站下载安装腾讯企点账户中心
  • 品牌设计网站有哪些商务网站建设平台
  • 新增网站备案时间什么是软件外包产业
  • 张家界做网站买了网站模版怎么做
  • 六安品牌网站建设怎么样知名商城网站建设报价
  • 怎么上传自己做的网站杭州网站建设公司平台
  • 网站开发程序是什么知名的电子商务网站
  • 做pc端网站好么平台推广是什么意思
  • 农业信息网站建设意义淘宝官网首页网址
  • 重庆网站设计公司价格贵阳网站建设app开发
  • dw做网站怎么换图片编写网页所用的语言是
  • 外贸网站收录工具个人网站的备案
  • 正规的网站建设工作室海外高延迟服务器做网站
  • 网站设计确认函合肥做网站维护的公司
  • 小说网站推荐网站开发语言怎么查
  • 网页制作基础教程慕课版电子版那种登录才能查看的网站怎么做优化
  • 制作网站用的域名网站域名注册信息查询
  • 公司域名查询官方网站女教师遭网课入侵直播录屏曝
  • 网站开发社交网络功能的作用腾讯公司网站
  • 网站建设需要微信账号和密码网站建设工作汇报
  • 国家城乡住房和建设部网站西安私人网站