Skip to content

Commit a224eb1

Browse files
committed
+MultiAttributeSize
1 parent f9827fa commit a224eb1

File tree

3 files changed

+128
-1
lines changed

3 files changed

+128
-1
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html lang = "en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<title>Multi Attribute Size</title>
6+
</head>
7+
<body onload="main()">
8+
<canvas id="webgl" width="400" height="400">
9+
Please use the browert supporting "canvas"
10+
</canvas>
11+
<script src="../lib/webgl-utils.js"></script>
12+
<script src="../lib/webgl-debug.js"></script>
13+
<script src="../lib/cuon-utils.js"></script>
14+
15+
<script src="MultiAttributeSize.js"></script>
16+
</body>
17+
</html>
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
// MultiAttributeSize.js
2+
// 顶点着色器
3+
var VSHADER_SOURCE =
4+
'attribute vec4 a_Position;\n' +
5+
'attribute float a_PointSize;\n' +
6+
'void main() {\n' +
7+
' gl_Position = a_Position;\n' +
8+
' gl_PointSize = a_PointSize;\n' +
9+
'}\n';
10+
11+
// 片源着色器
12+
var FSHADER_SOURCE =
13+
'precision mediump float;\n' +
14+
'uniform vec4 u_FragColor;\n' + // uniform变量
15+
'void main() {\n' +
16+
' gl_FragColor = u_FragColor;\n' +
17+
'}\n';
18+
19+
function main() {
20+
// 获取<canvas>元素
21+
var canvas = document.getElementById('webgl');
22+
23+
// 获取webGL上下文
24+
var gl =getWebGLContext(canvas);
25+
26+
if(!gl) {
27+
console.log('Failed to get the rendering context for WebGL');
28+
return;
29+
}
30+
31+
// 初始化着色器
32+
if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) {
33+
console.log('Failed to initialize shaders');
34+
return;
35+
}
36+
37+
// 设置顶点位置
38+
var n = initVertexBuffers(gl);
39+
if (n < 0) {
40+
console.log('Failed to set the positions of the vertices');
41+
return;
42+
}
43+
44+
// 清空<canvas>的背景色
45+
gl.clearColor(0.0, 0.0, 0.0, 1.0);
46+
47+
gl.clear(gl.COLOR_BUFFER_BIT);
48+
49+
// 绘制三个点
50+
gl.drawArrays(gl.POINTS, 0, n); // n is 3
51+
}
52+
53+
function initVertexBuffers(gl) {
54+
var vertices = new Float32Array([
55+
0.0, 0.5, -0.5, -0.5, 0.5, -0.5
56+
]);
57+
var n = 3; //点的个数
58+
59+
var sizes = new Float32Array([
60+
10.0, 20.0, 30.0 // 点的尺寸
61+
]);
62+
// 创建缓冲区对象
63+
var vertexBuffer = gl.createBuffer();
64+
if (!vertexBuffer) {
65+
console.log('Failed to create the vertexBuffer object ');
66+
return -1;
67+
}
68+
69+
var sizeBuffer = gl.createBuffer();
70+
if (!sizeBuffer) {
71+
console.log('Failed to create the sizeBuffer object ');
72+
return -1;
73+
}
74+
75+
// 将缓冲区对象绑定到目标
76+
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
77+
78+
//向缓冲区对象写入数据
79+
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
80+
81+
var a_Position = gl.getAttribLocation(gl.program, 'a_Position');
82+
83+
if (a_Position < 0) {
84+
console.log('Failed to get the storage location of a_Position');
85+
return a_Position;
86+
}
87+
88+
// 将缓冲区对象分配给a_Position变量
89+
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
90+
91+
// 连接a_Poisition变量与分配给它的缓冲区对象
92+
gl.enableVertexAttribArray(a_Position);
93+
94+
// 将顶点尺寸写入缓冲区对象并开启
95+
gl.bindBuffer(gl.ARRAY_BUFFER, sizeBuffer);
96+
gl.bufferData(gl.ARRAY_BUFFER, sizes, gl.STATIC_DRAW);
97+
98+
var a_PointSize = gl.getAttribLocation(gl.program, 'a_PointSize');
99+
100+
if (a_PointSize < 0) {
101+
console.log('Failed to get the storage location of a_PointSize');
102+
return a_PointSize;
103+
}
104+
gl.vertexAttribPointer(a_PointSize, 1, gl.FLOAT, false, 0, 0);
105+
gl.enableVertexAttribArray(a_PointSize);
106+
107+
return n
108+
}

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,6 @@ WebGL实例程序
3737
#RotatingTriangle
3838
三角形旋转动画
3939
#RotatingTranslatedTriangle
40-
三角形复合动画
40+
三角形复合动画
41+
#MultiAttributeSize
42+
绘制三个不同尺寸的点

0 commit comments

Comments
 (0)