OpenGL-顶点数组 缓冲区

本文探讨了如何通过顶点数组、显示列表和顶点缓冲区对象减少OpenGL绘制立方体的函数调用,提升效率。重点讲解了数据分离、顶点缓冲区对象的使用以及它们与显示列表的差异。
一个立方体有六个面,每个面是一个正方形,好,绘制六个正方形就可以了。
glBegin(GL_QUADS);
	glVertex3f(...);
	glVertex3f(...);
	glVertex3f(...);
	glVertex3f(...);
glEnd();
为了绘制六个正方形,我们为每个正方形指定四个顶点,最终我们需要指定 6*4=24 
个顶点。但是我们知道,一个立方体其实总共只有八个顶点,要指定 24 次,就意味
着每个顶点其实重复使用了三次。

如果我们定义一个数组,把八个顶点都放到数组里,然后每次指定顶点都使用指针,
而不是使用直接的数据,这样就避免了在指定顶点时考虑大量的数据,于是减少了代
码出错的可能性。
// 将立方体的八个顶点保存到一个数组里面
static const GLfloat vertex_list[][3] = {
   
   
	-0.5f, -0.5f, -0.5f,
	0.5f, -0.5f, -0.5f,
	// ...
};
// 指定顶点时,用指针,而不用直接用具体的数据
glBegin(GL_QUADS);
glVertex3fv(vertex_list[0]);
glVertex3fv(vertex_list[2]);
glVertex3fv(vertex_list[3]);
glVertex3fv(vertex_list[1]);
// ...
glEnd();

/*
	修改之后,虽然代码变长了,但是确实易读得多。很容易就看出第 0, 2, 3, 1 这四个顶点构成一个正方形。
	稍稍观察就可以发现,我们使用了大量的 glVertex3fv 函数,其实每一句	
	都只有其中的顶点序号不一样,因此我们可以再定义
	一个序号数组,把所有的序号也放进去。这样一来代码就更加简单了。
*/

// 将立方体的八个顶点保存到一个数组里面
static const GLfloat vertex_list[][3] = {
   
   
	-0.5f, -0.5f, -0.5f,
	0.5f, -0.5f, -0.5f,
	-0.5f, 0.5f, -0.5f,
	0.5f, 0.5f, -0.5f,
	-0.5f, -0.5f, 0.5f,
	0.5f, -0.5f, 0.5f,
	-0.5f, 0.5f, 0.5f,
	0.5f, 0.5f, 0.5f,
};
// 将要使用的顶点的序号保存到一个数组里面
static const GLint index_list[][4] = {
   
   
	0, 2, 3, 1,
	0, 4, 6, 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值