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

学校网站模板 html海珠建网站公

学校网站模板 html,海珠建网站公,湖南常德房价,做网站网络营销注意OSG绘制几何体学习总结#xff08;超全#xff09;在osg中#xff0c;场景图形采用一种自顶向下的#xff0c;分层的树状数据结构来组织空间数据集#xff0c;以提高渲染的效率 场景图形树结构的顶部是一个根节点#xff0c;从根节点向下延伸#xff0c;各个组节点中均包…OSG绘制几何体学习总结超全在osg中场景图形采用一种自顶向下的分层的树状数据结构来组织空间数据集以提高渲染的效率 场景图形树结构的顶部是一个根节点从根节点向下延伸各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。根节点和各个组节点都可以有零个实际上是没有执行任何操作或多个子成员。在场景图形的最底部各个叶节点包含了构成场景中物体的实际几何信息。 首先必须明确的是在应用程序中所有几何体的渲染都必须与Geode节点相关联。在osg::Geode类中也提供了addDrawable()函数来关联应用程序中需要渲染的几何体信息。一个Geode可以包含多个DrawableGeode维护了一个Drawable的列表。因此在OSG中我们想要绘制诸如三角形等.最终需要使用的肯定还是Geode叶子节点.然后将Drawable通过addDrawable()方法加入Geode下...实际上要生成几何体adddrawable()的要么是一个Geomety要么是一个shapedrawable。 在osg中通常有三种生成几何体的手段一是松散封装的OpenGL绘图基元osg::Geometry二是使用OSG中预定义的基本几何体三是从文件中导入场景模型。 不管是松散封装的OpenGL的绘图基元还是osg自己预定义的几何体其基类都是osg::Drawable它派生自osg::Object该类派生自osg::referenced具体继承关系如下图所示 注意最常用的是DrawPixelsGeometryshapedrawableosgText::TextBase 其中DrawPixels用于绘制图像具体用法如下 osg::DrawPixels* pixels new osg::DrawPixels(); pixels-setPosition(osg::Vec3((float)vX[0],(float)vY[1] ,(float)vZ[1]));  QString imagePath ::GetImagePath() pWell-GetWellSymbol(); pixels-setImage(osgDB::readImageFile(imagePath.toStdString())); //声明一个图片节点 osg::Geode* imagNode new osg::Geode(); imagNode-addDrawable(pixels); osgText用于绘制文字具体用法如下 QString strFont1 ::GetImagePath() fonts/MicroSoftYahei.ttf; QTextCodec *code QTextCodec::codecForName(gb18030); std::string strFont2 strFont1.toStdString(); if( code ) { strFont2 code-fromUnicode(strFont1).data();  } { m_pText new osgText::Text; m_pText-setDataVariance(osg::Object::DYNAMIC);  //p-setUseDisplayList(false); m_pText-setFont(strFont2 ); m_pText-setDrawMode(osgText::Text::TEXT); m_pText-setFontResolution(15,15); m_pText-setCharacterSize(15); m_pText-setAlignment(osgText::Text::CENTER_CENTER ); m_pText.setAxisAlignment(osgText::Text::SCREEN);//让文字所在平面始终对着屏幕 m_pText-setColor(osg::Vec4f(0,0,0,1) ); } m_pGeode new osg::Geode(); m_pGeode-clone( osg::CopyOp::DEEP_COPY_ALL );   m_pGeode-addDrawable( m_pText ); m_pSwitch new osg::Switch; m_pSwitch-addChild( m_pGeode  ); 下面重点讲解Geometry和ShapeDrawable。 在实际应用中往场景里面添加一个几何体都必须先定义个geodeosg::Geode* geode  new osg::Geode; 然后要么用自定义几何体osg::Shape使用方式geode-addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::vec3(0.0f,0.0f,0.0f),radius),hints.get())); osg中提供了大量的预定义几何体来简化场景的绘制继承关系如图所示。如果要渲染这些几何体必须将其挂到某个geode下面但是geode只能通过adddrawable添加osg::drawable类型因此实际应用中提供了osg::ShapeDrawable来完成这个功能。在该类的构造函数中提供了关联osg::Shape的方法 ShapeDrawable(Shape * shape,TessellationHints * hints0)//第一个参数即为要绘制的几何体第二个为网格化类主要用于设置几何体的精细程度 要么用Geometry使用方式 osg::ref_ptrosg::Geode geode1 new osg::Geode(); osg::ref_ptrosg::Geometry geom1 new osg::Geometry(); //创建顶点数组 osg::ref_ptrosg::Vec3Array v new osg::Vec3Array(); v-push_back(osg::Vec3(458000,0,-1500)); v-push_back(osg::Vec3(458000,0,-2750)); v-push_back(osg::Vec3(452000,0,-2750)); v-push_back(osg::Vec3(452000,0,-1500)); geom1-setVertexArray(v.get()); //设置颜色数组 osg::ref_ptrosg::Vec4Array vc new osg::Vec4Array(); vc-push_back(osg::Vec4(1.0f,0.0f,0.0f,1.0f)); vc-push_back(osg::Vec4(0.0f,1.0f,0.0f,1.0f)); vc-push_back(osg::Vec4(0.0f,0.0f,1.0f,1.0f)); vc-push_back(osg::Vec4(1.0f,1.0f,0.0f,1.0f)); geom1-setColorArray(vc.get()); geom1-setColorBinding(osg::Geometry::BIND_PER_VERTEX); //设置法线数组 osg::ref_ptrosg::Vec3Array nc new osg::Vec3Array(); nc-push_back(osg::Vec3(0,1,0)); geom1-setNormalArray(nc.get()); geom1-setNormalBinding(osg::Geometry::BIND_OVERALL); //添加图元绘图基元为四边形 geom1-addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4)); geode1-addDrawable(geom1.get()); m_pRootSwitch-addChild(geode1); 上一段程序中还设置了颜色数据法线数据与顶点数据绑定的方式即setColorBinding和setNormalBinding绑定数据的方式有以下几种 BIND_OFF 取消绑定 此时颜色数据或者法线数据与顶点数据完全没有关系顶点数据的颜色和法线方向完全由缺省值决定。 BIND_OVERALL 绑定全部几何体 此时颜色数组或者法线坐标数组中只需要保存一个数据该数据将影响此Geometry类的所有顶点坐标。例如将红色绑定到全部几何体上则这个类绘制出的所有物体均是红色的。 BIND_PER_PRIMITIVE 绑定逐个几何体 此时颜色数组或者法线坐标数组中保存的数据数量应当与用户将要绘制的几何体数量相同。例如用户依据8个顶点来绘制两个四边形时可以分别为它们设置两个法线坐标并使用此参数进行绑定。 BIND_PER_VERTEX 绑定逐个点 逐点绑定。比如上面的例子将四个颜色数据分别绑定到四个顶点坐标可以实现顶点颜色之间的过渡效果。 osg::PrimitiveSet类该类主要松散封装了OpenGL的绘图基元通过指定绘图基元来指定几何体顶点将采用哪一种或几种基元绘制。继承关系如下图所示 PrimitiveSet提供了opengl顶点数组绘图命令的高层次支持。用户可以从Geometry中获得保存的数据再使用这个类制定要绘制的几何体数据的类型。 在给geometry设置完顶点、颜色、法线、纹理以后必须通过 geom1-addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4)); 来指定要利用这些数据生成一个怎么样的形状。 该行代码中使用DrawArrays类向Geometry类送入了新几何体的信息即该几何体是一个QUADS它的顶点坐标从索引数组中读入从第1个索引值开始共读入4个索引值组成一个四边形图形。 几何体的形状参数除了QUADS之外还有数种方式以用于不同的用户需求列表如下 POINTS 绘制点 绘制用户指定的所有顶点。 LINES 绘制直线 直线的起点、终点由数组中先后相邻的两个点决定用户提供的点不止两个时将尝试继续绘制新的直线。 LINE_STRIP 绘制多段直线 多段直线的第一段由数组中的前两个点决定其余段的起点位置为上一段的终点坐标而终点位置由数组中随后的点决定。 LINE_LOOP 绘制封闭直线 绘图方式与多段直线相同但是最后将自动封闭该直线。 TRIANGLES 绘制三角形 三角形的三个顶点由数组中相邻的三个点决定并按照逆时针的顺序进行绘制用户提供的点不止三个时将尝试继续绘制新的三角形。 TRIANGLE_STRIP 绘制多段三角形 第一段三角形的由数组中的前三个点决定其余段三角形的绘制起始边由上一段三角形的后两个点决定第三点由数组中随后的一点决定。 TRIANGLE_FAN 绘制三角扇面 第一段三角形的由数组中的前三个点决定其余段三角形的绘制起始边由整个数组的第一点和上一段三角形的最后一个点决定第三点由数组中随后的一点决定。 QUADS 绘制四边形 四边形的四个顶点由数组中相邻的四个点决定并按照逆时针的顺序进行绘制用户提供的点不止四个时将尝试继续绘制新的四边形。 QUAD_STRIP 绘制多段四边形 第一段四边形的起始边由数组中的前两个点决定边的矢量方向由这两点的延伸方向决定起始边的对边由其后的两个点决定如果起始边和对边的矢量方向不同那么四边形将会扭曲其余段四边形的绘制起始边由上一段决定其对边由随后的两点及其延伸方向决定。 POLYGON 绘制任意多边形 根据用户提供的顶点的数量绘制多边形。 和opengl对比 osg::PrimitiveSet::POINTS对应OpenGL中的GL_POINTS绘制单独的点 osg::PrimitiveSet::LINES对应OpenGL中的GL_LINES绘制每两点连接的线 osg::PrimitiveSet::LINE_STRIP对应OpenGL中的GL_LINE_STRIP绘制依次连接各点的线 osg::PrimitiveSet::LINE_LOOP对应OpenGL中的GL_LINE_LOOP绘制依次连接各点的线首尾相连 osg::PrimitiveSet::POLYGON对应OpenGL中的GL_POLYGON绘制依次连接各点的多边形 osg::PrimitiveSet::QUADS对应OpenGL中的GL_QUADS绘制依次连接每四点的四边形 如1、2、3、4、5、6、7、8点 绘制结果1、2、3、4组成四边形5、6、7、8组成四边形 osg::PrimitiveSet::QUAD_STRIP对应OpenGL中的GL_QUAD_STRIP绘制四边形 如1、2、3、4、5、6、7、8点 绘制结果1、2、3、4组成四边形3、4、5、6组成四边形、5、 6、7、8组成四边形 osg::PrimitiveSet::TRIANGLES对应OpenGL中的GL_TRIANGLES绘制每三点连接的三角形 如1、2、3、4、5、6点 绘制结果1、2、3组成三角形4、5、6组成三角形 osg::PrimitiveSet::TRIANGLE_STRIP对应OpenGL中的GL_TRIANGLE_STRIP 如1、2、3、4、5、6点 绘制结果1、2、3组成三角形2、3、4组成三角形3、4、5组成三角 形4、5、6组成三角形 osg::PrimitiveSet::TRIANGLE_FAN对应OpenGL中的GL_TRIANGLE_FAN 如1、2、3、4、5、6点 绘制结果1、2、3组成三角形1、3、4组成三角形1、4、5组成三角 形1、5、6组成三角形
http://www.yutouwan.com/news/284373/

相关文章:

  • 机械配件东莞网站建设linux建设一个网站
  • 网站链接优化灰色关键词排名方法
  • 网站搭建需要的公司潍坊企业网站模板
  • 网站设计教程及在线模拟器邯郸做网站的博客
  • 网站的搜索引擎方案中国新闻社是央企吗
  • 自己做网站能挣钱吗vps如果制作论坛网站
  • 什么网站可以做行测数字营销专业学什么课程
  • 宽屏企业网站模板网站建设推广销售好做吗
  • 做图标的网站天河岗顶棠下上社网站建设
  • 建三江建设局网站网站建设与熊掌号未来的关系
  • 开网店的一年的费用郑州做网站优化电话
  • 订阅号怎么做微网站wordpress图片懒加载js
  • 好友介绍网站怎么做百度关键词优化有效果吗
  • 网站备案ip查询系统吉水县建设局网站
  • 兴县做网站的公司网站无收录的原因
  • 为什么不推荐免费建站网站建设纟金手指下拉壹陆
  • it外包公司 能去吗优化营商环境评价
  • 温州哪里有网站优化python 自己做网站
  • 买了域名就可以做网站智慧医疗软件公司排名
  • 甘肃住房和城乡建设部网站中国网站设计师
  • 保密和档案网站建设方案网站代发怎么做
  • 做网站的前期准备打电话问网站建设推广
  • 怎么做网站计划南宁网站制作多少钱
  • 网站建设和优化那本书好如和建立网站
  • 福州手机模板建站想做跨境电商
  • 建设网站cmsseo裤子的关键词首页排名有哪些
  • 光做网站推广咋样常见的pc端网站布局
  • 海报设计 网站电子商务网站建设学什么软件
  • 牛商网做的网站国外网站404错误页
  • 常州网站制作策划简易crm