- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 WebGL 和 GLSL 着色器编程在 GPU 上实现有效的流体求解器。
我发现了有趣的文章:
http://http.developer.nvidia.com/GPUGems/gpugems_ch38.html
见: 38.3.2 板操作
我想知道这种强制边界条件的技术是否可以通过乒乓渲染实现?
如果我只渲染线条,那么纹理的内部呢?
我一直认为必须将整个输入纹理复制到临时纹理(在该过程中更新 ofc 边界),因为它们在该操作之后被交换。
这很有趣,特别是考虑到 的事实。示例 38-5。边界条件片段程序 (可视化:http://i.stack.imgur.com/M4Hih.jpg)显示了恕我直言需要乒乓球技术的方案。
你怎么看?我误解了什么吗?
一般来说,我发现纹理写入非常昂贵,这就是为什么我想以某种方式限制它。不幸的是,乒乓技术强制执行大量纹理写入。
最佳答案
我实际上已经使用 FrameBuffer objects 实现了该章中描述的技术。作为渲染到纹理的方法(但在桌面 OpenGL 中,因为当时 WebGL 不存在),所以这绝对是可能的。不幸的是,我不再相信我有代码了,但是如果您用 [webgl] 标记您将来遇到的任何问题,我会看看我是否可以提供一些帮助。
您将需要每帧多次乒乓球(文章提到了五个步骤,但我似乎记得确切的数字取决于您想要的模拟质量和您的确切边界条件)。使用 FBO 比编写本文时效率高很多(作者提到使用 GeForce FX 5950,这是不久前的事),所以我不会担心他在文章中提到的开销。只要您不将数据带回 CPU,就不会发现在纹理和帧缓冲区之间切换的成本太高。
如果您的边界只有一个像素厚,您将有一些泄漏,但这可能会或可能不会接受,具体取决于您渲染结果的方式和流体的速度。使边界变厚可能会有所帮助,并且自这篇论文以来已经写过一些论文,它们探索了将流体限制在边界内的不同方法(我还记得一些关于更有效的扩散/压力求解器的文章,你可以在拥有这个之后查看版本工作...如果您搜索 papers that cite the GPU gems article on google scholar,您会发现一些有趣的后续行动)。
附录:我不确定我是否完全理解你关于边界的问题。关键是你必须在你想成为边界的每个像素上运行一个着色器,但是那个像素如何到达那里并不重要,不管它是用线、点还是三角形绘制的(只要它的输入是正确的)。
在非常一般的情况下(如果您只有有限数量的边界图元,这可能不适用),您可能必须绘制一个覆盖帧缓冲区的四边形,因为与速度和压力场的交互更加复杂(任何周围的像素可以是另一个边界像素,而不是简单定义的边缘)。有关如何执行此操作的一些说明,请参见第 38.5.4 节(任意边界)。如果某物不是边界,则不会触及向量场,如果是,则不是硬编码要查看的方向以求和向量值,而是最终可能会测试周围的像素并且仅求和那些不是边界的,以便您可以强制执行边界条件。
关于glsl - GPGPU - 有效的乒乓球技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11629227/
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
编辑 2: Pastebin link to the full ball, bat, and AIbat classes. 编辑:我已经更新了 turbo 代码,只是对其进行了更好的评论。我也有一个链
我一直在研究乒乓球着色,并认为在我上一个问题之后我已经破解了它。但是,随着对着色器的进一步了解,看起来虽然我能够在 FBO A 和 FBO B 上运行着色器,但 A 的输出并未用作 B 的源。换句话说
我是编程新手。基本上刚刚完成了几个教程和准系统说明。我想编写 pong 代码让自己开始尝试自己做一些事情,但我遇到了一些障碍。出于某种原因,我生成的球根本不会与我的玩家 1 Racket 互动,但它会
我是一名优秀的程序员,十分优秀!