首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL ES 2.0中的保态粒子系统

OpenGL ES 2.0中的保态粒子系统
EN

Stack Overflow用户
提问于 2013-06-13 14:41:48
回答 1查看 547关注 0票数 0

我试图在iPhone上使用OpenGL es2.0实现一个保持状态的粒子系统。所谓状态保持,我的意思是每个粒子在时间上是向前积分的,它有一个唯一的速度和位置矢量,它随时间而变化,不能在每次渲染调用时根据初始条件来计算。

这是我能想到的一种可能的方法。

  1. 在VBO中设置粒子初始条件。
  2. 在顶点着色器中集成粒子,将结果写入片段着色器中的纹理。(第一次呈现调用)
  3. 将数据从纹理复制到VBO。
  4. 用VBO渲染数据中的粒子。(第二次渲染调用)
  5. 重复2。-4。

我唯一不知道如何有效地做的事情就是第三步,我必须通过CPU吗?我想知道是否有可能完全在GPU上使用OpenGL ES 2.0来完成这个任务。任何提示都非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2013-06-13 17:54:25

我认为如果不使用glReadPixels,这是不可能的-- ES2没有OpenGL允许您使用GPU复制缓冲区内容的灵活缓冲区管理(例如,您可以在纹理和vbo之间复制数据,或者使用简单的转换反馈,这基本上是为了实现您想做的事情)。

我认为,如果需要使用GPU,唯一的选择是在呈现后使用glReadPixels将框架缓冲区内容复制回外部。您也可能希望检查和使用浮动或相关的,如果可用的话,以确保您有高精度的值(RGBA8可能不足以满足您的粒子)。如果您将其与普通呈现混合使用,您可能希望构建一堆缓冲(等待一两帧),这样就不会让CPU等待GPU (这在PowerVR上尤其糟糕,因为它在呈现之前会缓冲整个帧)。

ES3.0将支持转换反馈,这不会有帮助,但希望给您一些未来的希望。

另外,如果你在ARM cpu上运行,使用霓虹灯快速更新所有粒子似乎会更快。它可以非常快,并将跳过CPU+GPU方法所带来的所有开销。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17089955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档