var vshader_source =
'void main()'
型別和變數名字:
var fshader_source = '
' void main()'
/**
* * @param mode 繪製模式
* gl.points, gl.lines, gl.line_strip, gl.line_loop ....
* @param first 從哪個點開始繪製
* @param count 指定繪製需要多少個頂點
*/ gl.drawarrays(mode, first, count);
gl.getattriblocaltion(program, name);
引數 program: 程式物件
gl.vertexattrib3f(a_position, 0.0, 0.0, 0.0);
引數:a_position 指定要修改的attribute 變數儲存位置
v1, v2, v3:三個分量
uniform變數操作同attribute
使用緩衝區步驟
1.建立緩衝區:
var vertexbuffer = gl.createbuffer()
2、繫結緩衝區:
gl.bindbuffer(target, buffer)
target:兩個引數
gl.array_buffer 表示緩衝區物件中包含了頂點的資料
gl.element_array_buffer 表示緩衝區物件包含了頂點資料的索引值
3、將資料寫入緩衝區
gl.bufferdata(target, data, usage);
target: gl.array_buffer || gl.element_array_buffer
data:寫入緩衝區的資料(型別化資料 float32array()之類)
usage: 表示程式如何使用儲存在緩衝區物件中的資料,幫助webgl優化操作
gl.static_draw 寫入一次資料,但繪製很多次
gl.stream_draw 寫入一次資料,繪製若干次
gl.dynamic_draw 多次寫入資料,並繪製很多次
4、將緩衝區物件分配給attribute變數
gl.vertexattribpointer(localtion, size, type,normalized, stride, offset)
localtion: attribute變數儲存位置
size: 指定緩衝區每個頂點的分量個數(1到4),如果提供的比需要的少,則補0
type: 用下面型別來指定資料格式
gl.unsigned_byte
gl.short
gl.unsigned_short
gl.int
gl.unsigned_int
gl.float
normalize: 傳入true或false, 表明是否將非浮點數資料歸一化到[0,1] or [-1,1]區間
stride: 相鄰兩個頂點間的位元組數,預設為0
offset: 指定緩衝區的偏移量,如果從起始位置開始,則填0
5、開啟attribute變數
gl.enablevertexarray(location)
attribute變數位址
webgl學習 著色器
著色器是一段使用glsl語言 一種類c的高階語言 編寫的簡短程式,它定義了3d物件的畫素點實際繪製到螢幕上的方式,webgl要求開發者要為每個待繪製的物件提供乙個著色器,乙個著色器可以應用於多個物件,因此在實際的應用中,整個場景通常提供乙個統一的 著色器。乙個著色器,通常由兩個部分組成 頂點著色器 ...
建立WebGL著色器程式
既然是高階,我們就要先從基礎入手,那麼先看一下如何建立乙個webgl的著色器程式 初始化著色器程式外掛程式 initshaders.js function initshaders gl,vertexshaderid,fragmentshaderid else var fragelem documen...
51 WebGL切換著色器
到目前為止,以前的程式都是用了乙個著色器 頂點著色器和片元著色器 如果乙個著色器就能繪製出場景中所有的物體,那就沒有問題。然而事實是,對不同物體經常需要使用不同的著色器來繪製,每個著色器中可能有非常複雜的邏輯以實現各種不同的效果。我們可以準備多個著色器,然後根據需要來切換使用它們。實現切換著色器 為...