开发学院

您的位置:首页>教程>正文

教程正文

WebGL 上下文(Context)

WebGL 上下文

  要编写WebGL应用程序,首先要获取WebGL上下文对象,此对象与WebGL绘图缓冲区交互,并可以调用所有WebGL方法。为获取webgl上下文,执行以下操作:   创建一个html画布

  获取画布id

  获得WebGL

创建html画布元素

  我们知道创建一个html画布元素需要:

  1.在HTML5中编写canvas语句

  2.给canvas一个id

  3.使用高度和宽度属性更改画布尺寸(可选)

例子

  下面的示例演示如何创建维度500×500的画布元素。我们使用CSS为画布创建了一个边框,用于可见性。在文件中复制并粘贴以下代码,另存为my_canvas.html.

<!DOCTYPE HTML>
<html>
   <head>
      <style>
         #mycanvas{border:1px solid blue;}
      </style>
   </head>
   <body>
      <canvas id = "mycanvas" width = "300" height = "300"></canvas>
   </body>
</html>

获取画布id

  通过调用DOM (文档对象模型)方法getElementById()获取canvas对象。这个方法接受字符串值作为参数,因此我们将当前画布的名称传递给它。

例如,如果canvas名称是my_canvas,如下所示:

var canvas = document.getElementById('my_Canvas');

获取WebGL绘图上下文

  要获取WebGLRenderingContext对象(WebGL Drawing context object 或simply WebGL context) ,请调用当前html画布元素的getContext()方法。getcontext()的语法如下:

canvas.getContext(contextType, contextAttributes);

  通过字符串webgl或experimental-webgl作为contentType,contextAttributes参数是可选的。(在执行此步骤时,请确保浏览器实现了WebGL version 1 (OpenGL ES 2.0)).。

以下代码片段显示如何获取webgl呈现上下文。这里gl是获得的上下文对象的引用变量。

var canvas = document.getElementById('my_Canvas');
var gl = canvas.getContext('experimental-webgl');

WebGL ContextAttributes

参数WebGL ContextAttributes不是必须的。此参数提供各种选项,接受下面列出的属性:

参数名称参数说明
Alpha如果它的值为true,它将为画布提供一个alpha缓冲区。默认情况下为true.
depth如果其值为true,您将得到一个绘图缓冲区,其中包含至少16位的深度缓冲区,默认情况下为true.
stencil如果其值为true,您将得到一个绘图缓冲区,其中包含至少8位的模具缓冲区,默认情况下为false.
antialias如果它的值为true ,就会得到一个绘图缓冲区,它会执行抗锯齿,默认情况下为true.
premultipliedAlpha如果它的值为true,您将得到一个绘图缓冲区,其中包含带有前置放大系数的颜色,默认情况下为true.
preserveDrawingBuffer如果其值为true,则缓冲区将不被清除,并将保留其值,直到手工清除或覆盖,默认情况下为false.


  下面的代码片段显示如何使用stencil缓冲区创建WebGL上下文,并且它将不执行抗锯齿:

var canvas = document.getElementById('canvas1');
var context = canvas.getContext('webgl', { antialias: false, stencil: true });

  在创建WebGL WebGLRenderingContext时,创建一个绘图缓冲区。上下文对象管理OpenGL状态并呈现到绘图缓冲区。

WebGLRenderingContext

  它是WebGL的主要接口,它表示WebGL绘图上下文。此接口包含用于在绘图缓冲区上执行各种任务的所有方法。下面给出了此接口的属性。

参数名
参数说明
Canvas这是创建的上下文的画布元素的引用。
drawingBufferWidth此属性表示绘图缓冲区的实际宽度。它可能与HTMLCanvasElement的宽度属性不同。
drawingBufferHeight此属性表示绘图缓冲区的实际高度。它可能与HTMLCanvasElement的高度属性不同。