顶点数组允许通过少量函数调用访问顶点相关的数据,能够提高程序的性能。以前程序动辄几千个面片,一次又一次的调用glVertex()实在麻烦,再次后悔看书不认真中。。。
使用顶点数组对集合图形进行渲染需要3个步骤:
1. 启用数组
调用glEnableClientState(GLenum array)函数,指定需要启用的数组,最多可达8个数组。同样的,调用glDisableClientState(GLenum array)函数可以禁用数组。
2. 指定数组的数据
使用glVertexPointer(…)函数,将顶点的坐标数量(2、3、4),坐标数据类型,连续顶点之间的偏移量和指向坐标内存地址的指针做参数传递进去,就可以指定一个类型的数组。同样的函数还有glColorPointer()、glNormalPointer()等。
有时我们构造了一个顶点类,里面同时记录了顶点的坐标、颜色、法向等信息。这种时候使用混合数组更方便。使用glInterleavedArrays()同时指定几个顶点数组,输入参数是禁用启用的数组枚举、连续顶点之间的偏移量和内存地址的指针。
3. 解引用和渲染
这个函数是在glBegin()和glEnd()之间被调用的,用于解引用内存区中的单个顶点信息。
将绘制的图元类型,数量,顶点下标类型和顶点索引组成的数组指针作为参数,不能放在glBegin()和glEnd()之间。
除此之外还有glMultiDrawElements(),作用是把几个glDrawElements()调用合并到一个函数调用中。方法差不多,只是把原来的数组指针换成了指针数组,这样就可以关联多组顶点了。
glDrawRangeElements()与glDrawElements()类似,但是具有更强的限制,它多了两个参数start和end,指定了顶点索引的范围,顶点索引数组中的索引不能超越这个范围。
指定了开始的索引和数量,然后它会从first开始,使用一直到first+count-1结束的数组元素。同样的,这个函数也有对应的glMultiDrawArrays()。
本文原创,转载请注明出处: