【问题标题】:OpenGL: optimal way to draw environment from height array?OpenGL:从高度数组中绘制环境的最佳方法?
【发布时间】:2014-04-16 00:07:53
【问题描述】:

所以我正在编写一个带有高度映射的 openGL 程序来制作 3D 室外环境。与所有高度映射一样,每个点在 x 和 z 轴上与其相邻点的距离相同,但每个顶点的 y 轴不同,具体取决于程序读取的高度图。

到目前为止,我的程序将读取存储在高度图中,并存储在大小等于 (image_width)*(image_height) 的 y 高度数组中。我的问题是,在给定这些数据的情况下,绘制四边形环境的最有效方法是什么?

我认为以某种方式使用 glDrawArrays 是答案,但最初没有任何模式可以处理给定的数据。例如,如果我的数据数组在行之间交替,并且如果我在列的末尾停止每个条带,我可以使用 GL_TRIANGLE_STRIP,但是这将需要发送到 glDrawArrays 的数据数组多次存储每行的值。考虑到初始数组仅存储 y 值,它还需要一个数组的大小与我的初始数组相比为 x3。但是,在给定数据的情况下,每帧指定每个四边形肯定不会是有效的吗?

【问题讨论】:

    标签: opengl heightmap gldrawarrays


    【解决方案1】:

    最简单的(尽管在速度或内存方面不一定最有效)是为每个四边形生成两个三角形并将其作为单个 VBO 上传到 GPU。

    正如您所指出的,尽管这意味着您的数据量基本上是高度图本身的三倍。 (应使用索引缓冲区,以免重复顶点)。

    恕我直言,这是一个很好的教程,涵盖了这种方法:http://3dgep.com/?p=1116

    另一种方法是使用三角形条带并使用退化三角形链接地形的每一行,这样您就只有一个绘制调用。但是仍然有内存开销。

    根据您对 OpenGL 的熟练程度(以及您的显卡的现代程度),您可以查看通过直接使用高度图“纹理”解决上述问题的镶嵌着色器:

    http://codeflow.org/entries/2010/nov/07/opengl-4-tessellation/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多