WebGl 利用緩衝區物件畫多個點

2022-07-03 09:12:12 字數 2707 閱讀 8903

效果:

>webgl 利用緩衝區物件畫多個點

title

>

6head

>

7<

body

>89

<

canvas

id="mycanvas"

width

="500"

height

="300"

style

='border:1px

solid red'

>

canvas

>

1011

body

>

1213

14<

script

>

1516

window.onload

=function

() ";49

50//

片段著色器

51var

fragcode ="

void main() ";

5455

建立乙個頂點著色器物件、乙個片段著色器物件

56var

vertshader

=gl.createshader(gl.vertex_shader);

57var

fragshader

=gl.createshader(gl.fragment_shader);

5859

為兩個著色器附加源**

60gl.shadersource(vertshader, vertcode);

61gl.shadersource(fragshader, fragcode);

6263

編譯著色器

64gl.compileshader(vertshader);

65gl.compileshader(fragshader);

6667

建立要儲存的著色器程式物件

68var

shaderprogram

=gl.createprogram();

6970

為著色器程式附加著色器

71gl.attachshader(shaderprogram, vertshader);

72gl.attachshader(shaderprogram, fragshader);

7374

鏈結兩個著色器

75gl.linkprogram(shaderprogram);

7677

使用組合著色器程式物件

78gl.useprogram(shaderprogram);

7980

8182

//步驟四: 關聯著色器程式到緩衝物件

83//

4.1 繫結緩衝區物件

84//

gl.bindbuffer(gl.array_buffer, vertex_buffer);

8586

獲取屬性(定點的座標點)

87var

coord

=gl.getattriblocation(shaderprogram,

"coordinates");

8889

將緩衝區物件分配給coord變數

90//

這裡是設定獲取資料的規則 第二個引數3 表示每個點定點有3個資料(對應vec3)

91gl.vertexattribpointer(coord,

3, gl.float,

false, 0

, 0);92

93//

4.4 啟用屬性

94gl.enablevertexattribarray(coord);

9596

97//

步驟五: 繪製所需的物件

98//

清除畫布顏色

99gl.clearcolor(

0.5,

0.5,

0.5,

0.9);

100101

//啟用深度測試

102gl.enable(gl.depth_test);

103104

//清除顏色緩衝位

105gl.clear(gl.color_buffer_bit);

106107

//設定檢視視窗

108gl.viewport(0,

0,mycanvas.width,mycanvas.height);

109110

//畫 三角形

111gl.drawarrays(gl.points, 0,

3)112113

114}

115116

script

>

117118

html

>

WebGL學習系列 使用緩衝區物件畫多個點

一般而言,我們需要繪製的點的數量非常的多,所以不可能像第乙個程式一樣乙個點乙個點繪製,webgl提供了緩衝區物件,用於處理繪製多個點的資料問題。座標系為了更好的理解點的位置,我們需要知道canvas以及webgl的座標系。canvas座標系如下所示 webgl座標系如下所示 可以看到,webgl的座...

WebGL學習 緩衝區物件(四)

緩衝區物件 webgl提供的一種機制,可以一次性向著色器傳入多個頂點資料,我們可以一次性向緩衝器物件中填充大量的頂點資料,然後將這些資料儲存起來,供頂點著色器使用。初始化過程 建立緩衝器物件 gl.createbuffer 繫結緩衝器物件 gl.bindbuffer gl.array buffer,...

WebGL之旅(二十)幀緩衝區物件FBO

前面都是將作為繪製圖形時的紋理對映,這一節來看看如何將渲染結果作為紋理,即動態生成紋理,貼在另乙個物體上。預設情況下,都是在螢幕提供幀緩衝區中繪製,如果要動態生成紋理,就需要另外新建乙個緩衝區物件,來代替預設的緩衝區,在其中進行離屏繪製。幀緩衝區物件包括 顏色關聯物件 可以是紋理物件或渲染緩衝區物件...