0%

绘制方式

立即模式(Immediate Mode)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
glBegin(GL_QUADS);
{
glColor4f(1.0, 1.0, 0.0, 1.0);
glVertex3f(-5, -5, 0.0);
glVertex3f(-5, 0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, -5, 0.0);
glColor4f(1.0, 0.0, 1.0, 1.0);
glVertex3f(5, 5, 0.0);
glVertex3f(5, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 5, 0.0);
}
glEnd();

显示列表(DisplayList)


初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GLuint displayListId;
displayListId = glGenLists(1);
glNewList(displayListId, GL_COMPILE);
{
glBegin(GL_QUADS);
{
glColor4f(1.0, 1.0, 0.0, 1.0);
glVertex3f(-5, -5, 0.0);
glVertex3f(-5, 0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, -5, 0.0);
glColor4f(1.0, 0.0, 1.0, 1.0);
glVertex3f(5, 5, 0.0);
glVertex3f(5, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 5, 0.0);
}
glEnd();
}
glEndList();

渲染

1
glCallList(displayListId);


顶点数组(Vertex Array)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 启用vertex arrays
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
//定义顶点数组
glVertexPointer(
3, // 每个顶点的维度
GL_FLOAT, // 顶点数据类型
0, // 连续顶点之间的间隙,这里为0
&vertices[0] //指向第一个顶点的第一个坐标的指针
);
glColorPointer(
3, // 每个顶点颜色的维度
GL_FLOAT, // 顶点颜色数据类型
0, // 连续顶点颜色之间的间隙,这里为0
colors //指向第一个顶点颜色的第一个坐标的指针
);
//glDrawArrays(GL_QUADS,0,4);
glDrawElements(GL_TRIANGLES, 3,GL_UNSIGNED_INT, indices);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);

VBO