Opengl es 如何在WebGL中存储和访问每片段属性
我正在使用Three.js在WebGL中创建一个粒子系统,我想在着色器中完成所有粒子的计算。为此,粒子的位置(例如)存储在纹理中,该纹理由每个粒子(点基本体)的顶点着色器进行采样 “位置”(position)纹理实际上是两个渲染目标,在屏幕外更新后,每个帧都会进行交换。此纹理的每个像素表示一个粒子。 为了更新位置,我读取其中一个渲染目标(texture2D),进行一些计算,然后在另一个渲染目标(片段输出)上写入 要执行“执行一些计算”步骤,我需要一些每粒子属性,比如它的速度(以及许多其他属性)。因为这一步是在片段着色器中完成的,所以我不能使用顶点属性缓冲区,所以我必须将这些属性存储在单独的纹理中,并在片段着色器中对每个属性进行采样 这是可行的,但据我所知,纹理采样很慢,我想知道是否有更好的方法来实现这一点,比如每个粒子有一个顶点,每个顶点渲染一个位置纹理片段。Opengl es 如何在WebGL中存储和访问每片段属性,opengl-es,three.js,webgl,fragment-shader,particle-system,Opengl Es,Three.js,Webgl,Fragment Shader,Particle System,我正在使用Three.js在WebGL中创建一个粒子系统,我想在着色器中完成所有粒子的计算。为此,粒子的位置(例如)存储在纹理中,该纹理由每个粒子(点基本体)的顶点着色器进行采样 “位置”(position)纹理实际上是两个渲染目标,在屏幕外更新后,每个帧都会进行交换。此纹理的每个像素表示一个粒子。 为了更新位置,我读取其中一个渲染目标(texture2D),进行一些计算,然后在另一个渲染目标(片段输出)上写入 要执行“执行一些计算”步骤,我需要一些每粒子属性,比如它的速度(以及许多其他属性)。
我知道OpenGL 4是处理这个问题的一些替代方法,比如UBO或SSBO,但我不确定WebGL。我认为使用纹理是一种方法。使用2个RGBA纹理应该可以提供8个参数来处理。在生成片段时,位置已经被处理(剪裁、投影并映射到设备坐标)。因此,如果要改变位置,则必须在顶点着色器中进行。我不确定你所说的wcochran是什么意思。我的纹理系统已经很好地工作了,我还没有注意到你描述的问题。你能解释一下如何在顶点着色器中加载、更改和保存粒子的当前位置吗?你不能,你需要一个纹理。不过我有点困惑。按照我的理解,你将位置渲染到纹理,在粒子顶点着色器中读取,然后计算速度?不,要渲染位置,我需要读取存储在纹理中的速度属性(这是我通过这个问题试图改进的)。