webgl第八課-繪製多個頂點的基礎知識
需要原始碼可以Q群:828202939 或者點選這裡 希望可以和大家一起學習、一起進步!!純手打!!
書籍是PDF電子檔,也在Q群裡,所有的課程原始碼在我上傳的資源裡面,本來想設定開源,好像不行!
如有錯別字或有理解不到位的地方,可以留言或者加微信15250969798,在下會及時修改!!!!!
本節主要是為了後面的一些稍微複雜的一些課程內容做鋪墊!
buffer object (緩衝區物件) 它可以一次性地向著色器傳入多個頂點的資料。緩衝區物件是webgl系統中的一塊記憶體區域,我們可以一次性地向緩衝區物件填充大量的頂點資料,然後將這些資料儲存在其中,以供頂點著色器使用
一般分為以下幾個步驟:
1.建立緩衝區物件 gl.createBuffer() //gl.daeletBuffer(buffer)可以刪除緩衝區物件
2.繫結緩衝區物件 gl.bindBuffer(target,buffer)
target表示需要繫結緩衝區物件的目標物件,有以下幾個引數:
gl.ARRAY_BUFFER 、gl.ELEMENT、ARRAY_BUFFER、buffer
3.將資料寫入緩衝區物件 gl.bufferData(target,data,usage)
target gl.ARRAY_BUFFER或者gl.ELEMENT_ARRAY_BUFFER
data 寫入緩衝區物件的資料(型別化陣列)
usage 表示程式如何使用儲存在緩衝區物件中的資料,這個引數主要幫助webgl進行效能優化,有gl.STATIC_DRAM、
gl.STREAM_DEAM、gl.DYNAMIC_DEAM
4.將緩衝區物件分配給一個attribute變數 gl.vertexAttribPointer(location,size,type,normalized,stride,offset)
將繫結到gl.ARRAY_BUFFER的緩衝區物件分配給由location指定的attribute變數
location 指定帶分配attribute變數的儲存位置
size 指定緩衝區中每個頂點的分量個數(1-4,xyzw)
type 指定的資料格式
normalize 傳入true或者false,表明是否將非浮點型的資料歸一化到【0,1】或者【-1,1】區間
stride 指定相鄰兩個頂點間的位元組數,預設為0
offset 指定緩衝區物件的偏移量,即attribute變數從緩衝區中的何處開始儲存
5.開啟attribute變數 gl.enableVertexAttribARRAY(a_POsition)
開啟location指定的attribute變數
a_Position 指定attribute變數的儲存位置
補充::::::
補充一: gl.disableVertexAttribARRAY(a_POsition)
關閉location指定的attribute
補充二: 型別化陣列:Int8Array 、UInt8Arrray、Int16Array 、UInt16Arrray、Int32Array 、UInt32Arrray、Float32Array、Float64Arry
方法: get(index) 獲取第index個元素只 set(index, value ) 設定第index個元素的值為value
set(array,offset) 從第offset個元素開始將陣列array中的值填充進去 length 陣列的長度
BYTES_PER_ELEMENT 陣列中的每個元素所佔的位元組數
型別化陣列通過new來建立 ,不能直接使用【】使用
型別話陣列不支援push()和pop()方法
補充三:
gl.drawArrays(mode,first,count)
mode 指定繪製的方式
first 指定從哪個頂點開始繪製(整型數)
count 指定繪製需要用到多少個頂點(整型數)
基本上一些基礎的知識就是這些了!