OpenGL 生成顶点属性

OpenGL generate vertex attributes

我喜欢渲染几个在顶点着色器中动态计算的表面。这些表面是通过存储在顶点属性缓冲区中的 2d 或 3d 网格中的顶点位移生成的。

但是,如果渲染非常大(数百万个顶点)和许多具有不同分辨率的表面,我需要生成大量 "boring" 网格数据来填满内存,可能会减慢渲染速度并且有时会中断如果生成大的新网格则渲染。

有没有什么方法可以动态生成简单的顶点属性网格,而不需要存储它们?

您当然可以直接在顶点着色器中生成统一的网格。在相当现代的 GL 中,您可以完全 无属性 工作。着色器中的 gl_VertexID 输入将告诉您当前正在处理的顶点。通过一些整数除法和取模,您可以轻松地将其映射到二维网格。您仍然需要一些方法来描述位移。直观的方法似乎是为此使用 2D 纹理(并且您可以轻松地从网格中的坐标中导出纹理坐标),但是有不同的选项。您甚至可以通过一些数学模型按程序生成它。