如何在WebGL中存储和访问每个片段属性

时间:2015-05-14 17:53:44

标签: opengl-es three.js webgl fragment-shader particle-system

我正在使用Three.js在WebGL中进行粒子系统,我想在着色器中进行粒子的所有计算。为了实现这一点,粒子的位置(例如)存储在由每个粒子的顶点着色器(POINT基元)采样的纹理中。

位置纹理实际上是两个渲染目标,它们在屏幕更新后每帧交换。该纹理的每个像素代表一个粒子。 要更新位置,我会读取其中一个渲染目标(texture2D),进行一些计算,然后写入另一个渲染目标(片段输出)。

要执行“做一些计算”步骤,我需要一些每粒子属性,比如它的速度(以及很多其他属性)。由于此步骤是在片段着色器中完成的,因此我无法使用顶点属性缓冲区,因此我必须将这些属性存储在单独的纹理中,并在片段着色器中对每个属性进行采样。

它可以工作,但据我所知,采样纹理很慢,我想知道是否有更好的方法可以做到这一点,比如每个粒子有一个顶点,每个顶点渲染一个位置纹理的片段。 我知道OpenGL 4作​​为处理这个的一些替代方法,比如UBO或SSBO,但我不确定WebGL。

0 个答案:

没有答案