1. 程式人生 > >WebGL畫一個10px大小的點

WebGL畫一個10px大小的點

繼承 -1 posit tro oop pre position 指定 html

WebGL程序在屏幕上同時使用HTML和javascript來創建和顯示三維圖形。WebGL中新引入的<canvas>元素標簽,它定義了網頁上的繪圖區域。

由於<canvas>元素可以靈活地同時支持維維圖形和三維圖形,它不直接提供繪圖方法,而是提供一種叫上下文(context)的機制來進行繪圖。我們首先獲取這個上下文。
//獲取WebGL繪圖上下文
var gl = getWebGLContext(canvas, true);

getWebGLContext(element, [debug]);

獲取WebGL繪圖上下文; 如果開啟debug屬性,遇到錯誤時將在控制臺顯示錯誤消息。參數:
參數
element 指定canvas標簽
debug 默認為false,如果設置為true,javascript中發生的錯誤將被顯示在控制臺上。註意,在調試結束後關閉它,否則會影響性能
返回值 non-null WebGL繪圖上下文
null WebGL不可用
WebGL畫一個10px大小的點:
/***
 * 1.畫一個矩形
 */
function main() {
    //獲取<canvas>標簽
    var canvas = document.getElementById("myCanvas");
    //獲取WebGL繪圖上下文
    var gl = getWebGLContext(canvas, true);
    //如果瀏覽器不支持WebGL則提示錯誤
    if(!gl){
        console.log("請使用高版本的瀏覽器!");
        return;
    }
    console.log(gl);
    //指定清除顏色緩沖區的顏色,每個分量的取值範圍0-1
    gl.clearColor(0.5, 1, 1, 1);
    //用指定的顏色清除顏色緩沖區
    gl.clear(gl.COLOR_BUFFER_BIT);
}

/***
 * 1.畫一個點
 */
//頂點著色器程序
var VSHADER_SOURCE =
    "void main(){\n" +
    //設置坐標
    "gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" +
    //設置尺寸
    "gl_PointSize = 10.0;\n" +
    "}\n";
//片元著色器
var FSHADER_SOURCE =
    "void main() {\n" +
    //設置顏色
    "gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n" +
    "}\n";
function main(){
    //獲取<canvas>標簽
    var canvas = document.getElementById("myCanvas");
    //獲取WebGL繪圖上下文
    var gl = getWebGLContext(canvas, true);
    //如果瀏覽器不支持WebGL則提示錯誤
    if(!gl){
        console.log("請使用高版本的瀏覽器!");
        return;
    }
    console.log(initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE));
    //初始化著色器
    if(!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)){
        console.log("著色器初始化失敗!");
        return;
    }
    //設置<canvas>的背景色
    gl.clearColor(0.0, 0.0, 0.0, 1.0);
    //清空<canvas>
    /***
     * gl.clear();函數繼承自OpenGL();
     * 它基於多基本緩沖區模型,比二維繪圖上下文復雜的多。
     * 清空繪圖區,實際上是在清空顏色緩沖區 通過指定的顏色去擦除已經繪制的內容。
     * 傳遞 gl.COLOR_BUFFER_BIT參數就是在告訴WebGL清空顏色緩沖區。
     * 如果在使用該函數之前沒有指定任何顏色,那麽默認會rgba(0,0,0,0);作為清除顏色。
     * 這個顏色是全透明的,替換出來的結果就是什麽顏色都沒有,顯示為瀏覽器本身的顏色。
     * 
     */
    gl.clear(gl.COLOR_BUFFER_BIT);
    //繪制一個點
    /***
     * drawArrays(mode, first, count);
     * mode:指定繪圖的方式,可接收以下常量符號:
     * POINTS LINES LINE_STRIP LINE_LOOP TRIANGLES TRIANGLES_STRIP TRIANGLES_FAN
     * first:指定從哪個頂點開始繪制 整型
     * count:指定繪制需要用到多少個頂點 整型
     * 返回值:無
     * 錯誤:
     * INVALID_ENUM:傳入mode參數不是前序參數之一
     * INVALID_VALUE:參數first或count是負數
     */
    gl.drawArrays(gl.POINTS, 0, 1);
}

WebGL畫一個10px大小的點