在 JavaScript 中使用 WebGL 着色器语言 (GLSL) 进行任意向量数学计算
WebGL 着色器语言 (GLSL) 是一个非常强大的多维向量数学工具。
是否有可能使用 JavaScript(在网络浏览器中运行)的强大功能进行私人非 3D 计算?获取数据是可能的,但是有什么方法可以在着色器计算完成后将数据输出到 JavaScript 中吗?
不需要实际绘图,只需计算向量。 (我正在考虑用 JavaScript 编写的硬件加速重力模拟器的想法。)
谢谢!
新闻报道:Khronos 似乎正在开发 WebCL,这将是 OpenCL。这正是我正在寻找的,但这需要一些时间......
The WebGL Shader Language (GLSL) is a very powerful tool for multidimensional vector mathematics.
Is there any possibility to use that power from JavaScript (running in web browser) for private non-3D calculations? Getting data in is possible, but is there any way to get data out to JavaScript after shader calculations are done?
No actual drawing is necessary, only calculating vectors.
(I am toying with an idea of hardware accelerated gravity simulator written in JavaScript.)
Thank You!
In the news: Khronos seems to be developing WebCL which will be a JavaScript accessible version of OpenCL. That is exactly what I am looking for, but it will take some time...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
据我从 spec 中可以看到,WebGL 支持帧缓冲区对象和回读操作。这足以让您转换数据并将其返回到客户端空间。以下是一系列操作:
As far as I can see from the spec WebGL supports framebuffer objects and read-back operations. This is sufficient for you to transform the data and get it back into client space. Here is a sequence of operations:
glReadPixels
.从浏览器中的着色器中获取浮点实际上非常容易,但限制是每个像素 1 个浮点。
我们将 4 个 int 转换为 1 个 float (r: int, g: int, b: int, a: int) -> (rgba:浮动)。
感谢 IEEE
用法:
着色器:
JavaScript:
Getting floats out of a shader in the browser is actually pretty easy, the constraint being 1 float per pixel though.
We convert 4 ints to 1 float (r: int, g: int, b: int, a: int) -> (rgba: float).
Thanks IEEE
Usage:
Shader:
JavaScript:
是的,这是可行的——Aaron Babcock 这里。
Yes, it's doable -- there's an old demo (might require some tweaks to get it to work on the 1.0 WebGL specification) by Aaron Babcock here.