如果每个顶点都要用glVertex这样去输入,那对于动辄几千个多边形的模型来说,恐怕每一帧几千次函数调用会让某些系统“疯”掉。
一个比较容易想到方法是把顶点放在一起然后用一个命令将顶点数组的首地址配置给OpenGL。当然OpenGL也提供了这样的方法,而且不仅仅是针对顶点,所有需要频繁配置的数据OpenGL都为其设计了数组式配置的接口。
使用数组配置方式有两个步骤,
1. 使用glEnableClientState,并带上标志位,表示启用某种数据的数组配置方式,否则就只能使用单点方式
2. glVertexPointer等函数来配置特定类型的数组给OpenGL。
配置完成之后就是如何引用了。有两种方式,一种是单个索引方式,另一种是索引数组方式。
单个索引方式使用glArrayElement,指定索引后,会自动把相应索引的顶点,颜色等数据都配置给OpenGL,当前前提时使用了glEnableClientState开启了相应数据类型的数组配置模式。glArrayElement还是要与glBegin/glEnd联合使用。
更快捷的引用方式是使用索引数组。即把一个多边形的顶点的索引放在一个数组里,然后通过glDrawElements配置下去,这种方式不需要联合glBegin/glEnd使用。
更近一步,把多个glDrawElements调用所需的索引数组再放到一个数组里,使用glMultiDrawElements配置下去。
有了这些简单的配置方式之后,很难想像为什么还要用原始的方式了。
今天研究投影花了好多时间,后了发现自己走了弯路,再次感叹方法和交流是多么重要。关于投影的内容打算明天再好好理解一下,在明天的笔记中整理吧。
同样是研究投影时,突然发现原来买来一直没看的几本书(《几何原本》、《数学手册》,还有若干关于OpenGL的书)在我最需要的时候发挥作用了。所谓“书到用时方恨少”,平时有预见性的多储备一些好书是很必要的。而且书是很直接的知识获取方式,随时随地都可以看,相比互联网搜索、电子书,有其不可取代的作用。
一个比较容易想到方法是把顶点放在一起然后用一个命令将顶点数组的首地址配置给OpenGL。当然OpenGL也提供了这样的方法,而且不仅仅是针对顶点,所有需要频繁配置的数据OpenGL都为其设计了数组式配置的接口。
使用数组配置方式有两个步骤,
1. 使用glEnableClientState,并带上标志位,表示启用某种数据的数组配置方式,否则就只能使用单点方式
2. glVertexPointer等函数来配置特定类型的数组给OpenGL。
配置完成之后就是如何引用了。有两种方式,一种是单个索引方式,另一种是索引数组方式。
单个索引方式使用glArrayElement,指定索引后,会自动把相应索引的顶点,颜色等数据都配置给OpenGL,当前前提时使用了glEnableClientState开启了相应数据类型的数组配置模式。glArrayElement还是要与glBegin/glEnd联合使用。
更快捷的引用方式是使用索引数组。即把一个多边形的顶点的索引放在一个数组里,然后通过glDrawElements配置下去,这种方式不需要联合glBegin/glEnd使用。
更近一步,把多个glDrawElements调用所需的索引数组再放到一个数组里,使用glMultiDrawElements配置下去。
有了这些简单的配置方式之后,很难想像为什么还要用原始的方式了。
今天研究投影花了好多时间,后了发现自己走了弯路,再次感叹方法和交流是多么重要。关于投影的内容打算明天再好好理解一下,在明天的笔记中整理吧。
同样是研究投影时,突然发现原来买来一直没看的几本书(《几何原本》、《数学手册》,还有若干关于OpenGL的书)在我最需要的时候发挥作用了。所谓“书到用时方恨少”,平时有预见性的多储备一些好书是很必要的。而且书是很直接的知识获取方式,随时随地都可以看,相比互联网搜索、电子书,有其不可取代的作用。