Webgl-可以写入片段着色器中纹理的任意位置吗?

Webgl-可以写入片段着色器中纹理的任意位置吗?,webgl,ant-colony,Webgl,Ant Colony,我正在考虑使用webgl重新创建 我计划使用rgba通道将所有蚂蚁代理的状态(x,y,方向)存储在一个纹理中。在绘制调用期间,将读取该纹理的每个像素,并基于该像素的值,将写入另一个纹理中的某些位置 这是使用webgl实现的方法吗?最好不要使用gl.readPixel,让所有东西都在gpu上运行模拟。您可以使用点飞溅: 将数据纹理绑定为采样器 使用例如gl.drawArrays(gl.points,0,antDataTexture.width*antDataTexture.height)在纹理中渲

我正在考虑使用webgl重新创建

我计划使用rgba通道将所有蚂蚁代理的状态(x,y,方向)存储在一个纹理中。在绘制调用期间,将读取该纹理的每个像素,并基于该像素的值,将写入另一个纹理中的某些位置


这是使用webgl实现的方法吗?最好不要使用gl.readPixel,让所有东西都在gpu上运行模拟。

您可以使用点飞溅:

  • 将数据纹理绑定为采样器
  • 使用例如
    gl.drawArrays(gl.points,0,antDataTexture.width*antDataTexture.height)在纹理中渲染尽可能多的点
  • 在顶点着色器中:

  • gl_PointSize
    设置为要渲染的精灵的大小(如果要写入单个像素的数据,则设置为1)
  • 通过使用以下任一方法读取顶点着色器中的纹理来确定
    gl\u位置
    • 顶点id(在webgl 2中随时可用)
    • 预计算坐标
  • 在片段着色器中:

  • 使用
    gl_PointCoord
    对您的精灵进行采样,或者输入您喜欢的任何数据
  • 最后

  • 通过让你的蚂蚁王国运转来获利;) 也就是说,对于模拟部分本身,您不需要写入任意位置,您可以在两个数据纹理之间进行乒乓,仅对于输出,您希望渲染实际位置的对象(在本例中为蚂蚁)