3

我正在尝试使用 Haskell 以程序方式生成给定宽度的三角方形地形,以提供给 OpenGL。

唯一实际程序生成的是高度,这一点也不难,我只是使用随机函数创建一个[[GLfloat]],表示高度的行。

然后我还有一个函数,heightsToCoords它接受[[GLfloat]]并返回[GLfloat]包含每个顶点的 x、y 和 z 坐标的 a。

所以如果我打电话heightsToCoords [[0, 1], [1, 0]],它会返回

[0, 0, 0,  
 1, 1, 0,
 0, 1, 1,
 1, 0, 1]

我遇到的问题是将数据获取到 OpenGL。OpenGL 需要对每个面进行三角剖分(至少在我的设置中),而我所拥有的只是点,我不确定如何创建面。

如何将这些数据从点列表转换为人脸列表?忽略法线和顶点的顺序。

4

1 回答 1

3

在 GL 方面,我会使用drawElements,它需要一个点列表和一个索引列表作为输入。所以问题变成了如何在你的点列表中生成一个索引列表。

记住原始的 XZ 网格,这个想法是为网格的每个单元格绘制两个三角形。所以我们每个网格单元需要 6 个索引。在 Haskell 中,我们可以这样写:

concat [[x + width * (y+1), 1 + x + width*y, x + width * y, 
         x + width* (y+1), 1 + x + width * (y+1), 1 + x + width*y] 
         | y <- [0..height-1], x <- [0..width-1]]
于 2014-01-13T15:22:53.490 回答