WebGL 和 Three.js 可以优雅地处理哪些图形限制?

cor*_*vid 3 javascript canvas webgl

我一直对此很好奇,并没有看到太多突破界限的例子。

在图形方面,canvas大概能走多远?在它开始变得不稳定之前,是否有一个合适的方法来衡量它可以处理多少个多边形?也许是一款可以与之相比的游戏?

Dan*_*ard 5

画布与 WebGL

首先,术语“画布”不是“WebGL”的同义词。

以下初始化程序返回一个 CanvasRenderingContext2D

canvas.getContext("2d");
Run Code Online (Sandbox Code Playgroud)

虽然这个初始值设定项返回一个 WebGLRenderingContext

canvas.getContext("webgl");
Run Code Online (Sandbox Code Playgroud)

HTML5<canvas>元素用作容器,而 WebGL 是该容器中一种可能的渲染上下文。

关于 WebGL 初始化的更多信息

WebGL 限制

至于限制,理论上 WebGL 使用的视频驱动程序与您机器上运行的任何桌面 OpenGL 应用程序使用的视频驱动程序相同。话虽如此,重要的是要注意 WebGL 本质上是 OpenGL ES 2.0,与标准 OpenGL 相比,它具有一些限制。

有关 OpenGL ES 的更多信息,您可以参考维基百科

另一个限制是您接触广泛受众的能力。WebGL 在 IE 11 中仅部分支持,在 11 之前完全不支持。在当前版本的 Opera 和旧版本的 Safari(8.0 版之前)中,默认情况下它也被禁用。来源:WebGL 支持

此外,WebGL 应用程序运行的是 JavaScript 引擎,而不是本地编译的桌面应用程序。虽然 Chrome 的 V8 引擎在提高 JavaScript 性能方面取得了令人难以置信的进步,但它仍然比原生应用慢。

有关这些挑战和其他挑战的更深入分析,请参阅:WebGL 挑战

总之

WebGL 基于 OpenGL ES 2.0,它是 OpenGL 的功能略有减少的版本。它还运行在 JavaScript 引擎之上,该引擎比本机代码慢。WebGL 在不同的 Web 浏览器之间并没有得到同等的支持或标准化。

除了上述限制之外,WebGL 能够渲染您的 GPU 可以在桌面应用程序中渲染的几乎任何内容,但可能会降低性能。

撇开限制不谈,Epic Games 几个月前宣布与 Mozilla 合作开展一项涉及将虚幻引擎 4 移植到 WebGL 的项目,因此我们当然不应该急于就 WebGL 的真正功能得出任何结论。