随笔-38  评论-23  文章-0  trackbacks-0

       在知道如何使用Viewer视景器来进行仿真循环之后.总不会一直尝试着显示一头有着球面映射的牛进行观赏着.总会想着如何搭建自己的模型.如何实现自己所要绘制的一切.如你一样.我也拥有着这种冲动.如同我一开始学OpenGL的时候.我绘制出第一个三角形便觉得十分的兴奋.但当我尝试用它们建立各种奇怪的图形的时候.就像是搭积木一样.觉得怪异却....
      Drawable 故名 可绘制的.. 那么什么才是可绘制的.我们可以想象.常使用的点.线.三角形.四边形.等.这些就是可绘制的.OpenGL大可只能实现绘制最终也只是这些..

     经常使用的场景图是一般都是一颗树. 那么在OSG也不例外.它是一颗节点树.其最末梢的节点是Geode.即叶子节点. 一个Geode可以包含多个Drawable.因此在OSG中我们想要绘制诸如三角形等.最终需要使用的肯定也是Geode叶子节点.然后将Drawable加入Geode下...

     osg/Drawable 只是一个抽象类.那么实现它的类有多少呢? 还是比较多的.


而这中间最常用的莫属Geometry.几何体绘制..而说到几何体.需要的无非是点..颜色.以及如何组成图元<Primitive>..
      因此一个Geometry需要拥有的数据大可有点.法线坐标 纹理坐标.索引值...以及PrimitiveSet.
      点,法线,颜色等 需要用到矢量 即 osg::Vec2 osg::Vec3 osg::Vec4
      PrimitiveSet.则包含了组成如何组成一个图元的规则..如GL_POINT GL_TRIANGLES.等.
      用实例说明吧.如使用下面这段代码将会创建一个多彩的三角形.和一个白色的立方体.
    
Geode

       这里我将解释一些东西.
       1.Geometry默认是使用显示列表来绘制图元的.你大可观看源码或文档去了解.你可以设置
       setUseDisplayList(false) 禁用它.或者若在绑定数据的时候使用了BING_PER_PRIMITIVE也将会禁用显示列表
       2.ShapeDrawable 则是内置一些形状的图元.诸如 圆柱.球体.圆锥等.自己实现尝试一下.
       3.BING_PER_VERTEX 则指的每个顶点对应于一种属性(如例子中的颜色).
       4.BING_OVERALL 则是全部顶点使用一样的属性(如例子中的法线)

实例源代码下载:  ..下载地址

忘了说明一点.在OSG当中的坐标系是 z朝上.y朝里.x朝右..与OpenGL中刚好绕x轴旋转了90度..
还有一点则是.我们通常情况下默认使用视景器其中的一个关于摄像机漫游器其实默认是使用TrackballManipulator 因此.它会将视点中心指向整个场景的包围球中心...

最终结果图:如下:


posted on 2009-08-23 18:34 米游 阅读(6067) 评论(2)  编辑 收藏 引用 所属分类: OpenGL/OSG

评论:
# re: OSG学习 Drawable 与 几何体创建[未登录] 2009-09-30 11:12 | zero
osg::Box* boxtest = new osg::Box(osg::Vec3(1.5,0.0,0.0),1.0);
是如何决定立方体的方向???  回复  更多评论
  
# re: OSG学习 Drawable 与 几何体创建[未登录] 2009-10-02 00:17 | 米游
对于你想旋转正方体或者其他别的变换操作,其实主要是变换矩阵的操作。那么你可以使用MatrixTransform 并将正方体加入到MatrixTransform子节点下,具体参考 我博客里另外一篇关于OSG教程@zero
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理