- gl.drawArrays( gl.POINTS, start , count )
- gl.POINTS,标示绘制点的
- start 起始位置
- count 绘制数量,绘制点的个数不能超过在 buffer 中存在点的个数
- 采用 javascript 循环,实现多点绘制
- 采用 WebGL 缓冲区对象,实现多点绘制
上一节代码示例中分别采用了循环绘制点和使用缓冲区对象绘制点,详细请查看上一节内容。
- gl.drawArray( gl.LINES , start , count )
- gl.LINES,可以绘制一条线,也可以绘制多条线
- 绘制一条线
- 绘制多条线
最重要的画线代码如下:
cxt.drawArrays(cxt.LINES, 0, 4)
- gl.drawArray( gl.LINE_STRIP , start , count )
- gl.LINE_STRIP 绘制线段带
- 例如绘制一个矩形框需要定义五个点才能绘制出来,线段带是没有绘路的概念
绘制一个矩形重要的相关代码如下:
//类型化数组定义五个点
var data = new Float32Array([
-0.5,
0.5,
0.5,
0.5,
0.5,
-0.5,
-0.5,
-0.5,
-0.5,
0.5
])
// 最终绘制也是绘制5个点
cxt.drawArrays(cxt.LINE_STRIP, 0, 5)
- gl.drawArray( gl.LINE_LOOP , start , count )
- gl.LINE_LOOP 自动闭合线段,例如绘制矩形只需要 4 个点即可,默认会将最后一个点和第一个开始的点连接起来
绘制一个矩形重要的相关代码如下:
//类型化数组定义4个点
var data = new Float32Array([
-0.5,
0.5,
0.5,
0.5,
0.5,
-0.5,
-0.5,
-0.5,
-0.5,
0.5
])
// 最终绘制也是绘制5个点
cxt.drawArrays(cxt.LINE_LOOP, 0, 4)
使用 gl.LINE_LOOP 绘制一个领结形状的图形,其实只是利用了 LINE_LOOP 自动闭合线段绘制出来的,核心片段代码如下:
//类型化数组定义4个点
var data = new Float32Array([-0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5])
// 最终绘制也是绘制5个点
cxt.drawArrays(cxt.LINE_LOOP, 0, 4)
运行效果图如下:
- gl.drawArray( gl.TRIANGLES , start , count )
- gl. TRIANGLES
核心代码片段如下:
var data = new Float32Array([0, 0, -0.5, -0.5, 0.5, -0.5])
cxt.drawArrays(cxt.TRIANGLES, 0, 3)
运行效果图如下:
- gl.drawArray( gl.TRIANGLE_STRIP , start , count )
- gl.TRIANGLE_STRIP
绘制一个平行四边形的核心代码如下:
var data = new Float32Array([-0.3, 0.3, 0.5, 0.3, -0.5, -0.3, 0.3, -0.3])
cxt.drawArrays(cxt.TRIANGLE_STRIP, 0, 4)
运行效果图如下:
- gl.drawArray( gl.TRIANGLE_FAN , start , count )
- gl.TRIANGLE_FAN
绘制一个六边形的核心代码如下:
var data = new Float32Array([
0.0,
0,
-0.3,
0.5,
-0.6,
0.3,
-0.3,
-0.3,
0.3,
-0.3,
0.6,
0.3,
0.4,
0.5,
-0.3,
0.5
])
cxt.drawArrays(cxt.TRIANGLE_FAN, 0, 8)
运行效果图如下:
源码链接请访问 https://github.com/wqzwh/webgl-code/tree/master/04