【问题标题】:Can I send openGL a pointer to more pointers, and use that for glVertexPointer?我可以向openGL发送一个指向更多指针的指针,并将其用于glVertexPointer吗?
【发布时间】:2009-10-30 16:47:33
【问题描述】:

我正在为 3d 网格使用 PowerVR .pod 文件类型。对于文件中的每个网格,Pod 将数据存储为顶点/法线/UV/vertex_indices 等的交错数组。

我正在尝试设置某种纹理批处理以最小化我的绘制调用,我的想法是我可以将共享纹理的网格中的所有数据组合成大型数组,然后在执行之前进行设置一次大抽奖。

该方法的问题在于,我只是复制了已从 .pod 文件中读取的所有数据。我想做的是创建一个共享纹理的所有顶点指针的数组,并告诉openGL使用该数组一次性绘制所有顶点,而不必将所有顶点数据复制到它自己的数组中。

有没有办法做到这一点?通常你会使用 glVertexPointer 来设置顶点数组,但这更像是 glVertexPointerPointer...

【问题讨论】:

    标签: iphone opengl


    【解决方案1】:

    不,OpenGL 不支持双重间接。

    关于网格加载,您有 2 个选项:

    • 在加载网格之前分配大缓冲区,将网格加载到大缓冲区中
    • 加载后分配大缓冲区,将数据复制到那里,删除初始网格数据。

    这两种解决方案都以数据的单一副本结束(如果您遵循 joshperry 的建议 - 您应该这样做 - 数据将由 OpenGL 而不是您自己管理)

    【讨论】:

      【解决方案2】:

      您可以将顶点缓冲区对象 (VBO) 用作“大型数组”,这会将您的网格数据放置在 VRAM 中,然后您可以使用索引(读取指针)将其渲染到您创建的 VBO .

      Vertex Buffer Objects

      【讨论】:

        猜你喜欢
        • 2016-08-11
        • 2015-02-16
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        相关资源
        最近更新 更多