OpenGL ES基本概念介绍
最近不太忙,打算这周开始学习下OpenGL,网上也已经有好多关于OpenGL的书籍和资料了。至于为什么还要写,是为了养成一个良好的学习习惯,也算给自己的学习过程做一个总结。
基本概念
OpenGL定义了一个跨编程语言的,跨平台的编程接口的规格,是一个性能卓越的三维图形标准。OpenGL是一个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。OpenGL ES是专为嵌入式和移动设备设计的一个2D/3D轻量级图形库。是OpenGL的一个子集。
3D图像的最小单位成为点(point)或者顶点(vertex)。它们代表三维空间中的一个点并用来建造更复杂的物体。多边形是由一个个点构成,而物体是由多个多边形组成。尽管通常OpenGL支持多边形,但是OpenGL ES 只支持三边形,所以即使我们要绘制一个正方形也要把它拆分成两个三角形绘制。
先说下坐标系的问题。
默认情况下,以屏幕中心为坐标轴原点。原点左方X为负值,右边为正值,原点上方Y为正值,原点下方为负值,垂直屏幕向外为Z为正值,向里为负值。
坐标如图所示:
了解了坐标轴,我们来看看怎么在坐标系中表示一个点,通常用一组浮点数来表示点。例如一个正方形的4个顶点可表示为:
float vertices[] = { -1.0f, 1.0f, 0.0f, //左上 -1.0f, -1.0f, 0.0f, //左下 1.0f, -1.0f, 0.0f, //右下 1.0f, 1.0f, 0.0f, //右上 };
为了提高性能,通常还需要将浮点数组存入一个字节缓冲中。所以有了下面的操作:
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); //申请内存vbb.order(ByteOrder.nativeOrder()); //设置字节顺序,其中ByteOrder.nativeOrder()是获取本机字节顺序FloatBuffer vertexBuffer = vbb.asFloatBuffer(); //转换为float型vertexBuffer.put(vertices); //添加数据vertexBuffer.position(0); //设置缓冲区起始位置
其中ByteOrder.nativeOrder()是获取本机字节顺序。OpenGL ES有操作图形渲染管线的函数,在默认情况下这些函数功能的使用状态是处于关闭的。 启用和关闭这些函数可以用glEnableClientState、glDisableClientState来完成。
// 指定需要启用定点数组 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 说明启用数组的类型和字节缓冲,类型为GL_FLOAT gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); // 不再需要时,关闭顶点数组 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
边
多边形
/ 设置CCW方向为“正面”,CCW即CounterClockWise,逆时针
glFrontFace(GL_CCW);
// 设置CW方向为“正面”,CW即ClockWise,顺时针
glFrontFace(GL_CW);
渲染
GL_POINTS:把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制n个点。
GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n个线段,总共绘制N/2条线段。,如果N为奇数,则忽略最后一个顶点。
GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制N-1条线段。
GL_TRIANGLES:把每三个顶点作为一个独立的三角形。顶点3n-2,3n-1和3n定义了第n个三角形,总共绘制N/3个三角形。
GL_TRIANGLE_STRIP:绘制一组相连的三角形。对于奇数点n,顶点n,n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1,n和n+2定义了第n个三角形,总共绘制N-2个三角形。
GL_TRIANGLE_FAN:绘制一组相连的三角形。三角形是由第一个顶点及其后给定的顶点所确定。顶点1,n+1和n+2定义了第n个三角形,总共绘制N-2个三角形。
绘制函数:
绘制图形步骤:
1.定义顶点并且转换存储在字节缓冲中;
2.我们使用顶点数组绘制图形,而opengles是默认关闭这个开关的,所以我们要启用它。gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
3.设置绘制的颜色。以下为设置红色
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
4.由于我们使用顶点数组,我们必须通知OpenGL顶点的数组在什么地方。需使用函数:
gl.glVertexPointer(3,//每个顶点的坐标的维数,这里为3xyzGL10.GL_FIXED,//顶点坐标值的类型为GL_FIXED0,//数组中数据的偏移值mVertexBuffer//顶点坐标数据数组);
5.开始绘图
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
OK!先介绍到这里,下一篇会通过一个实例介绍OpenGL的绘图过程。
OpenGL ES基本概念介绍相关推荐
- Adreno OpenGL ES 3.1 介绍(3)
Adreno OpenGL ES 3.1 介绍(3) 4.1.7单独的着色器对象 4.1.8着色器存储缓冲区对象 4.1.7单独的着色器对象 OpenGL ES中的关键对象类型之一是程序对象. 他们需 ...
- Adreno OpenGL ES 2.0 介绍(3)
Adreno OpenGL ES 2.0 介绍(3) 1. 应用程序示例 1.2 在Android上创建ES 2.0 上下文/环境 1.3 Adreno GPU检测 1.4 检查支持的ES拓展 1. ...
- 音视频开发系列(32)OpenGL ES 基本概念
目录 OpenGL ES的简介 OpenGL ES的基本流程和概念 篇外话:本来这篇要写SurfaceView和TextureView相关的,但是没有理解清楚,主要是对于纹理和SurfaceFling ...
- OpenGL ES 基础概念
概要 状态机 上下文 渲染管线 1. 顶点数组 2. 顶点着色器 3. 图元装配 4. 光栅化 5. 片段着色器 6. 片段测试 帧缓存 / 渲染缓存 纹理 坐标系 这里主要描述一些 OpenGL E ...
- opengl、opengl es、webgl介绍与opengl开发入门
1.OpenGL OpenGL(英语:Open Graphics Library,译名:开放图形库或者"开放式图形库")常用于CAD.虚拟现实.科学可视化程序和电子游戏开发.Ope ...
- 【Android OpenGL开发】OpenGL ES与EGL介绍
什么是OpenGL ES OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的编程图形程序接口,主要用于图像的渲染. Android提供了简化版的OpenGL接口,即O ...
- OpenGL ES之三——绘制纯色背景
概述 这是一个系列的Android平台下OpenGl ES介绍,从最基本的使用最终到VR图的展示的实现,属于基础篇.(后面针对VR视频会再有几篇文章,属于进阶篇) OpenGL ES之一--概念扫盲 ...
- OpenGL ES 苹果编程指南 官方文档翻译01
OpenGL ES Programming Guide for iOS 文章源地址(英文):https://developer.apple.com/library/ios/#documentation ...
- 音视频开发系列(34) OpenGL ES 绘制平面图形
我们前两篇介绍了OpenGL ES 基本概念和GLSL及Shader的渲染流程,这篇我们开始实战,通过GLSurfaceView加载着色器,来绘制三角形.正方形和直线这些平面图形.在实践过程中遇到的问 ...
最新文章
- ../include/my_global.h:1107: 错误:对 C++ 内建类型‘bool’的重声明
- linux java maven_Linux下安装及配置Java与Maven
- c语言程序连接后扩展名为,C语言程序经过编译、连接后生成的可执行文件的扩展名是...
- php v9 分页静态,PHPCMS V9自定义栏目伪静态实现方法(列表页/分页/内容页)
- 2.4.3 死锁的处理策略-避免死锁
- VTK:彩色海拔地图用法实战
- Jzoj5235 好的排列
- python协程asyncio 应用_Python-如何使用asyncio同时运行多个协程?
- opensource项目_宣布2016年Opensource.com社区奖获奖者
- hibernate自动建表到数据库及spring下自动建表到数据库
- 开发人员必备的 Chrome 扩展
- 服务器BIOS、BMC、IPMI、EFI、UEFI等知识详解
- redis一般用来干嘛_谈谈redis的热key问题如何解决
- FreeImage通用图像加载实现
- 米思齐(Mixly)图形化系列教程(四)-运算符
- 证件照排版软件_傻瓜式证件照片排版以及尺寸的调整
- 城市大脑从起源到终极状态的7个阶段
- 数字英文唯一_福特高光归来!双喷+同级唯一8AT,福克斯“猎装”大杀四方
- 紫薇星上的数据结构(10)
- 身份证最后一位的校验