如何从Elm

时间:2016-12-06 13:03:10

标签: graphics 3d elm

我有一个列表三角形,如

的形式
type alias Vertex = {position: vec3}
List (Vertex,Vertex,Vertex)

现在我想计算三角形每个顶点的法线顶点。因此,我需要先计算三角形的法线,这不是问题。我可以用这样的正常模型建立一个三角形:

type alias Triangle = {normal: Vertex, points: (Vertex,Vertex,Vertex)}

然后映射原始列表并计算三角形的法线。

但是我需要找到所有三角形集共享相同的点,从这个三角形的所有法线计算这个点的法线。然后我需要用结果更新所有三角形,以将​​法线存储在其所有顶点中。结果将采用以下格式:

type alias Vertex = {position: vec3, normal: vec3}
List (Vertex,Vertex,Vertex)

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

1 个答案:

答案 0 :(得分:0)

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

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

type alias Point =
    { position : Vec3
    , normal : Vec3
    }

三角形列表只包含一个元组,在点列表中有3个点的位置。 然后创建三角形列表需要3个步骤:

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