我实际上已经使用FrameBuffer 对象作为渲染到纹理的方法实现了该章中描述的技术(但在桌面 OpenGL 中,因为当时 WebGL 不存在),所以这绝对是可能的。不幸的是,我不再相信我有代码了,但是如果您用 [webgl] 标记您将来遇到的任何问题,我会看看是否可以提供一些帮助。
您将需要每帧多次乒乓球(文章提到了五个步骤,但我似乎记得确切的数字取决于您想要的模拟质量和您的确切边界条件)。使用 FBO 比编写本文时效率高很多(作者提到使用 GeForce FX 5950,这是不久前的事),所以我不会担心他在文章中提到的开销。只要您不将数据带回 CPU,就不会发现在纹理和帧缓冲区之间切换的成本太高。
如果您的边界只有一个像素厚,您将有一些泄漏,但这可能会或可能不会接受,具体取决于您渲染结果的方式和流体的速度。使边界变厚可能会有所帮助,并且自这篇论文以来已经写过一些论文,它们探索了将流体限制在边界内的不同方法(我还记得一些关于更有效的扩散/压力求解器的文章,你可以在拥有这个之后查看版本工作...如果您搜索引用 google 学者上 GPU gems 文章的论文,您会发现一些有趣的后续行动)。
附录:我不确定我是否完全理解你关于边界的问题。关键是你必须在你想成为边界的每个像素上运行一个着色器,但是那个像素如何到达那里并不重要,不管它是用线、点还是三角形绘制的(只要它的输入是正确的)。
在非常一般的情况下(如果您只有有限数量的边界图元,这可能不适用),您可能必须绘制一个覆盖帧缓冲区的四边形,因为与速度和压力场的交互更加复杂(任何周围的像素可以是另一个边界像素,而不是简单定义的边缘)。有关如何执行此操作的一些说明,请参见第 38.5.4 节(任意边界)。如果某物不是边界,则不会触及向量场,如果是,则不是硬编码要查看的方向以求和向量值,而是最终可能会测试周围的像素并且仅求和那些不是边界的,以便您可以强制执行边界条件。