顶点数组
来源:互联网 发布:百度推广调价软件 编辑:程序博客网 时间:2024/05/02 04:48
OpenGL提供了一个称之为顶点数组的工具,它扩展了数组的使用方式,可以显著地较少绘制立方体的函数调用次数。其主要思想是存储在数组中的信息可以被存储在客户端中,并通过单次函数调用来访问。
OpenGL为六种类型的数组提供了支持:顶点、颜色、颜色索引、法线、纹理坐标以及边标记。
顶点及颜色是我们接下去要使用的数组,我们通过对它们的使用来理解顶点数组。
使用顶点数组需要三个步骤:
1. 同OpenGL的其它功能一样,必须将其启用。
2. 必须指定数组的格式。
3. 用该数组绘制场景。
以顶点数组为例:
1. 定义一个二维顶点数组
static GLfloat Vertices[][3]= {
{-1.0,-1.0, 1.0},
{-1.0, 1.0, 1.0},
{1.0, 1.0, 1.0},
{1.0, -1.0, 1.0},
{-1.0,-1.0, -1.0},
{-1.0, 1.0, -1.0},
{1.0, 1.0, -1.0},
{1.0, -1.0, -1.0}
};
2. 根据使用顶点数组三个步骤中的第一步,调用函数
glEnableClientState(GL_VERTEX_ARRAY);
这样就启动了Vertex的顶点数组功能了。
3. 根据使用顶点数组三个步骤中的第二步,调用函数
glVertexPointer(3,GL_FLOAT,0,Vertices);
函数中,第一个参数提供了数组中列数,第二、三个参数提供了数组中每一个元素的数据类型,第四个参数就是该数组的首地址。仔细观察可以发现,上述的数组形式实质 上是对整个数组的一个描绘,从数组元素的数据类型、列数、首地址,可以说提供了对该数组的完整信息。这个函数的第一、二、三个参数就是对一个顶点的数据类型的描 述。
4. 定义对顶点的访问顺序索引
GLubyte CubeIndices[]= {
{0,3, 2, 1},
{2,3, 7, 6},
{0,4, 7, 3},
{1,2, 6, 5},
{4,5, 6, 7},
{0,1, 5, 4}
};
5. 根据使用顶点数组三个步骤中的第三步:绘制
void glDrawElements(GL_QUADS,24,GL_UNSIGNED_BYTE,CubeIndices);
该函数的第一个参数就是glBegin*中的那个绘制模式参数,第二个参数就是顶点数的绘制次数,第三、四个参数就是顶点索引数组的描述。
当然,该函数也可以进行如下形式的调用
for(int i=0;i<6;i++)
glDrawElements(GL_POLYGON,4,GL_UNSIGNED_BYTE,CubeIndices);
我们来查看一下究竟上面的调用执行了上面,这有利于我们更好地理解顶点数组。
以glDrawElements(GL_POLYGON,4,GL_UNSIGNED_BYTE,CubeIndices)为例。
...
statici=0;
if(EnableColorArray())glColor3fv(Colors[i]);
//法线、纹理映射etc
……
glBegin(GL_POLYGON);
glVertex3fv(Vertices[i]);
……
glEnd();
i++;
小结:
顶点数组、颜色数组、法线数组……的关键步骤在于精确地定义,即写出二维数组、正确地描述出顶点数组及颜色数组……,同时写对了顶点的访问顺序,最后就是正确地调用
glDrawElements*函数。- 顶点数组
- 顶点数组
- 顶点数组
- 顶点数组
- openGL学习--顶点数组
- OpenGL顶点数组
- 2.6 顶点数组
- 2.8 顶点数组对象
- OpenGL顶点数组
- OpenGL顶点数组
- OpenGL顶点数组
- 顶点数组对象
- opengl顶点数组
- opengles顶点属性顶点数组缓存对象
- OpenGL--顶点数组与缓冲区中使用顶点数组
- 4.OpenGL--顶点数组与缓冲区中使用顶点数组
- 顶点数组, glDrawArrays,glDrawElements - [OpenGL]
- 用顶点数组绘制立方体
- 《c语言深度剖析》笔记4
- Oracle调用java程序例子
- C#中从一个Form中启动另一个Form
- 公司地址:
- TableAdapter 的使用
- 顶点数组
- 为C程序员准备的0x10个最佳问题
- myeclipse 注册码
- HDU3938 并查集 并查集
- poj 3683【2-SAT】
- Openfire 好友状态的发送(用户登录)
- PAGE_ALIGN()
- 二 ARM工作模式
- 温故而知新——再读CMU巨著CSAPP