一 WebGL 著色器和繪製

2021-09-18 04:03:22 字數 1859 閱讀 5875

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切換著色器

到目前為止,以前的程式都是用了乙個著色器 頂點著色器和片元著色器 如果乙個著色器就能繪製出場景中所有的物體,那就沒有問題。然而事實是,對不同物體經常需要使用不同的著色器來繪製,每個著色器中可能有非常複雜的邏輯以實現各種不同的效果。我們可以準備多個著色器,然後根據需要來切換使用它們。實現切換著色器 為...