---
title: WebGL
slug: Web/API/WebGL_API
tags:
- 3D图形
- WebGL
- WebGL API
- 图像
- 媒体
- 高级
translation_of: Web/API/WebGL_API
---
{{WebGLSidebar}}
WebGL(Web图形库)是一个JavaScript API,可在任何兼容的Web浏览器中渲染高性能的交互式3D和2D图形,而无需使用插件。WebGL通过引入一个与OpenGL ES 2.0非常一致的API来做到这一点,该API可以在HTML5 {{HTMLElement("canvas")}}元素中使用。 这种一致性使API可以利用用户设备提供的硬件图形加速。
目前支持 WebGL 的浏览器有:Firefox 4+, Google Chrome 9+, Opera 12+, Safari 5.1+, Internet Explorer 11+和Microsoft Edge build 10240+;然而, WebGL一些特性也需要用户的硬件设备支持。
{{anch("WebGL 2")}} API引入了对大部分的OpenGL ES 3.0功能集的支持; 它是通过{{domxref("WebGL2RenderingContext")}}界面提供的。
{{HTMLElement("canvas")}} 元素也被 Canvas API 用于在网页上进行2D图形处理。
参考
标准接口
- {{domxref("WebGLRenderingContext")}}
- {{domxref("WebGL2RenderingContext")}}
- {{domxref("WebGLActiveInfo")}}
- {{domxref("WebGLBuffer")}}
- {{domxref("WebGLContextEvent")}}
- {{domxref("WebGLFramebuffer")}}
- {{domxref("WebGLProgram")}}
- {{domxref("WebGLQuery")}}
- {{domxref("WebGLRenderbuffer")}}
- {{domxref("WebGLSampler")}}
- {{domxref("WebGLShader")}}
- {{domxref("WebGLShaderPrecisionFormat")}}
- {{domxref("WebGLSync")}}
- {{domxref("WebGLTexture")}}
- {{domxref("WebGLTransformFeedback")}}
- {{domxref("WebGLUniformLocation")}}
- {{domxref("WebGLVertexArrayObject")}}
扩展
- {{domxref("ANGLE_instanced_arrays")}}
- {{domxref("EXT_blend_minmax")}}
- {{domxref("EXT_color_buffer_float")}}
- {{domxref("EXT_color_buffer_half_float")}}
- {{domxref("EXT_disjoint_timer_query")}}
- {{domxref("EXT_float_blend")}} {{experimental_inline}}
- {{domxref("EXT_frag_depth")}}
- {{domxref("EXT_sRGB")}}
- {{domxref("EXT_shader_texture_lod")}}
- {{domxref("EXT_texture_compression_bptc")}}
- {{domxref("EXT_texture_compression_rgtc")}}
- {{domxref("EXT_texture_filter_anisotropic")}}
- {{domxref("OES_element_index_uint")}}
- {{domxref("OES_fbo_render_mipmap")}}
- {{domxref("OES_standard_derivatives")}}
- {{domxref("OES_texture_float")}}
- {{domxref("OES_texture_float_linear")}}
- {{domxref("OES_texture_half_float")}}
- {{domxref("OES_texture_half_float_linear")}}
- {{domxref("OES_vertex_array_object")}}
- {{domxref("OVR_multiview2")}}
- {{domxref("WEBGL_color_buffer_float")}}
- {{domxref("WEBGL_compressed_texture_astc")}}
- {{domxref("WEBGL_compressed_texture_atc")}}
- {{domxref("WEBGL_compressed_texture_etc")}}
- {{domxref("WEBGL_compressed_texture_etc1")}}
- {{domxref("WEBGL_compressed_texture_pvrtc")}}
- {{domxref("WEBGL_compressed_texture_s3tc")}}
- {{domxref("WEBGL_compressed_texture_s3tc_srgb")}}
- {{domxref("WEBGL_debug_renderer_info")}}
- {{domxref("WEBGL_debug_shaders")}}
- {{domxref("WEBGL_depth_texture")}}
- {{domxref("WEBGL_draw_buffers")}}
- {{domxref("WEBGL_lose_context")}}
事件
- {{domxref("HTMLCanvasElement/webglcontextlost_event", "webglcontextlost")}}
- {{domxref("HTMLCanvasElement/webglcontextrestored_event", "webglcontextrestored")}}
- {{domxref("HTMLCanvasElement/webglcontextcreationerror_event", "webglcontextcreationerror")}}
常量和类型
WebGL 2
WebGL 2 是WebGL的一个主要更新,它通过{{domxref("WebGL2RenderingContext")}} 接口提供。它基于OpenGL ES 3.0,新功能包括:
另请参见博客文章 "WebGL 2 lands in Firefox" 和 webglsamples.org/WebGL2Samples 几个演示。
指南和教程
下面,您将找到各种指南,以帮助您学习WebGL概念和教程,提供分步课程和示例。
指南
- WebGL 中的数据
- 编写WebGL代码时使用的变量,缓冲区和其他类型数据的指南。
- WebGL 最佳实践
- 提示和建议,以帮助您提高WebGL内容的质量,性能和可靠性。
- 使用扩展
- WebGL 扩展的使用指南。
教程
- WebGL 教程
- WebGL 核心概念的初学者指南。如果您以前没有 WebGL 的经验,那么这是一个很好的起点。
示例
- 一个基础的 WebGL 的 2D 动画示例
- 此示例演示了单色形状的简单动画。检查的主题是适应宽高比差异,从多个着色器集合构建着色器程序的功能,以及 WebGL 绘图的基础知识。
- WebGL示例
- 一系列带有简短说明的实时示例展示了WebGL的概念和功能。根据主题和难易程度对示例进行了排序,涵盖了WebGL渲染上下文,着色器编程,纹理,几何图形,用户交互等。
高级教程
- WebGL 模型视图投影
- 详述了常用于显示3D物体视图的三种核心矩阵:模型,视图和投影矩阵。
- Web 中的矩阵运算
- 讲述 3D 变换矩阵工作原理的指南 —— 这也能在WebGL计算和CSS3变换中派上用场。
资源
库
规范
Specification |
Status |
Comment |
{{SpecName('WebGL')}} |
{{Spec2('WebGL')}} |
初始定义。基于 OpenGL ES 2.0 |
{{SpecName('WebGL2')}} |
{{Spec2('WebGL2')}} |
在 WebGL 1 基础上构建。基于 OpenGL ES 3.0 |
{{SpecName('OpenGL ES 2.0')}} |
{{Spec2('OpenGL ES 2.0')}} |
|
{{SpecName('OpenGL ES 3.0')}} |
{{Spec2('OpenGL ES 3.0')}} |
|
浏览器兼容性
WebGL 1
{{Compat("api.WebGLRenderingContext", 0)}}
WebGL 2
{{Compat("api.WebGL2RenderingContext", 0)}}
兼容性说明
不仅是浏览器,GPU本身也需要支持该特性。比如 S3 纹理压缩 (S3TC) 只在基于图睿的GPU的设备上可用。大多数浏览器可以通过 webgl
这一上下文名称来使用 WebGL,但是旧的浏览器需要使用 experimental-webgl
。另外,将来的 WebGL 2 只会向后兼容,其使用的上下文名称为 webgl2
。
Gecko备忘
WebGL调试与检测
开始使用Gecko 10.0 {{geckoRelease("10.0")}}, 在测试中,这里有两个参数可以让你来控制WebGL性能:
webgl.min_capability_mode
- 一个以布尔值存储的属性。当它的值为
True
时,将会启用最小性能模式。当这个模式启用时,WebGL将会仅提供由其标准指定的最基本的功能集和性能支持。这样可以确保您的WebGL代码能够在性能的设备和浏览器上正确运行。它的默认值是False
。
webgl.disable_extensions
- 一个以布尔值存储的属性。当它的值为
True
时,会禁用所有的WebGL拓展。它的默认值是False
。
参见