【问题标题】:Million mesh programmatically? [closed]以编程方式实现百万网格? [关闭]
【发布时间】:2023-04-05 06:46:01
【问题描述】:

我有一个用单个全屏GL_QUAD 绘制的平面。

我想在我的GL_Texture2D 指定的每个点上变形这个表面,最好是通过某种着色器。

在我看来,黑色可以对应平坦,白色可以对应山。

我想在我的地形上拥有大约 400 万个点,并在程序的每一步更新它们。

我将如何使用几何着色器来做到这一点?着色器是否能够生成新的顶点?

【问题讨论】:

  • 您能否重新构建您的问题,使其无法用简单的“是”或“否”来回答?
  • 我看不出这与 GLSL 以外的任何编程语言有什么关系;删除 c++ 标签。
  • 您使用的是 OpenGL 4.0 或更高版本吗?如果是,那么听起来您应该使用曲面细分着色器(而不是几何着色器)来做您想做的事情。
  • 我不明白你为什么需要几何着色器。只需按照@jozxyqk 的建议使用顶点着色器。如果您真的想在每一步修改顶点坐标,即保存在顶点着色器中完成的计算,请查看变换反馈。

标签: opengl glsl opengl-4


【解决方案1】:

最简单的方法是生成一个大的三角形带状网格,将其上传到 VBO 并绘制它,使用顶点着色器仅更改上坐标。顶点着色器还可以从高度图生成法线(或提供法线贴图),然后将其传递给片段着色器进行照明。

为避免为顶点存储大量数据,请使用 glVertexID 在顶点着色器中从头开始生成顶点位置。不要绑定任何缓冲区,只需调用 glDrawArrays(GL_TRIANGLE_STRIP, 0,lots)。

正如 GuyRT 所提到的,镶嵌着色器也很好,它允许您根据相机与网格的距离来改变镶嵌细节。不过,这将是更多的工作。

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 2012-03-15
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2015-03-17
    相关资源
    最近更新 更多