【问题标题】:What does face list represent?人脸列表代表什么?
【发布时间】:2016-11-01 20:40:14
【问题描述】:

我知道在网格表示中通常使用三个列表:

顶点列表,所有顶点,这个很好理解

法线列表,我猜每个表面的法线?

还有人脸列表,我不知道它是做什么的,也不知道如何计算。

例如,这是我在网上找到的描述三棱柱的网格。

double vertices[][] = {{0,1,-1},
           {-0.5,0,-1},
           {0.5,0,-1},
           {0,1,-3},
           {-0.5,0,-3},
           {0.5,0,-3},
          };

int faces[][] = {{0,1,2}, //front
         {3,5,4}, //back
         {1,4,5,2},//base
         {0,3,4,1}, //left side
         {0,2,5,3} //right side
        };

double normals[][] = { {0,0,1}, //front face
           {0,0,-1}, //back face
           {0,-1,0}, //base
                   {-2.0/Math.sqrt(5),1.0/Math.sqrt(5),0}, //left
                   {2.0/Math.sqrt(5),1.0/Math.sqrt(5),0} //right
             };

为什么底部、左右面有4个元素,而正面和背面只有3个?如何手动计算?

【问题讨论】:

    标签: graphics 3d mesh


    【解决方案1】:

    通常,faces 将每个三角形的索引存储在 vertices 数组中。所以第一个面是一个由顶点[0]、顶点[1]、顶点[2]组成的三角形。第二个由vertices[3]、vertices[4]、vertices[5]等组成。

    【讨论】:

    • 感谢您的解释。我不确定“索引”一词在这里是什么意思,或者我应该做什么操作。能给我一个更详细的例子吗?
    【解决方案2】:

    对于三角形网格,面是由 3 个顶点定义的三角形。通常,网格由 n 个顶点和 m 个面的列表组成。例如:

    顶点:

    Point_0 = {0,0,0}
    Point_1 = {2,0,0}
    Point_3 = {0,2,0}
    Point_4 = {0,3,0}
    ...
    Point_n = {30,0,0}
    

    面孔:

    Face_0 = {Point_1, Point_4, Point_5}
    Face_1 = {Point_2, Point_4, Point_7}
    ...
    Face_m = {Point_1, Point_2, Point_n}
    

    为简洁起见,您可以将 Face_0 定义为一组索引:{1,4,5}。

    此外,法线向量被计算为面部顶点之间的叉积。按照惯例,法线向量的方向指向网格外部。例如:

    normal_face_0 = CrossProcuct ( (Point_4 - Point_1) ,   (Point_5 - Point_4) )
    

    在您的情况下,在人脸定义中看到四个索引是很奇怪的。通常,数组中应该只有 3 个项目。你确定这不是一个错误?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 2020-03-19
      • 2017-08-29
      • 2014-05-03
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多