iT邦幫忙

DAY 11
0

30 天實戰跨平台行動APP系列 第 11

Day 11 WebGL 顏色

  • 分享至 

  • xImage
  •  

回到Day 9的例子

我們想辦法來加些變化,首先是幫三角形上色

因為WebGL中的幾何圖形都是由vertex組成的,

所以就是要幫每個頂點增加顏色的屬性,又從Day10知道

頂點的屬性是由vertex shader控制。所以第一步就先從vertex shader開始。

將vertex shader改寫成

attribute vec3 aVertexPosition;

attribute vec3 aVertexColor;

varying highp vec4 vColor;

void main(void) {

    gl_Position = vec4(aVertexPosition, 1.0); 

    vColor = vec4(aVertexColor, 1.0);

}

而fragment shader改寫成

varying highp vec4 vColor;
void main(void)
{
    gl_FragColor = vColor;
}

首先在vs shader中,我們創建了一個attribute變數aVertexColor

是要讓我們從外部傳進去的值,而varying highp 變數vColor

是讓我們從vs shader傳遞到fs shader的。highp修飾詞代表高精度的意思。

接著在WebGL裡面我們建立儲存顏色的方式也是跟坐標一樣,儲存在buffer內,

我們建立兩個變數

var
vertexColorAttribute = null,
trianglesColorBuffer = null;

一個是buffer,一個是要傳入vertex shader的變數

然後再setupBuffer函式內建立color資料

	  var triangleVerticeColors = [
	                               				// left
	                                          1.0, 0.0, 0.0,
	                                          0.0, 1.0, 0.0,
	                                          0.0, 0.0, 1.0,
	                                          // right
	                                          0.0, 0.0, 1.0,
	                                          0.0, 1.0, 0.0,
	                                          1.0, 0.0, 0.0
                              ];       

接下來將color資料建立至buffer內

trianglesColorBuffer = gl.createBuffer();

gl.bindBuffer(gl.ARRAY_BUFFER, trianglesColorBuffer);

gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVerticeColors), gl.STATIC_DRAW);

再drawScene函式中我們將colour buffer 傳入vs shader

vertexColorAttribute = gl.getAttribLocation(glProgram, "aVertexColor");
gl.enableVertexAttribArray(vertexColorAttribute);
gl.bindBuffer(gl.ARRAY_BUFFER, trianglesColorBuffer);
gl.vertexAttribPointer(vertexColorAttribute, 3, gl.FLOAT, false, 0, 0);

結果顯示:


上一篇
Day 10 Web GL Shader介紹
下一篇
Day 12 WebGL 移動
系列文
30 天實戰跨平台行動APP26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言