zoukankan      html  css  js  c++  java
  • webots自学笔记(七)通过定义顶点构件3D形状(IndexedFaceSet节点)

    原创文章,来自博客园,_阿龙clliu http://www.cnblogs.com/clliu/,转载请注明原文章出处。

          看到自己写的东西有人支持,也蛮欣慰的,所以顶着毕设的压力还是再更新一篇。

          在webots中使用VRML语言建模,这个语言是比较老的了,确实没有现在的建模工具好用。这一次讲的是IndexedFaceSet节点,在VRML语言里也是有的。

          比方说我要建一个正六变形柱体,如图所示,当然可以建一些复杂的,只要顶点的坐标都是已知就可以(话说模型都应该是已知的)。

         先要知道这个模型所以顶点的坐标,以中心为原点。我是用Matlab算的,然后还可以按格式输出。正六边形边长1.5m,高0.2m,坐标如下。

            1.299 0 0.75
            0 0 1.5
            -1.299 0 0.75
            -1.299 0 -0.75
            0 0 -1.5
            1.299 0 -0.75
            1.299 0.2 0.75
            0 0.2 1.5
            -1.299 0.2 0.75
            -1.299 0.2 -0.75
            0 0.2 -1.5
            1.299 0.2 -0.75

          在shape节点插入IndexedFaceSet节点,需要在coord节点下添加所以顶点,在coordIndex节点下添加一些索引(后面讲)。会发现操作起来真的很繁琐,需要一下一下点新建,一个一个点改值,就这12个点我已经不耐烦了,要是更多人都会疯掉的。 不过还是有方法的,千万别傻傻的自己一个一个点加,接着往下看。

                                          

          将这个节点所在的Shape节点导出成wbo格式的一个文件,用记事本打开,发现是可以读的,其实就是VRML语言拉。导出前在顶点和索引上新建几个,就会出现下面看到有一些0。在这里面修改可以方便很多。

          接下来说说IndexedFaceSet怎么构建3D形状的,将12个顶点添加进去后,点的索引就是0—11,在coordIndex节点下,用索引号排列便是以顶点建立面,比如 0 1 2 3 4 5,就是以这第1-6个点组成一个面,构建完一个面以-1隔开。比如0 1 2 3 4 5 -1 11 10 9 8 7 6 -1 ,这样就构建了两个面(实体的上下两个正六边形)。

          注意:构建的面只要单反向的可视性,就是你从正面看是可以看到这个面的,从后面看就什么都看不到,面隐身了。以观察方向的逆时针方向逐个添加索引号,是可以看见的。下面话一个图理解一下。 在图中,上面的六个顶点索引号是0-5,下面六个顶点的索引号是6-11。如果我们从上面往下看这个实体,顶面构建为0 1 2 3 4 5,是逆时针方向,所以是能看到的。从下面往上看,底面构建为11 10 9 8 7 6 ,是逆时针,所以从下面是可见的。

     

          建立一个实体,可视的方向都是从外面看,如果你把视角调到物体的里面,这个实体就看不见了。所有面画完的代码如下:

    #VRML_OBJ V6.0
    Shape1 {
      geometry IndexedFaceSet {
        coord Coordinate {
          point [
            1.299 0 0.75
            0 0 1.5
            -1.299 0 0.75
            -1.299 0 -0.75
            0 0 -1.5
            1.299 0 -0.75
            1.299 0.2 0.75
            0 0.2 1.5
            -1.299 0.2 0.75
            -1.299 0.2 -0.75
            0 0.2 -1.5
            1.299 0.2 -0.75
          ]
        }
        coordIndex [
          0 1 2 3 4 5 -1 11 10 9
          8 7 6 -1 9 3 2 8 -1 4
          3 9 10 -1 5 4 10 11 -1 0
          5 11 6 -1 1 0 6 7 -1 2
          1 7 8 -1
        ]
      }
    }

          这样的建模确实有点繁琐,所以VRML语言现在用的不怎么多。

  • 相关阅读:
    Freedur为什么会免费?
    Cocos2d-x中使用音频CocosDenshion引擎介绍与音频文件的预处理
    AssetManager asset的使用
    Android AsyncHttpClient
    UI标签库专题十三:JEECG智能开发平台 ckfinder(ckfinder插件标签)
    UBUNTU 下如何升级 gcc, g++
    java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
    最新Connectify注冊码(序列号) Connectify3.7序列号 破解版
    简单单元測试思想
    Dijkstra算法
  • 原文地址:https://www.cnblogs.com/clliu/p/6673094.html
Copyright © 2011-2022 走看看