GLES20矩形
GLES20 的畫圖的模式:
GLES20.glDrawArrays(GLES20.GL_TRIANGLES , 0, vertexCount);
-
其中第一個(gè)參數(shù)的選項(xiàng): (自己的理解為)
GL_POINTS, 畫頂點(diǎn)的點(diǎn),
GL_LINE_STRIP, 將四個(gè)點(diǎn)連接起來 1 -> 2 -> 3 -> 4 , 但是最后沒有 4 -> 1 的閉合線, 導(dǎo)致圖像不是閉合的
GL_LINE_LOOP, 和上面的不同, 圖像是閉合的.
GL_LINES, 兩點(diǎn)之間畫線 1 -> 2 , 3 -> 4 , 這樣畫線
? //三角形
GL_TRIANGLE_STRIP, 三個(gè)點(diǎn)之間一直鏈接, 但是這個(gè)地方是只保證定義的所有點(diǎn)都被用到了,就完了, 這個(gè)地方是 0 -> 1 -> 2 , 1 -> 2 -> 3
GL_TRIANGLE_FAN, 3個(gè)點(diǎn)之間連接, 和line_loop 類型, 自動(dòng)會(huì)閉合全部的點(diǎn).
GL_TRIANGLES, 這個(gè)地方是3個(gè)點(diǎn)組成一個(gè)三角形,然后直接跳過之前的3個(gè)點(diǎn), 重新開始畫第二個(gè)三角形, 那么這個(gè)地方定義4個(gè)點(diǎn),只能畫,0 -> 1 -> 2 這個(gè)三角形, 剩下的一個(gè) 3 這個(gè)點(diǎn)單獨(dú)無法組成三角形.
-
網(wǎng)絡(luò)上面的解釋
GL_TRIANGLE_STRIP繪制三角形方式很多時(shí)候令人疑惑,在這里對(duì)其運(yùn)作機(jī)理進(jìn)行解釋。
一般情況下有三種繪制一系列三角形的方式袱蜡,分別是GL_TRIANGLES叙淌、GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN市咆。
[圖片上傳失敗...(image-a259b4-1513041184969)]
GL_TRIANGLES是以每三個(gè)頂點(diǎn)繪制一個(gè)三角形汉操。第一個(gè)三角形使用頂點(diǎn)v0,v1,v2,第二個(gè)使用v3,v4,v5,以此類推。如果頂點(diǎn)的個(gè)數(shù)n不是3的倍數(shù)蒙兰,那么最后的1個(gè)或者2個(gè)頂點(diǎn)會(huì)被忽略磷瘤。 GL_TRIANGLE_STR IP則稍微有點(diǎn)復(fù)雜。 其規(guī)律是: 構(gòu)建當(dāng)前三角形的頂點(diǎn)的連接順序依賴于要和前面已經(jīng)出現(xiàn)過的2個(gè)頂點(diǎn)組成三角形的當(dāng)前頂點(diǎn)的序號(hào)的奇偶性(如果從0開始): 如果當(dāng)前頂點(diǎn)是奇數(shù): 組成三角形的頂點(diǎn)排列順序:T = [n-1 n-2 n]. 如果當(dāng)前頂點(diǎn)是偶數(shù): 組成三角形的頂點(diǎn)排列順序:T = [n-2 n-21 n]. 以上圖為例搜变,第一個(gè)三角形采缚,頂點(diǎn)v2序號(hào)是2,是偶數(shù)挠他,則頂點(diǎn)排列順序是v0,v1,v2仰担。第二個(gè)三角形,頂點(diǎn)v3序號(hào)是3绩社,是奇數(shù),則頂點(diǎn)排列順序是v2,v1,v3,第三個(gè)三角形赂苗,頂點(diǎn)v4序號(hào)是4愉耙,是偶數(shù),則頂點(diǎn)排列順序是v2,v3,v4,以此類推拌滋。 這個(gè)順序是為了保證所有的三角形都是按照相同的方向繪制的朴沿,使這個(gè)三角形串能夠正確形成表面的一部分。對(duì)于某些操作败砂,維持方向是很重要的赌渣,比如剔除。 注意:頂點(diǎn)個(gè)數(shù)n至少要大于3昌犹,否則不能繪制任何三角形坚芜。 GL_TRIANGLE_FAN與GL_TRIANGLE_STRIP類似,不過它的三角形的頂點(diǎn)排列順序是T = [n-1 n-2 n].各三角形形成一個(gè)扇形序列斜姥。
畫矩形的方式
-
方式一
使用 GL_TRIANGLE_STRIP 的mode方式畫: 點(diǎn):(5個(gè)點(diǎn), 需要自己聲明閉合點(diǎn)) static final float squareCoords[] = { -0.5f, 0.5f, 0.0f, // top left -0.5f, -0.5f, 0.0f, // bottom left 0.5f, -0.5f, 0.0f, // bottom right 0.5f, 0.5f, 0.0f, // top right -0.5f, 0.5f, 0.0f, // top left }; 畫: GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP , 0, vertexCount);
?
-
方式二
使用 GLES20.GL_TRIANGLES 的方式畫: 點(diǎn):(需要6個(gè)點(diǎn)) static final float squareCoords[] = { -0.5f, 0.5f, 0.0f, // top left -0.5f, -0.5f, 0.0f, // bottom left 0.5f, -0.5f, 0.0f, // bottom right 0.5f, 0.5f, 0.0f, // top right -0.5f, -0.5f, 0.0f, // bottom left 0.5f, -0.5f, 0.0f, // bottom right }; 畫: GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
?
-
方式三
使用 GLES20.GL_TRIANGLE_FAN 的方式畫: 點(diǎn):(4個(gè)點(diǎn)) static final float squareCoords[] = { -0.5f, 0.5f, 0.0f, // top left -0.5f, -0.5f, 0.0f, // bottom left 0.5f, -0.5f, 0.0f, // bottom right 0.5f, 0.5f, 0.0f, // top right }; 畫: GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, vertexCount);
?