寫在前面javascript
WebGl(全稱:Web Graphics Library : web圖形庫) 是基於OpenGL ES 2.0的3D繪圖協議。html
WebGL完美地解決了現有的Web交互式三維動畫的兩個問題:第一,它經過HTML腳本自己實現Web交互式三維動畫的製做,無需任何瀏覽器插件支持;第二,它利用底層的圖形硬件加速功能進行的圖形渲染,是經過統一的、標準的、跨平臺的OpenGL接口實現的。java
繪圖一個點的步驟web
<canvas id="canvas" width="200px" height="200px"></canvas>
var canvas = document.getElementById('canvas');
var gl = canvas.getContext('webgl');
//頂點着色器程序 var VSHADER_SOURCE = "void main() {" + //設置座標 "gl_Position = vec4(0.0, 0.0, 0.0, 1.0); " + //設置尺寸 "gl_PointSize = 10.0; " + "} ";
//片元着色器程序 var FSHADER_SOURCE = "void main() {" + //設置顏色 "gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" + "}";
Object createShader (enum type) type 兩種選擇 : gl.VERTEX_SHADER建立頂點着色器 , gl.FRAGMENT_SHADER 建立片斷着色器。
shaderSource(Object shader, string source) shader :着色器對象 source :着色器程序
compileShader(Object shader)
createProgram();
attachShader(Object program, Object shader);
linkProgram(shaderProgram);
useProgram(shaderProgram);
gl.drawArrays(gl.POINTS, 0, 1);
附上代碼canvas
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <canvas id="canvas" width="200px" height="200px"></canvas> </body> </html>
<script> window.onload = function () { //頂點着色器程序 var VSHADER_SOURCE = "void main() {" + //設置座標 "gl_Position = vec4(0.0, 0.0, 0.0, 1.0); " + //設置尺寸 "gl_PointSize = 10.0; " + "} "; //片元着色器程序 var FSHADER_SOURCE = "void main() {" + //設置顏色 "gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" + "}"; //獲取canvas元素 var canvas = document.getElementById('canvas'); //獲取繪製webgl繪圖上下文 var gl = canvas.getContext('webgl'); if (!gl) { console.log("Failed"); return; } //編譯着色器 // (1)建立Shader(着色器)對象 // (2)將着色器程序附加到Shader上 // (3)編譯程序 var vertShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertShader, VSHADER_SOURCE); gl.compileShader(vertShader); var fragShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragShader, FSHADER_SOURCE); gl.compileShader(fragShader); //合併程序 // (1)建立一個程序對象 // (2)附加着色器 // (3)連接着色器 // (4)使用程序 var shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, vertShader); gl.attachShader(shaderProgram, fragShader); gl.linkProgram(shaderProgram); gl.useProgram(shaderProgram); //繪製一個點 gl.drawArrays(gl.POINTS, 0, 1); } </script>
參考文獻瀏覽器
寫在最後動畫
新博客webgl