【问题标题】:OpenGL generate vertex attributesOpenGL生成顶点属性
【发布时间】:2015-10-17 17:55:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: opengl webgl


    【解决方案1】:

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

    【讨论】:

    • 但是哪个 OpenGL 调用实际上运行了这个东西呢?是否可以在没有任何数组绑定的情况下使用glDrawArrays
    • 在 WebGL 中快速尝试一下,只是为了发现 WebGL 根本不公开 gl_VertexID...所以 gl_VertexID 似乎并不被所有 OpenGL 风格支持,尽管这很简单。我现在只是添加一个标签 WebGL..
    • 然而,gl_VertexID 当然可以用一个 int 数组来模拟,并且可以在所有基元数少于其大小的情况下重用它。总比我猜的要好...
    • @dronus: 好吧,你应该在前面提到过WebGL……它基于GLES2,在这些方面非常有限。对于 webgl,我真的想不出一个好的解决方案(当然这并不意味着没有)。
    • 是的,我把它们都放进锅里了……我的错。对于 OpenGL,已经很难说某些功能在某些设置中是否可用,而且 GLES 甚至不称为 OpenGL..
    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多