OpenGL学习06_顶点数组VertexArray
来源:互联网 发布:淘宝藏族舞蹈头饰 编辑:程序博客网 时间:2024/06/09 00:08
什么是顶点数组?
OpenGL提供了一些顶点数组函数,允许只用少数几个数组指定大量的与顶点相关的数据,并用少量函数调用(与顶点数组的数量相仿)访问这些数据。使用顶点数组函数,一个拥有20条边的多边形的20个顶点可以放在1个数组中,并且只通过1个函数进行调用。如果每个顶点还有一条法线向量,所有20条法线向量可以放在另一个数组中,也可以只通过1个函数进行调用。把数据放在顶点数组中可以提高应用程序的性能。使用顶点数组可以减少函数调用的次数,从而提高性能。另外,使用顶点数组还可以避免共享顶点的冗余处理。
使用顶点数组对几何图形进行渲染需要3个步骤:
1) 激活(启用)最多可达8个数组,每个数组用于存储不同类型的数据:顶点坐标、表面法线、RGBA颜色、辅助颜色、颜色索引、雾坐标、纹理坐标以及多边形的边界标志。
指定了需要启用的数组。array参数可以使用下面这些符号常量:GL_VERTEX_ARRAY、GL_COLOR_ARRAY、GL_SECONDARY_COLOR_ARRAY、GL_INDEX_ARRAY、GL_NORMAL_ARRAY、GL_FOG_COORDINATE_ARRAY、GL_TEXTURE_COORD_ ARRAY和GL_EDGE_FLAG_ARRAY。
开启和关闭顶点数组的用法如下:
2) 把数据放入数组中。这些数组是通过它们的内存位置的地址(即指针)进行访问的。在客户端-服务器模型中,这些数组存储在客户机的地址空间中,除非选择使用缓冲区对象,这时候,数组存储在服务器内存中。
可以通过一种简单的方法,用一条命令指定客户空间中的一个数组。共有8个不同的函数可以用来指定数组,每个函数用于指定一个不同类型的数组。另外,还有一个函数可以一次指定客户空间中的几个数组,它们均来源于一个混合数组。
指定了需要访问的空间坐标数据。pointer是数组包含的第一个顶点的第一个坐标的内存地址。type指定了数组中每个坐标的数据类型(GL_SHORT、GL_INT、GL_FLOAT或GL_DOUBLE)。size是每个顶点的坐标数量,它必须是2、3或4。stride是连续顶点之间的字节偏移量。如果stride是0,数组中的顶点便是紧密相邻的。
为了访问其他几个数组,可以使用下面这些类似的函数:
3) 用这些数据绘制几何图形。OpenGL通过指针从所有的被激活数组中获取数据。在客户端-服务器模型中,数据被传输到服务器的地址空间中。有3种方式可以完成这个任务:
• 访问单独的数组元素(随机存取)。
• 创建一个单独数组元素的列表(系统存取)。
• 线性地处理数组元素。
在顶点数组的内容被解引用(即提取指针所指向的数据)之前,数组一直保存在客户端,它们的内容很容易进行修改。在步骤3中,数组中的数据被提取,接着发送到服务器,然后发送到图形处理管线进行渲染。可以从单个数组元素(索引位置)提取数据,也可以从一个有序的数组元素列表(可能被限制为整个顶点数组数据的一个子集)中提取数据,或者从一个数组元素序列中提取数据。
解引用单个数组元素
glArrayElement()通常是在glBegin()和glEnd()之间调用。否则,glArrayElement()函数就会设置所有启用的数组的当前状态(顶点除外,因为它不存在当前状态)
解引用数组元素的一个列表
mode(图元的类型)、count(元素的数量)、type(数据类型)和indices(顶点数据的数组位置)。glDrawRangeElements()引入了两个新参数:start和end,它们指定了indices可以接受的值的范围。indices数组中的值必须位于start和end之间才是合法的(包含start和end)。
调用glDrawArrays()函数的效果差不多相当于下面这段代码:和glDrawElements()相似,glDrawArrays()也会对它的参数值执行错误检查,如果对应的数组被启用,它会导致当前的RGB颜色、辅助颜色、颜色索引、法线坐标、雾坐标、纹理坐标和边界标志处于不确定状态。
解引用一个数组元素序列
glArrayElements()、glDrawElements()和glDrawRangeElements()能够对数据数组进行随机存取,但是glDrawArrays()只能按顺序访问它们。
创建一个几何图元序列,使用每个被启用的数组中从first开始,到first + count-1结束的数组元素。mode指定了创建的图元类型,它的值和glBegin()函数所接受的参数值相同。例如:GL_POLYGON、GL_LINE_LOOP、GL_LINES和GL_POINTS等。
调用glDrawArrays()函数的效果差不多相当于下面这段代码:
和glDrawElements()相似,glDrawArrays()也会对它的参数值执行错误检查,如果对应的数组被启用,它会导致当前的RGB颜色、辅助颜色、颜色索引、法线坐标、雾坐标、纹理坐标和边界标志处于不确定状态。
一个小例子
本文由CC原创总结,如需转载请注明出处:http://blog.csdn.net/oktears/article/details/42269263
- OpenGL学习06_顶点数组VertexArray
- OpenGL学习06_顶点数组VertexArray
- openGL学习--顶点数组
- OpenGL学习笔记:顶点数组
- OpenGL学习七:顶点数组
- opengl 顶点数组 学习笔记
- 【OpenGL学习】顶点数组的应用
- OpenGL 学习笔记-顶点数组(颜色)
- OpenGL 学习笔记(4)顶点数组
- 【OpenGL 学习笔记04】顶点数组
- OpenGL顶点数组
- OpenGL顶点数组
- OpenGL顶点数组
- OpenGL顶点数组
- opengl顶点数组
- 顶点数组, glDrawArrays,glDrawElements - [OpenGL]
- OPENGL顶点数组, glDrawArrays,glDrawElements
- OPENGL顶点数组, glDrawArrays,glDrawElements
- 【opencv】支付宝AR实景红包领取方法
- MVC首创(一)
- wmic 设置环境变量 不需要重启
- 先来个简单的动画
- C++枚举类型
- OpenGL学习06_顶点数组VertexArray
- OpenGL学习07_绘制立方体
- iptables详解
- Scala——函数Currying
- APK 安装过程
- vector与list的区别
- BIRT入门教程1
- OpenGL学习08_几何变换
- 记录一个在latex中使文章段落中每行两端对齐的方法