drawArrays使用说明及画一个正方形

drawArrays使用说明及画一个正方形

语法

void gl.drawArrays(mode, first, count);

■ 参数

mode

GLenum 类型,指定绘制图元的方式,可能值如下。

可能值 描述
gl.POINTS 绘制一系列点
gl.LINE_STRIP 绘制一个线条。即,绘制一系列线段,上一点连接下一点
gl.LINE_LOOP 绘制一个线圈。即,绘制一系列线段,上一点连接下一点,并且最后一点与第一个点相连
gl.LINES 绘制一系列单独线段。每两个点作为端点,线段之间不连接
gl.TRIANGLE_STRIP 绘制一个三角带
gl.TRIANGLE_FAN 绘制一个三角扇
gl.TRIANGLES 绘制一系列三角形。每三个点作为顶点

first

GLint 类型 ,指定从哪个点开始绘制

count

GLsizei 类型,指定绘制需要使用到多少个点

■ 返回值

■ 异常

  • 如果 mode 不是一个可接受值,将会抛出 gl.INVALID_ENUM 异常
  • 如果 first 或者 count 是负值,会抛出 gl.INVALID_VALUE 异常
  • 如果 gl.CURRENT_PROGRAM 为 null,会抛出 gl.INVALID_OPERATION 异常

关于三角带和三角扇的说明

■ 三角扇

GL_TRIANGLES是以每三个顶点绘制一个三角形。第一个三角形使用顶点v0,v1,v2,第二个使用v3,v4,v5,以此类推。如果顶点的个数n不是3的倍数,那么最后的1个或者2个顶点会被忽略。

■ 三角带

构建当前三角形的顶点的连接顺序依赖于要和前面已经出现过的2个顶点组成三角形的当前顶点的序号的奇偶性(如果从0开始)

如果当前顶点是奇数

组成三角形的顶点排列顺序:T = [n+1 n+2 n].

如果当前顶点是偶数:

组成三角形的顶点排列顺序:T = [n+2 n+1 n].

画一个正方形

这里我们使用gl.TRIANGLE_STRIP来画一个正方形

正方形为偶数个顶点,所以此时套用上面的公式,顶点顺序应该为

A C B
D B C

即不相交的两个点作为首个点即末尾点即可(BC位置可交换)

■ 坐标示例

1
2
3
4
5
6
const arrVtx = new Float32Array([
1, -1, 1, // A
1, 1, 1, // C
-1, -1, 1, // B
-1, 1, 1 // D
].map(x => x / 2));
#

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×