Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell OpenGL程序生成_Opengl_Haskell_Procedural Generation_Opengl 4 - Fatal编程技术网

Haskell OpenGL程序生成

Haskell OpenGL程序生成,opengl,haskell,procedural-generation,opengl-4,Opengl,Haskell,Procedural Generation,Opengl 4,我试图使用Haskell程序化地生成一个给定宽度的三角形正方形地形,并将其提供给OpenGL 实际生成的唯一东西是高度,这一点都不难,我只是使用一个随机函数来创建一个[[GLfloat]]],表示高度行 然后我还有一个函数,heightsToCoords,它接受[[GLfloat]]]并返回一个[GLfloat],其中包含每个顶点的x、y和z坐标 因此,如果我调用heightsToCoords[[0,1],[1,0]],它将返回 [0, 0, 0, 1, 1, 0, 0, 1, 1,

我试图使用Haskell程序化地生成一个给定宽度的三角形正方形地形,并将其提供给OpenGL

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

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

因此,如果我调用
heightsToCoords[[0,1],[1,0]]
,它将返回

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


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

在GL端,我会使用
抽屉元素
,它需要点列表和索引列表作为输入。因此,问题变成了如何在点列表中生成索引列表

记住原始的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]]
concat[[x+宽度*(y+1),1+x+宽度*y,x+宽度*y,
x+宽度*(y+1),1+x+宽度*(y+1),1+x+宽度*y]

|y不相关的建议:我会使用一个列表而不是一个高度列表,因为你可以保证每一行都有相同的宽度(而且可能更有效)或者甚至是a,这应该更有效。我写了一些东西,用haskell制作2D程序生成的图形。它使用显示列表和haskell列表。代码是。