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语言现在用的不怎么多。

  • 相关阅读:
    Python学习札记(十五) 高级特性1 切片
    LeetCode Longest Substring Without Repeating Characters
    Python学习札记(十四) Function4 递归函数 & Hanoi Tower
    single number和变体
    tusen 刷题
    实验室网站
    leetcode 76. Minimum Window Substring
    leetcode 4. Median of Two Sorted Arrays
    leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions 、434. Number of Islands II(lintcode) 并查集 、178. Graph Valid Tree(lintcode)
    刷题注意事项
  • 原文地址:https://www.cnblogs.com/clliu/p/6673094.html
Copyright © 2011-2022 走看看