【问题标题】:What is the best way to fill my VBOs?填写我的 VBO 的最佳方式是什么?
【发布时间】:2012-11-16 15:03:28
【问题描述】:

我正在使用存储在名为 CMesh 的类的对象中的 OpenGL 渲染几个网格。一个 CMesh 包含很多由 CVertex 对象和三角形表示的顶点。每个 CVertex 都包含一个 Vector 及其位置。
由于顶点位置在渲染过程中不断变化,因此每次渲染网格时我都必须重写我的 VBO 数据数组。尽管与其他大型游戏相比,我没有那么多顶点,但这会极大地减慢整个程序。
有没有更好的方法来做到这一点?

【问题讨论】:

  • 为什么你不断地改变顶点位置而不是使用平移?
  • 它们是动画的。平移、旋转……是通过给着色器一个额外的矩阵来完成的。
  • @Florian:如果您在着色器中通过矩阵进行转换...为什么必须重写缓冲区对象数据?
  • @NicolBolas 着色器中的转换是针对整个对象的,而重写是因为每个顶点的动画

标签: c++ arrays opengl vbo vertex


【解决方案1】:

使用变形目标或至少使用带有多个骨骼的蒙皮网格。这比手动更新每个顶点要好得多

【讨论】:

    【解决方案2】:

    假设您使用的是 GL_STATIC_DRAW,您可以将其更改为使用 GL_DYNAMIC_DRAW,这不会降低程序的速度。或者,计算对象在 GPU 上的新位置也是一种值得研究的可能性。

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2021-04-16
      • 2011-06-07
      • 2012-08-30
      相关资源
      最近更新 更多