WebGL入門教程(四)-webgl顏色

來源:互聯網
上載者:User

標籤:bar   參數   draw   浮點   類型   fail   attr   ons   buffers   

前面文章:WebGL入門教程(一)-初識webglWebGL入門教程(二)-webgl繪製三角形WebGL入門教程(三)-webgl動畫

顏色:

 

操作步驟:

  1.建立HTML5 canvas

  2.擷取畫布 canvas 的 ID

  3.擷取WebGL

  4.編譯著色器

  5.使用緩衝區對象向頂點傳入多個頂點資料

  6.繪製映像

以上1~3參考:http://www.cnblogs.com/bsman/p/6128447.html

4.編譯著色器

改頂點著色器,片著色器

//頂點著色器程式    var VSHADER_SOURCE =        "attribute vec4 a_Position;" +        "attribute vec4 a_Color;" +        "varying vec4 v_Color;" +        "void main(){" +        "gl_Position = a_Position;" +        "v_Color = a_Color;" +         "}";    //片元著色器    var FSHADER_SOURCE =        "precision mediump float;" +        "varying vec4 v_Color;" +         "void main() {" +         "gl_FragColor = v_Color;" +         "}";

解釋:定義修改顏色的變數 varying,其中"v_Color = a_Color;" 表示將顏色資料傳給片元著色器;"gl_FragColor = v_Color;"表示從頂點著色器接收資料;

 5.使用緩衝區對象向頂點傳入多個頂點資料

function initBuffers(gl,shaderProgram) {  //頂點座標和顏色    var vertices = new Float32Array([        0.0, 0.5, 1.0, 0.0, 0.0,       -0.5, -0.5, 0.0, 1.0, 0.0,        0.5, -0.5, 0.0, 0.0, 1.0,    ]);    var n = 3;//點的個數    //建立緩衝區對象    var vertexBuffer = gl.createBuffer();    //將緩衝區對象綁定到目標    gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);    //向緩衝區寫入資料    gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);    //擷取單個位元組    var FSIZE = vertices.BYTES_PER_ELEMENT;    //擷取座標點    var a_Position = gl.getAttribLocation(shaderProgram, ‘a_Position‘);    //將緩衝區對象分配給a_Position變數    gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, FSIZE*5, 0);    //串連a_Position變數與分配給它的緩衝區對象    gl.enableVertexAttribArray(a_Position);    //擷取Color座標點    var a_Color = gl.getAttribLocation(shaderProgram, ‘a_Color‘);    //將緩衝區對象分配給a_Position變數    gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false, FSIZE*5, FSIZE*2);    //串連a_Position變數與分配給它的緩衝區對象    gl.enableVertexAttribArray(a_Color);    return n;}

其中 vertexAttribPointer 方法注意此時數組中有多種資料,有座標和顏色,此時就應該修改第五個(跨度)和第六個參數(位移)的值

第一個參數:指定待分配attribute變數的儲存位置

第二個參數:指定緩衝區中每個頂點的分量個數(1~4)

第三個參數:類型有,gl.UNSIGNED_BYTE無符號位元組,gl.SHORT短整數,gl.UNSIGNED_SHORT無符號短整數,gl.INT整型,gl.UNSIGNED_INT無符號整型,gl.FLOAT浮點型。

第四個參數:表示是否將非浮點型的資料歸到[0,1][-1,1]區間

第五個參數:相鄰兩個頂點的位元組數。預設為0

第六個參數:表示緩衝區對象的位移量(以位元組為單位),就是attribute變數從緩衝區中的何處開始儲存。

6.繪製映像

 var n = initBuffers(gl,shaderProgram);    if(n<0){        console.log(‘Failed to set the positions‘);        return;    }    // 清除指定<畫布>的顏色    gl.clearColor(0.0, 0.0, 0.0, 1.0);    // 清空 <canvas>    gl.clear(gl.COLOR_BUFFER_BIT);    gl.drawArrays(gl.TRIANGLES, 0, n);

 

WebGL入門教程(四)-webgl顏色

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.