Haskell OpenGL procedural generation



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

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

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

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

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

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

如何将此数据从点列表转换为面列表?忽略法线和顶点顺序。

在 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]]

相关内容

  • 没有找到相关文章

最新更新