【问题标题】:Draw particles trajectories of undefined length with opengl使用opengl绘制未定义长度的粒子轨迹
【发布时间】:2016-05-26 23:27:53
【问题描述】:

我必须绘制一个物理模拟,显示围绕粒子移动的轨迹。绘制时从数据库中实时读取 3D 位置数据。一旦为每个对象设置了 VBO,绘图调用将是标准的glDrawArrays(GL_LINE_STRIP, 0, size)。问题是存储轨迹点的 VBO 会在每帧更新,因为添加了新点。这在我看来效率极低!此外,如果我想用渐变颜色绘制从粒子实际位置到旧点的轨迹怎么办?我必须在每次绘制调用时更新 VBO 中所有顶点的颜色!通过这种东西的标准方法是什么?

总结一下:

  • 我想绘制未定义的线 - 可能是无限的 - 长度(长度随时间增加)。
  • 我希望轨迹中点的颜色根据轨迹上的实际相对位置进行着色(例如,开头为白色(实际粒子位置),结尾为黑色(第一个粒子位置),中间为灰色) .

我阅读了很多教程,但我没有发现任何关于绘制不断更新和无限增长的线条的信息......我将不胜感激任何建议!谢谢!

【问题讨论】:

  • 固定功能还是可编程流水线?

标签: opengl


【解决方案1】:
  1. 使用多个 VBO,这样每个 VBO 就有固定数量的顶点。这样,您只需在添加新点时修改序列中的最后一个 VBO,而不是完全更新一个巨大的 VBO。
  2. 添加序列号顶点属性或使用gl_VertexID 并将总点数作为统一传入。然后,您可以将给定顶点的序列号除以总数,并使用该分数在渐变颜色之间进行混合。

【讨论】:

  • 好的,谢谢!还有一个问题:要更新顶点,我调用 glBufferData() 来获取顶点数组......有一种方法可以只缓冲最后一个位置而不记住 VBO 中的所有顶点?
  • @bluePhlvio:glBufferSubData() 将允许您进行就地更新,尽管您不能以这种方式增加缓冲区。
  • 为什么我不能这样增长缓冲区?
  • @bluePhlvio:来自文档:“offsetsize 必须定义一个完全位于缓冲区对象数据存储中的范围。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2011-01-24
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多