WebGL只能繪製三種形狀: 數組
其它的形狀都是由上面的三種形狀合成以後繪製到三維空間中的spa
執行繪圖操做 WebGL 提供了兩種方法:code
這兩個方法的第一個參數都是一個常量orm
常量的取值範圍以下:blog
此外,gl.drawElement() 還接收兩個參數索引
例如繪製三角形能夠使用如下代碼事件
// 已經完成了使用着色器清理窗口等初始化操做,具體操做參考前面的文章 // 定義三個頂點的座標 let vertices = new Float32Array([0,1,1,-1,-1,-1]), buffer = gl.createBuffer(), vertexSetSize = 2, vertexSetCount = vertices.length/vertexSetSize, uColor, aVertexPosition; // 將數據放到緩衝區 gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); // 爲片斷着色器傳入顏色值 uColor = gl.getUniformLocation(program, "uColor"); gl.uniform4fv(uColor, [0, 0, 0, 1]); // 爲着色器傳入頂點信息 aVertexPosition = gl.getAttribLocation(program, "aVertexPosition"); gl.enableVertexAttribArray(aVertexPosition); gl.vertexAttribPointer(aVertexPosition, vertexSetSize, gl.FLOAT, false, 0, 0); // 繪製 gl.drawArrays(gl.TRIANGLES, 0, vertexSetCount);
WebGL 的紋理能夠使用DOM中的圖像,建立紋理須要調用 gl.createTexture()get
圖像加載完成前,紋理不會初始化,因此最好在load事件後設置紋理it
let image = new Image(), texture; image.src = "smile.gif"; image.onload = function(){ texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D,texture); gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true); gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA, gl.UNSIGNED_BYTE, image); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST); // 清除紋理 gl.bindTexture(gl.TEXTURE_2D,null); }
WebGL讀取像素須要使用 readPixels()io
參數:
示例:
let pixels = new Uint8Array(25*25); gl.readPixels(0, 0, 25, 25, gl.RGBA, gl.UNSIGNED_BYTE, pixels);