Graphics 如何从Elm中的三角形列表生成顶点法线

Graphics 如何从Elm中的三角形列表生成顶点法线,graphics,3d,elm,Graphics,3d,Elm,我有一个三角形列表,如 type alias Vertex={position:vec3} 列表(顶点,顶点,顶点) 现在我想计算三角形每个顶点的法向顶点。因此我需要先计算三角形的法线,这不是问题。我可以用法线为三角形建模,如下所示: type alias Triangle = {normal: Vertex, points: (Vertex,Vertex,Vertex)} 然后映射到原始列表并计算三角形的法线 但是,我需要找到所有三角形集共享同一点,以从这些三角形的所有法线计算该点的法线。

我有一个三角形列表,如

type alias Vertex={position:vec3}
列表(顶点,顶点,顶点)
现在我想计算三角形每个顶点的法向顶点。因此我需要先计算三角形的法线,这不是问题。我可以用法线为三角形建模,如下所示:

type alias Triangle = {normal: Vertex, points: (Vertex,Vertex,Vertex)}
然后映射到原始列表并计算三角形的法线

但是,我需要找到所有三角形集共享同一点,以从这些三角形的所有法线计算该点的法线。然后我需要用结果更新所有三角形,以存储所有顶点的法线。Te结果的格式为:

type alias-Vertex={position:vec3,normal:vec3}
列表(顶点,顶点,顶点)

所以我觉得使用列表可能不是最好的主意,但我不知道从哪里开始。

毕竟我想出了一个解决方案,有两个单独的列表,一个用于三角形,一个用于点:

type alias Mesh =
    { triangles : List ( Int, Int, Int )
    , points : Array Point
    } 

type alias Point =
    { position : Vec3
    , normal : Vec3
    }
三角形列表只包含一个元组,其中点列表中有3个位置的点。 然后分3步创建三角形列表:

  • 迭代点以创建三角形,并在同一步骤中计算法线并将其添加到点。已更新的点,将其设置回阵列中
  • 再次映射点以规范化总和
  • 迭代三角形列表,使用元组中的位置查找数组中的点