glDrawArrays与glDrawElements的功能与区别
来源:互联网 发布:集思宝a5软件 编辑:程序博客网 时间:2024/06/04 18:38
顶点数组概念:http://blog.csdn.net/wang15061955806/article/details/49158589
glDrawArrays 和 glDrawElements 的作用都是从一个数据数组中提取数据渲染基本图元。( render primitives from array data )
他们只是用不同的方式来将客户端中的数据传送到服务器的地址空间中,OpenGL支持3种方式来完成这个操作:
(1)访问单独的数据元素(随机存储) (2)创建一个单独数组元素的列表(系统存取)(3)线性的处理数组元素。具体选用的数据访问方式取决于需要处理的问题类型。
glArrayElements()、glDrawElements()和glDrawRangeElements()能够对数据数组进行随机存取,但是glDrawArrays()只能按顺序访问它们。因为前者支持顶点索引的机制。简单的说来,顶点索引就是把输入的顶点坐标值从0开始编号,并在一个单独的无符号类型数组中保存多个索引值组成的图元信息,从而进一步避免了重复指定顶点数据造成的冗余。
/* Enable vertex arrays. */
glEnableClientState( GL_VERTEX_ARRAY );
/* Enable texture arrays. */
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
GL_LINES
GL_LINE_LOOP
GL_LINE_STRIP
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
const GLfloat squareVertices[] = {
-1.0, 1.0, -6.0, // Top left
-1.0, -1.0, -6.0, // Bottom left
1.0, -1.0, -6.0, // Bottom right
1.0, 1.0, -6.0 // Top right
};
GL_LINE_STRIP - 连贯地将直线画出来。行为和 GL_TRIANGLE_STRIP 类似。
squareVerticies[0] x坐标
squareVerticies[1] y坐标
squareVerticies[2] z坐标
1) 在 GL_TRIANGLE_STRIP 状态下是: P2、P1、P0 ; P3、P2、P1 这2个三角形。
2) 在 GL_TRIANGLE_FAN 状态下是: P2、P1、P0 ; P3、P2、P0 这2个三角形。
glDrawArrays specifies multiple geometric primitives with very few subroutine calls. You can prespecify separate arrays of vertices, normals, colors, and texture coordinates and use them to construct a sequence of primitives with a single call to glDrawArrays.
示例代码:
glEnableClientState(GL_VERTEX_ARRAY);
const GLfixed vers[] = {
F2X(0.25), F2X(0.25), F2X(0.0),
F2X(0.75), F2X(0.25), F2X(0.0),
F2X(0.25), F2X(0.75), F2X(0.0),
F2X(0.75), F2X(0.75), F2X(0.0),
};
glVertexPointer(3, GL_FIXED, 0, vers);
glDrawArrays(GL_LINE_STRIP, 0, 4);
eglSwapBuffers(iGlDisp, iGlSurface);
结果:
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices
);
mode 指定绘制图元的类型,但是如果GL_VERTEX_ARRAY 没有被激活的话,不能生成任何图元。它应该是下列值之一:
GL_POINTS, GL_LINE_STRIP,
GL_LINE_LOOP, GL_LINES,
GL_TRIANGLE_STRIP,
GL_TRIANGLE_FAN,
GL_TRIANGLES,
GL_QUAD_STRIP,
GL_QUADS,
GL_POLYGON
count 为绘制图元的数量。
GL_UNSIGNED_BYTE,
GL_UNSIGNED_SHORT,
GL_UNSIGNED_INT
indices:指向索引数组的指针。
glDrawElements函数能够通过较少的函数调用绘制多个几何图元,而不是通过OPENGL函数调用来传递每一个顶点,法线,颜色信息。
例如,在 GL_COLOR_ARRAY 被激活后,当glDrawElements执行完成时,当前的颜色值是没有指定的。没有被修改的属性值保持不变。
示例代码如下:
// The vertex array is enabled for writing and used during rendering.
glEnableClientState(GL_VERTEX_ARRAY);
// 顶点坐标数组
const GLfixed vers[] = {
F2X(0.25), F2X(0.25), F2X(0.0), // 第1个顶点坐标
F2X(0.75), F2X(0.25), F2X(0.0), // 第2个顶点坐标
F2X(0.25), F2X(0.75), F2X(0.0), // 第3个顶点坐标
F2X(0.75), F2X(0.75), F2X(0.0) // 第4个顶点坐标
};
glVertexPointer(
3, // 表示每一个顶点由3维坐标构成
GL_FIXED, // 顶点坐标数组中的元素是 GL_FIXED 类型
0, // 从顶点坐标数组的第0个元素开始读取数据
vers // 指向顶点坐标数组的指针
);
// 等效替换 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4) ++
/* 索引数组. 此索引数组表示依次是
第0个顶点{F2X(0.25), F2X(0.25), F2X(0.0)},
第1个顶点{F2X(0.75), F2X(0.25), F2X(0.0)},
第2个顶点{F2X(0.25), F2X(0.75), F2X(0.0)},
第3个顶点{F2X(0.75), F2X(0.75), F2X(0.0)} */
const GLubyte indices[] = {0, 1, 2, 3};
glDrawElements(
GL_TRIANGLE_STRIP, // 绘图模式
4, // 依次从索引数组中读取4个顶点来进行绘制
GL_UNSIGNED_BYTE, // 索引数组中存放的元素的类型
indices // 指向索引数组的指针
);
// 等效替换 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4) --
eglSwapBuffers(iGlDisp, iGlSurface);
- glDrawArrays与glDrawElements的功能与区别
- glDrawArrays与glDrawElements
- 绘制方法---glDrawArrays与glDrawElements
- glDrawArrays 和 glDrawElements 区别?
- glDrawArrays、glDrawElements区别
- glDrawArrays 和 glDrawElements 区别?
- glDrawArrays, glDrawElements
- [转载] glDrawArrays, glDrawElements
- glDrawArrays,glDrawElements用法
- glDrawElements和glDrawArrays
- OpenGL: glDrawArrays & glDrawElements
- 顶点数组, glDrawArrays,glDrawElements - [OpenGL]
- OPENGL顶点数组, glDrawArrays,glDrawElements
- OPENGL顶点数组, glDrawArrays,glDrawElements
- glDrawArrays 和 glDrawElements (可以解决帧率过小的问题)
- glDrawArrays 和 glDrawElements (可以解决帧率过小的问题)
- OPENGL顶点数组, glDrawArrays,glDrawElements (转)
- RS232与RS485的功能与区别!
- Linux源码中链表的声明和初始化
- 解决ScrollView嵌套ListView和GridView冲突的方法
- Python保存时提示“SyntaxError: Non-ASCII character '\xe8' in file”
- linux常用命令总结
- 21分钟 MySQL 入门教程
- glDrawArrays与glDrawElements的功能与区别
- 科研是条不归路
- Sql Server 2005/2008中把一个数据库中的表完整复制到另一个数据库
- IOS 创建动画提示框
- 【期望dp】LightOJ 1030 Discovering Gold
- 简单的学生信息处理程序实现
- View的setTag() 和 getTag()
- Android学习笔记:Android消息处理机制之Handler介绍
- 将文件夹下的文件导出至txt文件