OpenGL讲座
《精品openGL讲义》
整理课件
13
描述几何要素
• 按一定的顺序给出几何要素的顶点,glVertex 命令指定一个顶点,并在生成顶点后,把当前 颜色,纹理坐标,法线等值赋给这个顶点。
• 函数 void glVertex{234}{sifd}{v}(coords);
有时用矢量形式定义顶点,执行效率高,但是 它只能在glBegin与glEnd之间调用才有意义。
void gluPerspective(fovy,aspect,zNear,zFar); 设置投影方式为透视投影,其取景体积是一个截头锥
体,在这个体积内的物体投影到锥的顶点。
整理课件
9
第三部分是OpenGL的主要部分,使用 OpenGL的库函数构造几何物体对象的数学描 述,包括点线面的位置和拓扑关系,几何变换, 光照处理等等。
– 函数名中的单词首写字母大写
整理课件
18
NT环境中OpenGL的命令解释流程
不带加速卡
应用程序 OpenGL命令
OpenGL DLL
带加速卡
应用程序 OpenGL命令
OpenGL DLL
客户
服务器 Server DLL
OpenGL ICD
客户 服务器
Win32 DDI
Server DLL
视频驱动
–创建并显示窗口
void auxInitWindow(GLbyte *title); title:窗口标题
整理课件
23
创建第一个应用程序(3/8)
• 初始化帧缓存(颜色缓存)
–指定初始颜色
void glClearColor(GLclampf r,GLclampf g, GLclampf b,GLclampf a);
计算机图形学(OpenGL总结)PPT课件
• 1、图形软件包 • 2、用VC++编写OpenGL程序 • 3、图形变换 • 4、图元绘制 • 5、颜色和光照 • 6、混合、反走样和雾化 • 7、显示列表、位图和图像 • 8、纹理映射 • 9、复杂图形绘制
2021/7/22
3
一、图形软件包
• 1、Direct 3D和DirectX
– DirectX是微软公司的多媒体应用软件包, Direct 3D是其中的一部分。DirectX支持图形、 音响、应用程序安装和设备管理等。
2021/7/22
5
一、图形软件包
• 3、OpenGL
– OpenGL是以SGI公司为首,联合IBM、Intel 等8家公司共同制定的3D图形标准。
– OpenGL与硬件无关、独立于操作系统、支 持网络运行。
2021/7/22
6
二、用VC++编写OpenGL程序
• 1、OpenGL函数库
– 基本库
10
5、函数命名约定 OpenGL函数都遵循一个命名约定,即采用以下格式:
<库前缀><根命令><可选的参数个数><可选的参数类型>
例如函数glColor3f(…),gl表示这个函数来自库 gl.h,color表示该函数用于颜色设定,3f表示这个 函数采用了三个浮点数参数。
2021/7/22
11
6、OpenGL中的颜色
2021/7/22
7
二、用VC++编写OpenGL程序
• 2、帧缓存
– 在OpenGL中,帧缓存由颜色缓存、深度缓 存、模板缓存和累积缓存组成。
• 颜色缓存:用于存储每个像素点的颜色,包括左 前、(左后、右前、右后)和辅助颜色缓存。
3-OpenGLPPT课件
glPushMatrix(); //保存原始矩阵栈
glColor3f(0,1,0); //绿色
glLoadMatrixf(matrix);
glTranslated( 30,0,0); //沿x轴平 glRotated(45,0,0,1); //绕z轴旋转 移
glTranslated( 30,0,0); //沿x轴平移 glRotated(45,0,0,1); //绕z轴旋
转
2021/3/10
先平移 再旋转
先旋转 再平移
12
ቤተ መጻሕፍቲ ባይዱ
几何变换:任意变换
GL_POINT(点)
GL_LINE(边界)
GL_FILL(区域)
2021/3/10
7
多边形的朝向与填充方式
按 红点、绿点、蓝点顺序定义点 按如下方式定义 多边形的朝向与填充方式 glPolygonMode(GL_FRONT,GL_FILL); //正面,填充 glPolygonMode(GL_BACK,GL_LINE); //背面,线框
将建模与观察矩阵设为系统当前的矩阵 glMatrixMode(GL_MODELVIEW); glLoadIdentity();
2021/3/10
9
几何变换: 平移 缩放 旋转
平移 glTranslate (Tx,Ty,Tz) 缩放 glScaled (Sx,Sy,Sz) 旋转 glRotate (angle,x,y,z) 以上三个函数首先建立一个相应的矩阵M,然后用M
GL_LIN图ES4-19 按顺序配对分组而得到的每一对顶点定义一
条线段。若顶点个数是奇数,忽略最后一个 GL_LINE_STRIP 该顶点序列定义一条折线 GL_LINE_LOOP 该顶点序列定义一条闭合折线
“计算机图形学课件-OpenGL基础”
OpenGL的帧缓存:双缓存和 多重采样缓存
双缓存
为避免屏幕出现闪烁和拉伸等现象,通常使用双缓存技术。
多重采样缓存
用于提高渲染质量,避免出现棱边、走样等问题。
模型矩阵
用于设置物体的位置、大小、 旋转等属性。
视图矩阵
定义了摄像机的位置和方向, 使得透视校正可以应用到场 景中的物体。
投影矩阵
用于将三维场景投影到二维 视口上,包括透视投影和正 交投影。
OpenGL的剪切与裁剪
剪切测试
用于决定是否绘制部分可见的 图形,提高渲染效率。
裁剪平面
使用裁剪平面来剔除不在视锥 体内的图形,避免不必要的渲 染操作。
计算机图形学课件—— OpenGL基础
计算机图形学是探索计算机如何生成、处理和显示图形的学科。本课件将介 绍OpenGL基础,包括历史、基本概念和常用功能。
OpenGL是什么?
OpenGL是跨平台的、开放源代码的图形库,用于开 发各种图形应用程序。
OpenGL支持2D和3D图形,能够创建高性能的交互 式应用程序。
2000年至今
OpenGL被广泛应用于游戏、虚拟现实、工业和科学领域等,迎来了历史性的变革。
OpenGL的版本和兼容性
OpenGL版本
当前最新版本是4.6版,最早 的版本是1.0版。
OpenGL兼容性
OpenGL的兼容性很广,支 持多种操作系统、程序语言 和硬件平台。
OpenGL ES
OpenGL ES是OpenGL的移 动版,支持嵌入式平台和移 动设备,提供比较小的API和 功能。
顶点着色器
处理顶点的位置和颜色等信息。
几何着色器
处理三角形内外和相邻三角形之间的关 系。
OpenGL图形编程1介绍(陈永强)
18
1.1OpenGL的主要功能
位图和图像处理
OpenGL 还提供了专门对位图和图象进行操作的 函数。
19
1.1OpenGL的主要功能
纹理映射
三维景物因缺少景物的具体细节而显得不够真实,为了更 加逼真地表现三维景物,OpenGL 提供了纹理映射的 功能。OpenGL 提供的一系列纹理映射函数使得开发 者可以十分方便地把真实图象贴到景物的多边形上,
32位整数 32位浮点数 64位浮点数
short
long float double
S
L F D
GLubyte,GLboolean
GLshort GLuint,GLenum,GLbitfield
位图字体以及把文本放在窗口的某一位置等这些函数把
Windows 和 OpenGL 揉合在一起。
34
1.4OpenGL基本语法
组成
Win32 API 函数库
这部分函数没有专用的前缀,主要用于处理像素 存储格式和双帧缓存。
35
1.4OpenGL基本语法
函数命名规则
OpenGL函数都遵循一个命名约定,即采用以下格
从而可以在视窗内绘制逼真的三维景观。
20
1.1OpenGL的主要功能
实时动画
为了获得平滑的动画效果,需要先在内存中生成 下一幅图象,然后把已经生成的图象从内存拷 贝到屏幕上,这就是 OpenGL 的双缓存技术 (double buffer)。OpenGL 提供了双缓存 技术的一系列函数。
21
1.1OpenGL的主要功能
交互技术
目前有许多图形应用需要人机交互,OpenGL 提
供了方便的三维图形人机交互接口,用户可以选
OpenGL第一讲
ZhangK.
1 什么是OpenGL?
• OpenGL(Open Graphics Library)是一个专业的、功能强大 的3D图形接口用户可以使用它方便、高效地绘制出多种3D 图形视觉效果,如:光照、纹理、半透明、阴影和材质等。 • 目前, OpenGL已成为开放的国际通用的图形标准。
(OpenGL 4.3规范及相关材料下载:/registry)
2 OpenGL的特点
• 从开发人员的角度看,OpenGL就是一组图形绘制的命 令集合。通过使用OpenGL的命令,用户可以方便地绘 制二维和三维几何元素、位图元素,并改变绘制的方法 和状态。OpenGL提供的绘制功能包括简单几何元素绘 制、位图元素绘制、光照设定、材质设定、相机和投影 设定以及物体坐标变换
实用库中的所有函数全都是由OpenGL基本库函数来编写的,所以, 在使用上和OpenGL基本库的使用是完全相同的,而且,用户也可以使 用基本函数库来实现实用库的函数功能。
5 OpenGL基本程序结构
OpenGL的辅助库
是为了方便用户用标准C编写OpenGL程序而编写的。OpenGL是一 个图形标准,所以,在OpenGL中没有提供窗口管理和消息事件响应 的函数,这样使用标准C 编写OpenGL程序是很不方便的,所以提供 了辅助库。它提供了31个函数,这些函数都是以“aux”为前缀。 OpenGL辅助库提供了一些基本的窗口管理函数、事件处理函数和一 些简单模型的制作函数等,例如,定义窗口的大小、处理键盘时间、 鼠标击键事件、绘制多面体等等。
函数参数类型后缀前带有数字2、3、4 2代表二维,3代表三维,4代表alpha值
5 OpenGL基本配置示例
需要在VC中加入OpenGL库的支持 1、头文件的支持: #include <GL/gl.h> #include<GL/glaux.h> 2、库文件的支持 ProjectSettingLinkObject/Library modules项(工程属性 配置属性 连接器 命令行)中加入
第二讲_OpenGL技术概述(三)PPT课件
(7)把“OpenGL渲染描述表”关联到“当前
的设备上下文对象”
2020/10/13
软件教研室 Software Teaching & Research Depa6rtment
OpenGL技术概述
在视图类ห้องสมุดไป่ตู้件中定制OpenGL
4、在这视图类的实现文件的OnDetroy成员函数中清 除OpenGL变量
OpenGL技术概述
一个具有完整结构的基于MFC的OpenGL程序
1、为其中的视图类增加WM_SIZE处理方法OnSize 2、在OnSize中加入窗口大小改变时对OpenGL的处理 代码 (1)设置视口的位置和大小 (2)设置矩阵模式为:投影模式 (3)把当前矩阵设置为单位矩阵 (4)设置虚拟世界的平行投影体
(1)创建设备上下文对象
(2)填充OpenGL点格式变量 (3)匹配像素格式 (4)设置像素格式 (5)如果是颜色索引模式,还要设置调色板 (6)生成OpenGL渲染描述表
(7)把“OpenGL渲染描述表”关联到“当前
的设备上下文对象”
2020/10/13
软件教研室 Software Teaching & Research Depa7rtment
OpenGL技术概述
2020/10/13
软件教研室 Software Teaching & Research Depa1rtment
OpenGL技术概述 基于MFC的OpenGL编程及运行环境的构建
建立一个单文档/视图应用程序 (注意去掉Unicode选项)
2020/10/13
软件教研室 Software Teaching & Research Depa2rtment
OpenGL图形编程3二维观察与三维变换(陈永强)讲课讲稿
3.2.2模型视图矩阵
平移 旋转 比例
19
3.2.2模型视图矩阵
平移
void glTranslate{fd}(TYPE x,TYPE y,TYPE z);
参数x,y,z就是目标分别沿三个轴的正向平移的 偏移量。这个函数用这三个偏移量生成的矩阵 完成乘法。
当参数是(0.0,0.0,0.0)时,生成的矩阵是单位 矩阵,此时对物体没有影响。
,这样就有效地排除了视见空间之外的所有数据。 4. 由修剪坐标除以w坐标,得到规格化的设备坐标。注意,在变换
过程中,模型视图矩阵和投影视图矩阵都有可能改变坐标的 w 值。 5. 坐标三元组被视见区变换影射到一个2D平面。这也是一个矩阵 变换,但在OpenGL中不能直接指定或修改它,系统会根据指 定给 glViewport 的值在内部设置它。
这段代码绘制了两个球,第一个绘制的球的球心沿x轴正向移动了10个单 位,而第二球不仅沿y轴正向移动10个单位,也沿x轴正向移动10个 单位。这就是效果积累。
27
3.2.3矩阵操作
单位矩阵
glTranslatef(10.0f, 0.0f, 0.0f); glutSolidSphere(1.0f, 15, 15);
glLoadIdentity();
3
3.1.2指定裁剪窗口
定义二维裁剪窗口
gluOtho2D(xwmin, xwmax, ywmin, ywmax);
其 中 , 双 精 度 浮 点 数 xwmin, xwmax, ywmin, ywmax分别对应裁剪窗口的左、右、下、上四条边 界。
默 认 的 裁 剪 窗 口 , 四 条 边 界 分 别 为 wxl=-1.0, wxr=1.0,wyt=-1.0,wyb=1.0。
基于VC++的OpenGL编程讲座 刘涛
前言随着计算机多媒体技术、可视化技术及图形学技术的发展,我们可以使用计算机来精确地再现现实世界中的绚丽多彩的三维物体,并充分发挥自身的创造性思维,通过人机交互来模拟、改造现实世界,这就是目前最为时髦的虚拟现实技术。
通过这种技术,建筑工程师可以直接设计出美观的楼房模型;军事指挥员可以模拟战场进行军事推演,网民可以足不出户游览故宫博物馆等名胜古迹等。
而虚拟现实技术最重要的一部分内容就是三维图形编程。
当前,三维图形编程工具中最为突出的是SGI公司的OpenGL(Open Graphics Language,开放式的图形语言),它已经成为一个工业标准的计算机三维图形软件开发接口,并广泛应用于游戏开发、建筑、产品设计、医学、地球科学、流体力学等领域。
值得一提的是,虽然微软有自己的三维编程开发工具DirectX,但它也提供OpenGL图形标准,因此,OpenGL可以在微机中广泛应用。
目前,OpenGL在国内外都掀起了热潮,但国内对这一领域介绍的资料并不是很多,特别是有志于在图形图像方面进行深入研究的读者朋友,常常苦于不掌握OpenGL编程接口技术,无法向纵深领域扩展。
为了开启三维图形编程这扇神秘大门,本讲座在结合OpenGL有关理论知识的基础上,着重介绍Visual C++6.0开发环境中的编程实现,由于水平有限,本讲座可能无法面面俱到,存在一些疏漏,但相信它可以将开启"神秘大门"的钥匙交给读者朋友们。
第一章概述一、OpenGL的特点及功能OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化访真,都可以利用OpenGL高质量、高性能的特点。
OpenGL自1992年出现以来,逐渐发展完善,已成为一个唯一开放的,独立于应用平台的图形标准,一个典型的OpenGL 应用程序可以在任何平台上运行--只需要使用目标系统的OpenGL库重新编译一下。
OpenGL技术教学课件
3. 语法规则
OpenGL基本库的所有操作函数都是以“gl”为前缀的。 实用库的所有操作函数都是以“glu”为前缀。辅助库的 所有操作函数都是以“aux”为前缀的。OpenGL命令带 有后缀。
以sample.c中的glColor4f为例,前缀“gl”指这个函数是 OpenGL的核心库函数,组成命令的单词首字母大写, 如“Color”;后缀“4”表示颜色值是由4个变量来表示 的;“f ”表示所表示颜色的每个分量的类型为32位浮点 数。
OpenGL核心库函数常量是以“GL_”开头,均用大写字 母,并用下划线将每个关键词分开,如 GL_COLOR_BUFFER_BIT。
4. 程序的基本结构
一个OpenGL程序的基本结构是很简单的,无论多么复杂 的OpenGL程序,可以大致分解成以下部分:
(1)定义窗口
Windows 系统下的OpenGL实现提供了一个辅助函数库 aux,用于解决开窗口和处理输入事件等问题。
void CALLBACK myReshape (int w, int h) //用于窗口大小改变时的处理, 与绘图无关
{glViewport(0,0,w,h); } void main(void) { auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); //窗口显示单缓存和 RGB(彩色)模式 auxInitPosition(0,0,200,200); //大小 x=200 y=200 (0,0)是屏幕左上点 auxInitWindow(“openglsample.c”); //初始化窗口,参数是标题 myinit(); auxReshapeFunc(myReshape); auxMainLoop(display); }
OpenGL基础 ppt课件
36
光源的属性
ppt课件
37
光源的属性
❖ 多光源
ppt课件
18
❖ 镜面反射光
光照概述
反射方向是几乎一致的 镜面反射可以使物体看起来闪闪发光 不同的角度,镜面反射的效果是不一样的
ppt课件
19
❖ 光照方程:itotal = iamb + idiff + ispec
光照概述
ppt课件
20
❖ 材质颜色
环境光颜色 散射光颜色 镜面反射光颜色 发射光颜色
光照概述
ppt课件
14
GL_FLAT
glShadeModel函数会影响法线
GL_SMOOTH
GL_PHONG_WIN
例:光照球体
ppt课件
15
❖ 光照的类型
环境光 散射光(漫反射光) 镜面反射光
光照概述
ppt课件
16
❖ 环境光
光照概述
ppt课件
17
❖ 散射光(漫反射光)
光照概述
反射方向是均匀分布在各个方向上的 从任何角度看上去,光照效果都是一样的
❖ 设置光源属性的函数
glLightfv(…) glLightf(…)
ppt课件
创建光源
25
设置光源属性
ppt课件
26
设置光源属性
❖ 备注:
light可取下列值:
GL_LIGHT0, GL_LIGHT1, … GL_LIGHT7
pname可取下列值:
GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_DIRECTION
内容进度
ppt课件
OpenGL第一课--中文版
OpenGL第一课--中文版第一课中文版第01课创建一个OpenGL窗口:在这个教程里,我将教你在Windows环境中创建OpenGL程序.它将显示一个空的OpenGL窗口,可以在窗口和全屏模式下切换,按ESC退出.它是我们以后应用程序的框架.理解OpenGL如何工作非常重要,你可以在教程的末尾下载源程序,但我强烈建议你至少读一遍教程,然后再开始编程.欢迎来到我的OpenGL教程。
我是个对OpenGL充满激情的普通男孩!我第一次听说OpenGL是3Dfx 发布Voodoo1 卡的OpenGL硬件加速驱动的时候。
我立刻意识到OpenGL是那种必须学习的东西。
不幸的是当时很难从书本或网络上找到关于OpenGL的讯息。
我花了N 个小时来调试自己书写的代码,甚至在IRC和EMail 上花更多的时间来恳求别人帮忙。
但我发现那些懂得OpenGL 高手们保留了他们的精华,对共享知识也不感兴趣。
实在让人灰心!我创建这个网站的目的是为了帮助那些对OpenGL有兴趣却又需要帮助的人。
在我的每个教程中,我都会尽可能详细的来解释每一行代码的作用。
我会努力让我的代码更简单(您无需学习MFC代码)!就算您是个VC 、OPENGL 的绝对新手也应该可以读通代码,并清楚的知道发生了什么。
我的站点只是许多提供OpenGL 教程的站点中的一个。
如果您是OpenGL的高级程序员的话,我的站点可能太简单了,但如果您才开始的话,我想这个站点会教会您许多东西!教程的这一节在2000年一月彻底重写了一遍。
将会教您如何设置一个OpenGL窗口。
它可以只是一个窗口或是全屏幕的、可以任意大小、任意色彩深度。
此处的代码很稳定且很强大,您可以在您所有的OpenGL项目中使用。
我所有的教程都将基于此节的代码!所有的错误都有被报告。
所以应该没有内存泄漏,代码也很容易阅读和修改。
感谢Fredric Echols对代码所做的修改!现在就让我们直接从代码开始吧。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenGL讲座纲领:1,简介2,简单概念性教程3,实例1,OpenGL简介简介:OpenGL - 高性能图形算法行业标准OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。
OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。
支持主流系统平台。
一般由硬件平台直接支持。
对比:对比DirectXOpenGL 只是图形函数库。
DirectX 包含图形, 声音, 输入, 网络等模块。
OpenGL稳定,可跨平台使用。
DirectX仅能用于Windows系列平台,包括Windows Mobile/CE系列以及XBOX/XBOX360。
OpenGL与DirectX之争微软,推行Direct3D,冻结OpenGL!两大显示芯片厂商:Ati和nVIDIA(英伟达)。
2,OpenGL SE简介:OpenGL ES是专为内嵌和移动设备设计的一个2D/3D轻量图形库,它是基于OpenGL API设计的。
OpenGL ES 1.0版基于OpenGL 1.3,而OpenGL ES 1.1则是基于OpenGL 1.5的。
现在主要由Khronos Group来负责管理OpenGL ES的开发维护。
OpenGL ES目前主要有两个版本:OpenGL ES 1.X和OpenGL ES 2.X 。
OpenGL|ES的官方组织是:/ 该组织关注于手持和移动平台上的动态媒体编著、播放所需的API,并致力于为这些API建立无限权费用的开放标准。
OpenGL|ES是根据手持及移动平台的特点,对OpenGL 3D图形API标准进行裁剪定制而形成的,因此大多数OpenGL方面的知识都是可以借鉴的。
嵌入式硬件芯片支持,或软件模拟。
区别OpenGL:OpenGL ES相对OpenGL删减了一切低效能的操作方式,有高性能的决不留低效能的。
具体区别列表:数据类型:(数据类型简化)1: i GLint 整数型2: f GLfixed 定点小数3: x GLclampx 限定型定点小数删除的功能:(舍弃了部分类似功能及复杂功能函数)1.glBegin/glEnd2.glArrayElement3.显示列表4.求值器5.索引色模式6.自定义裁剪平面7.glRect8.图像处理(这个一般显卡也没有,FireGL/Quadro显卡有)9.反馈缓冲10.选择缓冲11.累积缓冲12.边界标志13.glPolygonMode14.GL_QUADS,GL_QUAD_STRIP,GL_POL YGON15.glPushAttrib,glPopAttrib,glPushClientAttrib,glPopClientAttrib15.TEXTURE_1D、TEXTURE_3D、TEXTURE_RECT、TEXTURE_CUBE_MAP16.GL_COMBINE17.自动纹理坐标生成18.纹理边界19.GL_CLAMP、GL_CLAMP_TO_BORDER20.消失纹理代表21.纹理LOD限定22.纹理偏好限定23.纹理自动压缩、解压缩24.glDrawPixels,glPixelTransfer,glPixelZoom25.glReadBuffer,glDrawBuffer,glCopyPixels3,EGL简介OpenGL ES是一个平台中立的图形库,在它能够工作之前,需要与一个实际的窗口系统关联起来,这与OpenGL是一样的。
但不一样的是,这部份工作有标准,这个标准就是EGL。
而OpenGL时代在不同平台上有不同的机制以关联窗口系统,在Windows上是wgl,在X-Window上是xgl,在Apple OS上是agl等。
EGL的工作方式和部份术语都接近于xgl。
EGL是介于OpenGL ES和底层Native系统平台之间的函数接口,目的是让OpenGL ES与本地系统交互且平台无关性。
用于管理图形context,surface与buffer绑定和对渲染配置的控制。
OpenGL ES的初始化过程如下图所示意:Display →Config →Surface↑Context↑Application →OpenGL CommandEGL初始化:1. 获取Display。
Display代表显示器,在有些系统上可以有多个显示器,也就会有多个Display。
获得Display要调用EGLboolean eglGetDisplay(NativeDisplay dpy),参数一般为EGL_DEFAULT_DISPLAY 。
该参数实际的意义是平台实现相关的,在X-Window下是XDisplay ID,在MS Windows下是Window DC。
2. 初始化egl。
调用EGLboolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor),该函数会进行一些内部初始化工作,并传回EGL版本号(major.minor)。
3. 选择Config。
所为Config实际指的是FrameBuffer的参数,在MS Windows下对应于PixelFormat,在X-Window下对应Visual。
一般用EGLboolean eglChooseConfig(EGLDisplay dpy, const EGLint * attr_list, EGLConfig * config, EGLint config_size, EGLint *num_config),其中attr_list是以EGL_NONE结束的参数数组,通常以id,value依次存放,对于个别标识性的属性可以只有id,没有value。
另一个办法是用EGLboolean eglGetConfigs(EGLDisplay dpy, EGLConfig * config, EGLint config_size, EGLint *num_config)来获得所有config。
这两个函数都会返回不多于config_size个Config,结果保存在config[]中,系统的总Config个数保存在num_config中。
可以利用eglGetConfig()中间两个参数为0来查询系统支持的Config总个数。
Config有众多的Attribute,这些Attribute决定FrameBuffer的格式和能力,通过eglGetConfigAttrib ()来读取,但不能修改。
4. 构造Surface。
Surface实际上就是一个FrameBuffer,通过EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig confg,NativeWindow win, EGLint *cfg_attr) 来创建一个可实际显示的Surface。
系统通常还支持另外两种Surface:PixmapSurface 和PBufferSurface,这两种都不是可显示的Surface,PixmapSurface是保存在系统内存中的位图,PBuffer则是保存在显存中的帧。
Surface也有一些attribute,基本上都可以故名思意,EGL_HEIGHT EGL_WIDTH EGL_LARGEST_PBUFFER EGL_TEXTURE_FORMAT EGL_TEXTURE_TARGET EGL_MIPMAP_TEXTURE EGL_MIPMAP_LEVEL,通过eglSurfaceAttrib()设置、eglQuerySurface()读取。
5. 创建Context。
OpenGL的pipeline从程序的角度看就是一个状态机,有当前的颜色、纹理坐标、变换矩阵、绚染模式等一大堆状态,这些状态作用于程序提交的顶点坐标等图元从而形成帧缓冲内的像素。
在OpenGL的编程接口中,Context就代表这个状态机,程序的主要工作就是向Context提供图元、设置状态,偶尔也从Context里获取一些信息。
{ME:状态机绘图最终作用到BF上,而Context关联BF,所以设置状态机即设置Context!}用来创建一个Context。
EGLContext eglCreateContext(EGLDisplay dpy, EGLSurface write, EGLSurface read, EGLContext * share_list)6. 绘制。
应用程序通过OpenGL API进行绘制,一帧完成之后,调用eglSwapBuffers(EGLDisplay dpy, EGLContext ctx)来显示。
//其它:ST_EGLAPI EGLBoolean ST_EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy,EGLSurface draw, EGLSurface read, EGLContext ctx);实例:RWindow iWindow;EGLDisplay iEglDisplay;EGLConfig iEglConfig;EGLContext iEglContext;EGLSurface iEglSurface;iEglDisplay = eglGetDisplay (EGL_DEFAULT_DISPLAY);if(iEglDisplay == EGL_NO_DISPLAY)User::Panic(_L("Unable to find a suitable EGLDisplay"), 0);这里EGL_DEFAULT_DISPLAY指向缺省的手机屏幕(一般来说只有一个),如果程序运行失败,那么该函数将会返回EGL_NO_DISPLAY.if(!eglInitialize (iEglDisplay, 0, 0))User::Panic(_L("Unable to initialize EGL"), 0);最后两个参数是EGL完成的版本。
如果你对此不需要,可以传递0进去。
EGLint numConfigs;if(!eglChooseConfig (iEglDisplay, attribList, &iEglConfig, 1, &numConfigs)) User::Panic(_L("Unable to choose EGL config"), 0);这里attribList参数指明了程序运行所需的属性列表,该函数将在iEglConfig参数中返回一个与属性列表配套的可用配置。