红宝书阅读笔记——顶点数组

顶点数组允许通过少量函数调用访问顶点相关的数据,能够提高程序的性能。以前程序动辄几千个面片,一次又一次的调用glVertex()实在麻烦,再次后悔看书不认真中。。。

使用顶点数组对集合图形进行渲染需要3个步骤:

1. 启用数组

调用glEnableClientState(GLenum array)函数,指定需要启用的数组,最多可达8个数组。同样的,调用glDisableClientState(GLenum array)函数可以禁用数组。

2. 指定数组的数据

使用glVertexPointer(…)函数,将顶点的坐标数量(2、3、4),坐标数据类型,连续顶点之间的偏移量和指向坐标内存地址的指针做参数传递进去,就可以指定一个类型的数组。同样的函数还有glColorPointer()、glNormalPointer()等。

有时我们构造了一个顶点类,里面同时记录了顶点的坐标、颜色、法向等信息。这种时候使用混合数组更方便。使用glInterleavedArrays()同时指定几个顶点数组,输入参数是禁用启用的数组枚举、连续顶点之间的偏移量和内存地址的指针。

3. 解引用和渲染

  • 解引用单个数组元素 glArrayElement(GLint ith)

这个函数是在glBegin()和glEnd()之间被调用的,用于解引用内存区中的单个顶点信息。

  • 解引用数组元素的一个列表 glDrawElements()

将绘制的图元类型,数量,顶点下标类型和顶点索引组成的数组指针作为参数,不能放在glBegin()和glEnd()之间。

除此之外还有glMultiDrawElements(),作用是把几个glDrawElements()调用合并到一个函数调用中。方法差不多,只是把原来的数组指针换成了指针数组,这样就可以关联多组顶点了。

glDrawRangeElements()与glDrawElements()类似,但是具有更强的限制,它多了两个参数start和end,指定了顶点索引的范围,顶点索引数组中的索引不能超越这个范围。

  • 解引用数组元素序列 glDrawArrays()

指定了开始的索引和数量,然后它会从first开始,使用一直到first+count-1结束的数组元素。同样的,这个函数也有对应的glMultiDrawArrays()

本文原创,转载请注明出处:

http://blog.163.com/sara_athena/

http://www.cnblogs.com/luluathena/

你可能感兴趣的:(数组)