Answers:
从另一个角度看这个问题:
开发人员如何选择一种技术而不是另一种?
因此,我将讨论关于这些品质的canvas API和webGL API之间的区别。
canvas和webGL都是JavaScript API。关于集成(绑定),它们几乎相同。它们都受到许多库的支持,这些库可以加快编码速度。不同的库为您提供了不同的组织代码的方式,因此库的选择决定了绘图API的结构,但仍然几乎是同一件事(其余代码如何与之绑定)。如果使用库,编写代码的难易程度取决于库本身。
如果您从零开始编写代码,canvas API更容易学习和理解。它只需要很少的数学知识,并且开发快速而直接。
使用WebGL API需要强大的数学技能和对渲染管道的全面理解。具有这些技能的人更难找到,生产速度较慢(由于此类代码库的大小和复杂性),因此成本更高。
WebGL更快,并且具有更多功能。毫无疑问。它是本机3D API,可让您完全访问渲染管道,代码和效果执行得更快,并且更“可调整”。使用webGL确实没有限制。
canvas和webGL都是html5好东西。通常,支持一个的设备将支持另一个。
因此,总结一下:
希望这可以帮助。
PS公开讨论。
WebGL提供2D画布不提供的2D功能?最大的恕我直言是图形硬件上的可编程片段着色器。例如,在WebGL中,您可以在3D硬件上的着色器中实现Conway的生命游戏:
http://glslsandbox.com/e#207.3
这种2D显示只能在具有2D画布的CPU上运行,而不能在GPU上运行。所有的计算都将用JavaScript实现,即使在网络工作者的帮助下,也不会像GPU那样并行。当然,这只是一个示例,可以使用着色器实现各种有趣的2D效果。
好吧,性能将是最大的原因之一,因为在编写游戏代码时,它必须要快。但是,还有其他一些原因可能导致您需要在画布上选择WebGL。它提供了对着色器,照明和缩放进行编码的可能性,如果您正在使用商业游戏应用程序,则这非常重要。在50个左右的精灵之后,画布也会变得不稳。
使用Canvas不能做的事,不能使用webGL来做:画布允许使用get / putImageData压碎字节,并且您可以使用webGL以编程方式绘制线条,圆圈。
但是,如果您要绘制一些图形,以及60 fps的效果,则性能差距是如此之大,以至于画布无法在WebGL上正常运行。性能是根本特征。
但是webGL的编程非常复杂:看看canvas是否足以满足您的需求,或者寻求一个可以减轻痛苦的库...
其他缺点:它在IE(但有什么用)和某些移动设备上不起作用。
有关兼容性,请参见此处:http : //caniuse.com/webgl
正如您特别想要一些经典的2d物件无法在画布上正常工作:
...但是您当然可以访问像素,因此您可以手动执行任何操作,包括上述操作。但这可能确实非常缓慢。您可以使用Mesa openGl脚本来在理论上渲染到画布。
使用webGL的另一个重要原因是将结果移植到其他地方非常容易。这也使该技能更有价值。
使用画布的原因是它仍然得到更好的支持,并且如果您学会逐像素做事,这也是非常有价值的一课。
由于WebGL是特别新的技术,而HTML5 canvas更加成熟,因此您要使用的内容取决于用户。如果您认为您的用户将使用移动设备,那么我建议使用HTML5画布,但是如果您想要更好的2D渲染,则可以使用WebGL。因此,您可以做的是,如果将其用于带HTML5的移动渲染上,否则,如果它们在支持WebGL的平台上使用。
例如:
if (window.WebGLRenderingContext) {
webGLcanvasApp()
} else if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
html5CanvasAppFMobile()
} else {
html5CanvasApp()
}