2015-10-17 103 views
1

我喜欢渲染几个在顶点着色器中动态计算的表面。曲面是通过存储在顶点属性缓冲区中的2d或3d网格中的顶点位移产生的。然而,如果非常大(数百万顶点)和许多具有不同分辨率的表面被渲染,我需要生成大量填充内存的“无聊”网格数据,可能会降低渲染速度,有时会中断渲染,如果大新的网格生成。OpenGL生成顶点属性

有什么办法可以随时生成简单的顶点属性网格,而不需要存储它们吗?

回答

1

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

+0

但是哪个OpenGL调用实际上运行的东西呢?是否有可能使用'glDrawArrays'没有任何数组绑定? – dronus

+0

在WebGL中给它一个快速尝试,只是为了找出WebGL根本不公开'gl_VertexID' ...所以'gl_VertexID'似乎不被所有OpenGL风格所支持,尽管它很简单。我只是现在添加一个标签WebGL .. – dronus

+0

但是,'gl_VertexID'当然可以通过一个int数组来模拟,并且对于所有比它的大小更小的原子可以重复使用'gl_VertexID'。所以更好,然后我没有任何东西... – dronus