【发布时间】:2011-12-04 10:11:11
【问题描述】:
我正在使用带有 PointSprites 的 ParticleSystem(灵感来自 Cocos2D Source)。但我想知道如何重建 OpenGL ES 2.0 的功能
glEnable(GL_POINT_SPRITE_OES);
glEnableClientState(GL_POINT_SIZE_ARRAY_OES);
glPointSizePointerOES(GL_FLOAT,sizeof(PointSprite),(GLvoid*) (sizeof(GL_FLOAT)*2));
glDisableClientState(GL_POINT_SIZE_ARRAY_OES);
glDisable(GL_POINT_SPRITE_OES);
这些在使用 OpenGL ES 2.0 上下文时会生成 BAD_ACCESS。 我应该简单地使用每个 PointSprite 的 2 个三角形吗?但这可能不是很有效(额外顶点的开销)。
编辑: 因此,我对建议的解决方案的新问题来自: https://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528
可以在批处理调用中传递许多不同的大小。我想过使用属性而不是统一,但是我需要始终将 PointSize 传递给我的着色器——即使我没有绘制 GL_POINTS。那么,也许是第二个着色器(仅用于 GL_POINTS 的着色器)?!我不知道在绘制例程中每帧切换着色器的开销(因为如果使用粒子系统,我自然也希望在没有 pointSize 的情况下渲染常规 GL_TRIANGLES)...对此有什么想法吗?
【问题讨论】:
-
谢谢!该链接非常有用。所以,我对这个解决方案的唯一问题是有可能在 GLSL 上做类似“glPointSizePointerOES”的事情(在链接上,它建议使用统一的点大小 - 这么多不同大小的不同点在批量调用中是不可绘制的与 glDrawArrays)。我想过使用属性而不是统一,但是我需要始终将 PointSize 传递给我的着色器——即使我没有绘制 GL_POINTS。那么,也许是第二个着色器(仅用于 GL_POINTS 的着色器)?!对此有何想法?
标签: opengl-es glsl particle-system point-sprites