[已读]OpenGL、OpenGL ES、OpenVG、GLX、EGL简介
glew,glee与gl,glu,glut,glx,glext的区别和关系
glew,glee与gl,glu,glut,glx,glext的区别和关系GLEW是⼀个跨平台的C++扩展库,基于OpenGL图形接⼝。
使⽤OpenGL的朋友都知道,window⽬前只⽀持OpenGL1.1的涵数,但OpenGL现在都发展到2.0以上了,要使⽤这些OpenGL的⾼级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布⼀些只有⾃家显卡才⽀持的扩展函数,你要想⽤这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不⽤为找不到函数的接⼝⽽烦恼,因为GLEW能⾃动识别你的平台所⽀持的全部OpenGL⾼级扩展涵数。
也就是说,只要包含⼀个glew.h头⽂件,你就能使⽤gl,glu,glext,wgl,glx的全部函数。
GLEW⽀持⽬前流⾏的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。
glu是实⽤库,包含有43个函数,函数名的前缀为glu。
Glu 为了减轻繁重的编程⼯作,封装了OpenGL函数,Glu函数通过调⽤核⼼库的函数,为开发者提供相对简单的⽤法,实现⼀些较为复杂的操作。
glaux是OpenGL辅助库,包含有31个函数,函数名前缀为aux。
这部分函数提供窗⼝管理、输⼊输出处理以及绘制⼀些简单三维物体。
glut是实⽤⼯具库,基本上是⽤于做窗⼝界⾯的,并且是跨平台(所以有时你喜欢做简单的demo的话,可以光⽤glut就ok了)GLX:OpenGL extension for X.对于X窗⼝系统,它所使⽤的的OpenGL扩展(GLX)是作为OpenGL的⼀个附件提供的,所有的GLX函数都使⽤前缀glX。
常见的OpenGL头⽂件如下:(Windows系统中可以忽略⼤⼩写的区别,我⾃⼰也没太注意⼤⼩写。
同时,⽂件的路径可能变化,例如不是<GL/gl.h>⽽是"gl.h",具体情况要看你到底把头⽂件放到哪了)<GL/gl.h>:OpenGL所使⽤的函数和常量声明。
OpenGL使用简介
void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); //设为双缓冲区,
//平滑动画需要
}
glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("Lighthouse 3D - GLUT Tutorial"); glutDisplayFunc(renderScene); glutIdleFunc(renderScene);
一些命名规则
函数:
– OpenGL核心库(gl) – OpenGL实用库(glu) – 对X窗口系统的OpenGL扩展(glX)
举例:
– void glBegin(GLenum mode); – void gluBeginCurve(GLUnurbs* nurb); – void glXFreeContextEXT(Display * dpy, GLXContext ctx);
GLUT
GLUT ( OpenGL Utility Toolkit ) 安装:在windows下通过 C/C++语言编写 GLUT 程序, 你 需要以下三个文件:
– GLUT.H - 你需要在你的源代码中包含这个文件。通常情况下,这个文件应该放在 你系统的包含目录下的 GL 文件夹中。 – GLUT.LIB (SGI windows版本) 以及 glut32.lib (微软版本) - 这个文件必须被连接到 你的程序中, 确保它放在 LIB 目录中。 – glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据你所使用的OpenGL选 择一个,如果你正在使用微软公司的版本,那么你必须选择 glut32.dll。你应该把 DLL放置在你的系统文件夹中。
OpenGL ES
一简介OpenGL ES (OpenGL for Embedded Systems) 是OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。
该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
OpenGL ES 是从OpenGL 裁剪定制而来的,去除了glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性。
经过多年发展,现在主要有两个版本,OpenGL ES 1.x 针对固定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。
OpenGL ES 1.0 是以OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以OpenGL 1.5 规范为基础的,它们分别又支持common 和common lite 两种profile。
lite profile只支持定点定点实数,而common profile既支持定点数又支持浮点数。
OpenGL ES 2.0 则是参照OpenGL 2.0 规范定义的,common profile发布于2005-8,引入了对可编程管线的支持。
OpenGL ES 还有一个safety-critical profile。
二基本操作openGL 的原理图如上图所示。
命令从左边输入。
一些命令用来绘制几何物体,而其它命令则控制不同阶段如何对物体进行处理。
大多数指令可以在一个DisplayList中累积,以供GL稍后对其处理。
否则,命令将被送入一个处理管道。
第一阶段通过计算输入值的多项式函数,提供了一种估计曲线和表面几何特征的有效方法。
第二阶段根据点、线和多边形三类基本类型的图元的顶点属性进行操作。
在这个阶段,对顶点经过了形变和光照处理,原始点被处理成许多卷积,为下一阶段——光栅化做准备。
光栅化生产一系列的帧缓冲区。
opengl和opengl_es的区别
OpenGL ES 概述作者:刘鹏日期: 2009-05-10本文对OpenGL ES 做了综合性的介绍,包括OpenGL ES 的由来、主要版本及其特点、OpenGL ES 与OpenGL 的主要区别等等。
简介2OpenGL_ES是khronos协会从OpenGL裁剪定制而来的,专为手机,游戏机等嵌入式设备而设计。
它的接口其实和Open GL很类似。
OpenGL_ES有几个主要版本,但对游戏开发来说,需要关注的只有两个:OpenGL_ES_1.x_和OpenGL_ES_2.x。
两者的特性和主要区别如下:OpenGL_ES_1.x 为固定渲染管线(Fixed_Function)而设计。
子版本包括:1.0,1.1。
1.0从OpenGL_1.3裁减而来;1.1从OpenGL_1.5裁减而来。
1.1向下兼容1.0。
经研究,1.1因为更先进,而且相比1.0增加的特性也都很有用,所以基本上不用考虑1.0了。
1.1和1.0的变化不算很大,应该芯片的价格也不会高出很多?1.1的技术规范参见:es_full_spec.1.1.12.pdf 或者es_cm_spec_1.1.12.pdf。
OpenGL_ES_2.x 为可编程渲染管线(Programmable)而设计。
目前只有2.0这一个子版本,从OpenGL_2.0裁减而来。
和1.x的区别是可以支持vertex和pixel shader,因此能够实现更多的特效。
另外2.0就不再支持1.x里面的固定管线功能了,也就是说2.x并不向下兼容 1.x。
技术规范参见:es_full_spec_2.0.22.pdf 或者:es_cm_spec_2.0.22.pdf。
OpenGL ES相对OpenGL删减了一切低效能的操作方式,有高性能的决不留低效能的,即只求效能不求兼容性。
比如没有double型数据类型,但加入了高性能的定点小数数据类型;没有glBegin/glEnd/glVertex,只能用glDrawArrays/glDraw......;没有实时将非压缩图片数据转成压缩贴图的功能,程序必须直接提供压缩好的贴图; OpenGL ES 与OpenGL 的区别3数据类型: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_POLYGON15.glPushAttrib,glPopAttrib,glPushClientAttrib,glPopClientAttrib16.TEXTURE_1D、TEXTURE_3D、TEXTURE_RECT、TEXTURE_CUBE_MAP17.GL_COMBINE18.自动纹理坐标生成19.纹理边界20.GL_CLAMP、GL_CLAMP_TO_BORDER21.消失纹理代表22.纹理LOD限定23.纹理偏好限定24.纹理自动压缩、解压缩25.glDrawPixels,glPixelTransfer,glPixelZoom26.glReadBuffer,glDrawBuffer,glCopyPixels其它注意事项:1.glDrawArrays等函数中数据必须紧密排列,即间隔为02.各种数据的堆栈深度较低OpenGL based Graphics : A state machine4It's a state machine - Setup the stage, lighting, actors... Then draw it. Sample OpenGL ES 2.0 program as following:// SetupHandle = get_platform_specific_window_handle();eglGetDisplay (handle);eglInitialize ();eglBindAPI (EGL_OPENGL_ES_API);eglChooseConfig ();eglCreateWindowSurface ();eglCreateContex ();eglMakeCurrent ();//Actorsfloat afVertices [] = {...};glEnableVertexAttribArray (0);glVertexAttribPointer (VERTEX_ARRAY, GL_FLOAT, GL_FALSE, afVertices); glDrawArrays (GL_TRIANGLE_STRIP, 0, 4);//ShoweglSwapBuffers (eglDisplay, eglSurface);。
OpenGL ES 2.0简单介绍 2
OpenGL ES 2.0简单介绍OpenGL ES 和OpenGL 一样,是khronos 所维护、定义的免授权费、跨平台的3D Graphics API,不过和OpenGL 不同的是,OpenGL ES 主要是针对嵌入式系统(embedded system)的环境(像是手机、PDA);而近年来网页上的多媒体技术越来越複杂、多样化,也渐渐地需要用到3D Graphics 的硬体加速,所以也出现了基于OpenGL ES 2.0 而发展、直接在网页上做3D 显示的WebGL。
AD:OpenGL ES 和OpenGL 一样,是khronos 所维护、定义的免授权费、跨平台的3D Graphics API,不过和OpenGL 不同的是,OpenGL ES 主要是针对嵌入式系统(embedded system)的环境(像是手机、PDA).而近年来网页上的多媒体技术越来越複杂、多样化,也渐渐地需要用到3D Graphics 的硬体加速,所以也出现了基于OpenGL ES 2.0 而发展、直接在网页上做3D 显示的WebGL。
也由于OpenGL ES 所针对的环境一般来说效能都较差、有支援的功能也较少,所以OpenGL ES 的技术方面的进展会比OpenGL 来的慢、而且也有较多的限制。
目前OpenGL ES 有两个大版本,一个是基于OpenGL 1.3 1.5、使用「fixed function pipeline」的1.0 1.1,另一个则是基于OpenGL 2.0、使用「programmable pipeline」的2.x。
两者最大的差别,就在于OpenGL ES 2.0 移除了fixed function pipeline 的功能,而要使用透过vertex fragment shader 来实作的programmable pipeline。
上面两张图取自OpenGL ES 网站的fixed function pipeline 和programmable pipeline 的流程图。
opengl使用手册 简书
opengl使用手册简书(原创实用版)目录一、OpenGL 简介二、OpenGL 函数库1.核心函数库2.矩阵操作、几何变换和投影变换函数3.交互式输入设备函数三、OpenGL 扩展库 GLEW正文一、OpenGL 简介OpenGL(Open Graphics Library)是一个跨平台的图形编程接口,用于渲染 2D 和 3D 图形。
OpenGL 提供了一套完整的图形渲染 API,可以实现各种视觉效果,如颜色、光照、阴影、纹理贴图等。
它广泛应用于游戏开发、计算机辅助设计、虚拟现实、科学可视化等领域。
二、OpenGL 函数库OpenGL 函数库包含许多可以用于绘制图形的函数。
这些函数可以根据其功能分为不同的类别,主要包括:1.核心函数库:这个库包含了 OpenGL 的基本功能,如绘制基本的几何图元(glBegin)、设置颜色(glColor3f)等。
2.矩阵操作、几何变换和投影变换函数:这个库包含了用于操作矩阵、实现几何变换和投影变换的函数。
例如,矩阵入栈(glPushMatrix)、矩阵出栈(glPopMatrix)、矩阵乘法(glMultMatrix)等。
3.交互式输入设备函数:这个库包含了用于处理交互式输入设备的函数,例如鼠标和键盘。
这些函数可以让用户在程序中进行操作,如点击、拖动、滚动等。
三、OpenGL 扩展库 GLEWGLEW(GL Extension Wrangler Library)是一个 OpenGL 扩展库,用于简化 OpenGL 扩展的加载和使用过程。
GLEW 提供了一系列的函数,用于查询、启用和禁用 OpenGL 扩展。
使用 GLEW,开发者无需关心扩展的加载和启用,只需关注功能的实现。
总之,OpenGL 是一套功能强大的图形编程接口,包含了丰富的函数库,可以实现各种复杂的图形渲染效果。
十三讲OpenGL技术简介ppt课件
首先,用时需要在project-settings-linkobject/library中加入 opengl32.lib glu32.lib glaux.lib 三个库。
• 如果是MFC程序
在视图类或OpenGL显示类中加入头文件 gl/glaux.h, gl/gl.h 及gl/glu.h三个头文件。
• 库类型
gl代表基本库,glu代表实用库,aux代表辅助库, wgl代表Windows专用库 。
• 函数参数信息
指明该函数有多少个参数,参数都是什么类型,如i 表示int,s表示short,f表示float,d表示double,v 表示参数为向量(即数组)。
OpenGL的工作流程
• 作为一个图形应用程序开发标准,OpenGL 具有软硬件平台无关性,它采用了 Client/Server的工作方式,其工作流程如下:
说明:将一个旋转矩阵与当前矩阵相乘,该矩阵将 物体绕原点到点(x,y,z)直线逆时针旋转angle 度
• glScale*(TYPE x, TYPE y, TYPE z)
说明:将物体缩放或沿坐标轴反射物体,物体上的 每个点坐标都分别乘以参数x、y、z。
• glMultMatrix*(const TYPE *m)
• OpenGL是什么?
Open Graphics Library,SGI公司推出的开放式图形 程序库(API),现已成为广泛接受的图形应用程序 开发标准。
• OpenGL跟其他图形库相同吗?
具有其他流行图形系统的大部分特点。
• 通过OpenGL编程能获得什么?
能更深入地理解图形学中所学的知识,若要掌握
• 2.剪裁
场景被渲染到矩形窗口中,所以要剪掉位于窗口之 外的物体。பைடு நூலகம்
OpenGL简介
一个完整的OpenGL图形处理系统的结构为:最底层为图形硬件, 第二层为操作系统,第三层为窗口系统,第四层为OpenGL,第五层为 应用软件。OpenGL是网络透明的,在客户机/服务器体系结构中,允许 本地或远程调用OpenGL.
4.OpenGL的绘图方式
OpenGL的绘图方式与Windows的一般的绘图方式是不同的,其区别 主要表现在以下三个方面: (1)Windows采用的是GDI绘图; (2)OpenGL采用的是渲染设备环境RC(Render Context)绘图; (3)OpenGL使用的是特殊的像素格式。 渲染设备环境主要是由以下6个wgl函数来管理,下面对这些函数进行 一个简短的介绍: 1.HGLRC wglCreateContext(HDC hdc) 该函数用来创建一个OpenGL可用的渲染设备环境RC。 2.BOOL wglDeleteContext(HGLRC hglrc) 该函数删除一个RC。
(4)OpenGL工具库,包含大约30多个函数,函数名前缀为glut。 这部分函数主要提供基于窗口的工具,如:多窗口绘制、空消息和定时 器,以及一些绘制较复杂物体的函数。由于glut中的窗口管理函数是不 依赖于运行环境的,因此OpenGL 中的工具库可以在所有的OpenGL平 台上运行。 (5)Windows专用库,包含有16个函数,函数名前缀为wgl。 这部分函数主要用于连接OpenGL和Windows95/NT,以弥补OpenGL 在文本方面的不足。Windows专用库只能用于Windows95/98/NT环境中。 (6)Win32API函数库,包含有6个函数,函数名无专用前缀。 这部分函数主要用于处理像素存储格式和双帧缓存。这6个函数将替换 Windows GDI中原有的同样的函数。Win32API函数库只能用于 Windows/95/98/NT环境中。
OPENGL入门简介
12
描述几何要素
按一定的顺序给出几何要素的顶点, 按一定的顺序给出几何要素的顶点, glVertex命令指定一个顶点,并在生成顶 命令指定一个顶点, 命令指定一个顶点 点后,把当前颜色,纹理坐标, 点后,把当前颜色,纹理坐标,法线等 值赋给这个顶点。 值赋给这个顶点。 函数 void glVertex{234}{sifd}{v}(coords); 有时用矢量形式定义顶点,执行效率高, 有时用矢量形式定义顶点,执行效率高, 但是它只能在glBegin与glEnd之间调用 但是它只能在 与 之间调用 才有意义。 才有意义。
解释 一系列独立的点 每两点相连成为线段 简单,凸多边形的边界 三点相连成为一个三角形 四点相连成为一个四边形 顶点相连成为一系列线段 顶点相连成为一系列线段,连接最后 一点与第一点 相连的三角形带 相连的三角形扇形 相连的四边形带
15
OpenGL函数命名规范 函数命名规范
void glVertex3fv(Glfloat *vertex);
允许在glBegin()与glEnd()之间调用的 与 之间调用的OpenGL命 允许在 之间调用的 命 令 glVertex*();
glColor*(); glIndex(); glNormal(); glEvalCoord*(); glCallList(),glCallLists(); glTexCoord(); glEdgeFlag(); glMaterial();
线型:连续线(缺省值)、点画线等 பைடு நூலகம்型:连续线(缺省值)、点画线等 )、
void glEnable(GL_LINE_STIPPLE); void glLineStipple(GLint factor,GLushort pattern); factor 例: pattern 结果 0x00FF 1 0x00FF 2 多边形 绘制方式:顶点、边界、 绘制方式:顶点、边界、填充
OpenGL 简介(中英文翻译)
译文:OpenGL 简介OpenGL是一个底层图形库规范。
它为程序员提供了一个小的几何图元(点、线、多边形、图片和位图)库和一个支持2D/3D几何对象绘图命令库,通过所提供的图元和命令来控制对象的呈现(绘图)。
由于OpenGL的绘图命令仅限于画一些简单的几何图元(如点、线和多边形),所以OpenGL实用工具包(GLUT)应运而生,它能够帮助绘画出更复杂的三维对象(比如球体、圆环甚至茶壶)。
如果你要构建需要利用到OpenGL全部特性的应用的话,GLUT 未必适合,但是对刚学习OpenGL的人来说GLUT就非常有用。
GLUT是为满足windows系统下OpenGL程序独立编程接口的需求而设计的,接口被设计的非常简单而又实用。
从OpenGL中移除windows系统的操作是一个非常英明的决定,因为这意味着OpenGL图形系统能够被应用于更广泛的系统中(包括功能强大但昂贵的图形工作站以及需要大量图形运算的视频游戏、互动电视机机顶盒和个人电脑)。
GLUT简化了用OpenGL进行渲染的程序的实现。
GLUT应用编程接口(API)只需要调用很少的接口就可以用OpenGL来渲染图形场景,并且GLUT接口所需的参数也相对较少。
渲染管线大多数OpenGL实现都有着类似的操作顺序,这一系列的操作过程叫做OpenGL 渲染管线。
尽管OpenGL并不严格要求需要按照渲染管线这一顺序来实现,但是这样做可以为预测OpenGL下一步将要做什么提供可靠的指引。
几何数据(点、线、多边形)将会沿着一条依次通过求值器、顶点操作和装配阶段的路径进行传递,而像素数据(像素,图形,位图)将会沿着另一条路径传递,在最终像素写入帧缓冲区前,像素数据和几何数据都会经历相同的最后一步——栅格化处理。
Display Lists: 所有数据,无论是用来描述几何体还是像素的,都可以保存在一个display list中来在当下或将来使用(用以替代display list的用法是在需要时立即处理数据——称为立即模式)当一个display list被触发时,保存的数据就像立即模式一样被发送至显示器。
OpenGL ES入门资料
OpenGL ES入门一、前言OpenGL ES是Khronos Group创建的一系列API中的一种(官方组织是:/)。
在桌面计算机上有两套标准的3DAPI:Direct3D和OpenGL。
Direct3D实际上是运行在windows操作系统上的标准3DAPI,而OpenGL则是跨平台的,适用于Linux、多种UNIX、MAC OS X和windows。
由于OpenGL得到了广范围的认可,所以,基于嵌入式的3DAPI---OpenGL ES也就应运而生。
沃Phone使用的芯片高通7227,它能很好的提供对OpenGL ES的支持,了解OpenGL ES 的种种特性,不仅能开发出很好的适用于沃Phone的3D游戏、3D应用等。
借助于OpenGL ES的平台无关性,只要稍微修改EGL,理论上就可以将开发的3D游戏、3D应用移植到任何支持OpenGL ES的平台上去。
本篇文档就从零开始,深入简出,跟大家介绍一下OpenGL ES的原理和开发。
OpenGL ES简介什么是OpenGL ESOpenGL ES是一套适用于手持嵌入式设备的3DAPI。
比如手机、PDA、汽车、航空等等上面都可以使用到OpenGL ES。
OpenGL ES是免授权费的、跨平台的、功能完善的2D和3D 图形应用程序接口API,它是桌面OpenGL的子集,是从OpenGL裁剪定制而来的。
由于手持设备的相关局限性,OpenGL ES相对于OpenGL不可避免的进行了相关的精简。
去除了OpenGL中比如glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POL YGONS)等复杂图元等许多非绝对必要的特性。
但是OpenGL方面的很多知识,OpenGL ES都是可以借鉴的。
OpenGL ES其实是一个状态机(State machine),它保存一种状态直至其改变。
每个状态都有本身默认的缺省值,可以通过相关的查询和设置函数进行相关的查询和设置。
OpenGL的库函数介绍
OpenGL的库函数介绍开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。
OpenGL库函数的命名方式非常有规律。
所有OpenGL函数采用了以下格式:<库前缀><根命令><可选的参数个数><可选的参数类型>库前缀有gl、glu、aux、glut、wgl、glx、agl等等,分别表示该函数属于OpenGL那个开发库。
从函数名后面中还可以看出需要多少个参数以及参数的类型。
I代表int型,f代表float型,d代表double型,u代表无符号整型。
例如:glVertex3fv()表示了该函数属于gl库,参数是三个float型参数指针。
我们用glVertex*() 来表示这一类函数。
OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。
从下图可以看出,核心库(gl)是核心,实用库(glu)是对gl的部分封装。
窗口库(glx、agl、wgl)是针对不同窗口系统的函数。
实用工具库(glut)是跨平台的OpenGL程序的工具包,比aux功能强大。
扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。
下面逐一对这些库进行详细介绍。
1.OpenGL核心库(GL)核心库包含有115个函数,函数名的前缀为gl。
这部分函数用于常规的、核心的图形处理。
由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形多达300多个。
核心库在Windows平台上的头文件为“GL.H”,库文件为“OPENGL32.LIB”,动态链接库为“OPENGL32.DLL”。
核心库可以在所有的OpenGL平台上运行。
核心库中的函数主要分为以下几类:●基本几何图元的绘制函数:glBegain()、glEnd()、glNormal*()、glVertex*();●矩阵操作、几何变换和投影变换的函数:如矩阵入栈函数glPushMatrix(),矩阵出栈函数glPopMatrix(),装载矩阵函数glLoadMatrix(),矩阵相乘函数glMultMatrix(),当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport();●颜色、光照和材质的函数:如设置颜色模式函数glColor*()、glIndex*(),设置光照效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial();●显示列表函数:主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glCallList()和glDeleteLists();●纹理映射函数:主要有一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*();●特殊效果函数:融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*();●光栅化、象素操作函数:如象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel();●选择与反馈函数:主要有渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer();●曲线与曲面的绘制函数:生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*() glEvalMesh*();●状态设置与查询函数:glGet*()、glEnable()、glGetError()。
OpenGL ES-EGL 知识
综上所述,所需步骤
获取Display eglGetDisplay 初始化EGL eglInitialize 选择Config eglGetConfigs 构造Surface eglCreateWindowSurface 创建Context eglCreateContext 指定当前设置上下文eglMakeCurrent
10 指定某个EGLCONTEX为当前上下文
因为一个程序可能创建多个EGLContext用于不同的用途,所
以我们需要关联特定的EGLContext和渲染表面, 这一过程常
常被称为 指定当前上下文 EGLContext eglMakeCurrent( EGLDisplay display, EGLSurface draw, EGLSurface read, EGLContext context)
• 在EGL能确定可用的绘制表面类型之前, 必须打开窗口系统的通信渠道
1 与原生窗口通信
• EGLDisplay 这个类封装了系统的相关属
性,用于和原生窗口交互。 • 任何EGL程序必须执行的第一个操作 • 创建和初始化与本地EGL显示的链接
1 与原生窗口通信
• 任何EGL程序,必须执行的第一个操作
EGLBoolean eglInitialize(EGLDispaly display,
EGLint *majorVersion, EGLint *minorVersion) 初始化EGL内部数据结构 获得主次版本号 若错误 返回EGL_FALSE 并将EGL错误代码设置为 EGL_BAD_DISPLAY(display 没有指定有效的EGLDisplay) EGL_NOT_INITIALIZED egl不能初始化
8创建屏幕外的渲染区域 EGL窗口
OpenGL简介资料
//主函数
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); //设置显示模式(颜色、缓冲区等)
glutCreateWindow(“A Simple Example”); //创建窗口
OpenGL功能(五)
纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真地表 达物体表面细节。
OpenGL功能(六)
位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提 供融合(Blending)、反走样(Antialiasing) 和雾(fog)的特殊图象效果处理。以上三条 可使被仿真物更具真实感,增强图形显示的效 果。
用OpenGL编写程序的基本模板
模板演示
基本操作(视口变换)
Void glViewport(GLint x,GLint y,GLsizei width,GLsizei height); 在窗口中指定一个用于显示图像的像素矩形。 参数(x,y)是视口左下角的坐标,而参数 width和height为视口的大小。默认情况下, 视口的初始值为(0,0,winWidth,winHeight),其 中winWidth和winHeight是窗口的大小。
将影响投影矩阵而不是模型视点矩阵,同时消除以前 的投影变换。每个投影变换函数都完整的描述了一种特 定的变换,因此通常不混合使用两种投影变换
(一)透视投影
void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble near,GLdouble far); 参数fovy是在yz平面内的视野角度,其取值范围为[0.0, 180.0];参数aspect是视景体顶面的宽高比(w/h);参数 near和far是视点和两个裁减面之间的距离,必须大于0。
egl的基本概念、api和用法
egl的基本概念、api和用法一、基本概念EGL(EGL,全称Electronic Graphics Library)是一个用于处理图像和图形渲染的开源库。
它提供了一组用于渲染图形、图像处理、动画等功能的API,用于在各种平台上进行高效的图形渲染。
EGL 是OpenGL ES的底层接口,用于连接应用程序和图形渲染引擎。
它提供了一组跨平台、高性能的图形渲染功能,使开发者能够更轻松地实现高质量的图形应用程序。
二、APIEGL提供了丰富的API,用于处理图形渲染的各种任务。
以下是一些常用的EGL API:1. eglCreateImage:创建一个EGLImage对象,用于传输图像数据到渲染引擎。
2. eglBindBuffer:绑定缓冲区对象到特定的缓冲区类型,用于存储图像数据或传输数据。
3. eglTexImage2D:将图像数据传输到纹理对象,用于在渲染引擎中进行纹理映射。
4. eglSwapBuffers:交换前后缓冲区,实现双缓冲区的渲染效果。
5. eglCreateContext:创建OpenGL ES上下文,用于渲染图形。
6. eglMakeCurrent:将当前上下文与渲染引擎关联起来,以便进行渲染操作。
三、用法使用EGL进行图形渲染需要以下步骤:1. 初始化EGL环境:包括设置EGL窗口和渲染上下文等。
2. 创建EGLImage对象:使用eglCreateImage API创建EGLImage对象,并设置图像数据。
3. 绑定缓冲区:使用eglBindBuffer API将缓冲区对象绑定到特定的缓冲区类型。
4. 传输图像数据:使用eglTexImage2D API将图像数据传输到纹理对象。
5. 创建OpenGL ES上下文:使用eglCreateContext API创建OpenGL ES上下文。
6. 将上下文与渲染引擎关联起来:使用eglMakeCurrent API将当前上下文与渲染引擎关联起来,以便进行渲染操作。
opengl简介
(3)网络透明性 ) 建立在客户/ 建立在客户/服务器模型上的网络透明性是 OpenGL的固有特性,它允许一个运行在工作站上的 的固有特性, 的固有特性 进程在本机或通过网络在远程工作站上显示图形。 进程在本机或通过网络在远程工作站上显示图形。利 用这种性质能够均衡各工作站的工作负荷, 用这种性质能够均衡各工作站的工作负荷,共同承担 图形应用任务。 图形应用任务。 (4)高质量和高性能 ) 无论是在CAD/CAM、三维动画还是可视化仿真 、 无论是在 等领域, 等领域,OpenGL高质量和高效率的图形生成能力都 高质量和高效率的图形生成能力都 能得到充分的体现。在这些领域中, 能得到充分的体现。在这些领域中,开发人员可以利 制作出效果逼真的二、 用OpenGL制作出效果逼真的二、三维图像来。 制作出效果逼真的二 三维图像来。
2003年的 月,ARB公布 年的7月 公布OpenGL 1.5规范, 规范, 年的 公布 规范 这也是迄今为止最新的OpenGL版本。 版本。 这也是迄今为止最新的 版本
2 OpenGL的特点 的特点
从程序开发人员的角度来看, 从程序开发人员的角度来看,OpenGL是一组绘 是一组绘 图命令的API集合。利用这些 集合。 图命令的 集合 利用这些API能够方便地描述 能够方便地描述 二维和三维几何物体, 二维和三维几何物体,并控制这些物体按某种方 式绘制到显示缓冲区中。 式绘制到显示缓冲区中。OpenGL的API集提供 的 集提供 了物体描述、平移、旋转、缩放、光照、纹理、 了物体描述、平移、旋转、缩放、光照、纹理、 材质、像素、位图、文字、 材质、像素、位图、文字、交互以及提高显示性 能等方面的功能,基本涵盖了开发二、 能等方面的功能,基本涵盖了开发二、三维图形 程序所需的各个方面。 程序所需的各个方面。与一般的图形开发工具相 具有以下几个突出特点: 比,OpenGL具有以下几个突出特点: 具有以下几个突出特点
OpenGL基本概念
OpenGL基本概念最近在做用OpenGL显示YUV数据的工作。
完成之后,决定将学到的东西整理总结一下。
在探索OpenGL的过程中,一篇英文的tutorial让我受益匪浅。
我自己的总结也将主要取材于此。
那篇tutorial的作者是个巴西人,其英文虽然语法不甚精湛,但文章可读性极好。
如果你英文还可以,强烈推荐读原文,比我这总结有用多了。
本文主要介绍OpenGL的基本概念。
OpenGL的组成OpenGL主要包括三个要素:•原件(Primitives)•缓冲区(Buffers)•光栅化(Rasterisation)原件原件包括点、线、三角形。
有的OpeGL版本还包括四边形,但在OpenGL ES(见文末说明)中只有这三种原件。
缓冲区包括三个概念:•帧缓冲区(Frame Buffers)•渲染缓冲区(Render Buffers)•缓冲区对象(Buffer Objects)帧缓冲区是GL储存渲染结果的地方。
它可以包含多个图像,也就是包含多个渲染缓冲区。
渲染缓冲区就是一个图像,例如颜色图像、深度图像、模版图像(决定每个位置是否可见的掩膜)等。
缓冲区对象就是程序员提供给OpenGL的数据,分为结构类和索引类的。
前者被称为“数组缓冲区对象”或“顶点缓冲区对象”(“Array Buffer Object”或“Vertex Buffer Object”),即用来描述模型的数组,如顶点数组、纹理数组等;后者被称为“索引缓冲区对象”(“Index Buffer Object”),是对上述数组的索引。
光栅化光栅化的过程就是根据缓冲区对象里提供的数据经过渲染从3D模型得到2D图像的过程。
得到的2D图像会根据帧缓冲区的配置来决定是直接送到屏幕显示或是做别的用处。
OpenGL的流水线从2.0版本开始,OpenGL支持可编程的流水线。
也就是说,程序员可以通过Shader(一种程序)来控制GPU渲染的过程。
Shader 分为Vertex Shader和Fragment Shader。
[已读]OpenGL、OpenGL ES、OpenVG、GLX、EGL简介
OpenGL、OpenGL ES、OpenVG、GLX、EGL简介今天研究了一些和图形处理相关的技术,其中遇到了一些让人费解的缩写,晚上我抽空整理了如下,希望对大家有点帮助。
(1)OpenGL、OpenGL ES、OpenVG:OpenGL是行业领域中最为广泛接纳的2D/3D图形API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。
OpenGL帮助程序员实现在PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
OpenGL ES是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,它针对多种嵌入式系统专门设计。
它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。
OpenGL ES包含浮点运算和定点运算系统描述以及EGL 针对便携设备的本地视窗系统规范。
OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。
OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程3D图形算法。
说白了,就是OpenGL的子集、可以应用于ES上。
OpenVG是针对诸如Flash和SVG的矢量图形算法库提供底层硬件加速界面的免授权费、跨平台应用程序接口API。
OpenVG现仍处于发展阶段,其初始目标主要面向需要高质量矢量图形算法加速技术的便携手持设备,用以在小屏幕设备上实现动人心弦的用户界面和文本显示效果,并支持硬件加速以在极低的处理器功率级别下实现流畅的交互性能。
(2)GLX、EGL:GLX是OpenGL Extension to the X Window System的缩写。
它作为x的扩展,是x协议和X server的一部分,已经包含在X server的代码中了。
GLX提供了x window system使用的OpenGL接口,允许通过x调用OpenGL库。
EGL接口介绍
EGL接口介绍(转)2010-11-28 18:28EGL 是 OpenGL ES 和底层 Native 平台视窗系统之间的接口。
本章主要讲述OpenGL ES 的 EGL API ,以及如何用它创建 Context 和绘制 Surface 等,并对用于 OpenGL 的其他视窗 API 做了比较分析,比如 WGL 和 GLX 。
本章中将涵盖如下几个方面:λ EGL 综述λ EGL 主要构成( Display , Context , Configuration )λ在 Brew 和 Windows CE 上使用 EGLλ EGL 和其他 OpenGL 视窗系统的比较EGL 介绍EGL 是为 OpenGL ES 提供平台独立性而设计。
在本章中,你将详细地学习每个EGL API ,并了解使用 EGL 时候需要注意的平台特性和限制。
OpenGL ES 为附加功能和可能的平台特性开发提供了扩展机制,但仍然需要一个可以让 OpenGL ES 和本地视窗系统交互且平台无关的层。
OpenGL ES 本质上是一个图形渲染管线的状态机,而 EGL 则是用于监控这些状态以及维护 Frame buffer 和其他渲染 Surface 的外部层。
图 2-1 是一个典型的 EGL 系统布局图。
EGL 视窗设计是基于人们熟悉的用于 Microsoft Windows ( WGL )和 UNIX ( GLX )上的 OpenGL 的 Native 接口,与后者比较接近。
OpenGL ES 图形管线的状态被存储于 EGL 管理的一个 Context 中。
Frame Buffers 和其他绘制Surfaces 通过 EGL API 创建、管理和销毁。
EGL 同时也控制和提供了对设备显示和可能的设备渲染配置的访问。
EGL 数据类型EGL 包含了自己的一组数据类型,同时也提供了对一组平台相关的本地数据类型的支持。
这些 Native 数据类型定义在 EGL 系统的头文件中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenGL、OpenGL ES、OpenVG、GLX、EGL简介今天研究了一些和图形处理相关的技术,其中遇到了一些让人费解的缩写,晚上我抽空整理了如下,希望对大家有点帮助。
(1)OpenGL、OpenGL ES、OpenVG:
OpenGL是行业领域中最为广泛接纳的2D/3D图形API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。
OpenGL帮助程序员实现在PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
OpenGL ES是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,它针对多种嵌入式系统专门设计。
它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。
OpenGL ES包含浮点运算和定点运算系统描述以及EGL 针对便携设备的本地视窗系统规范。
OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。
OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程3D图形算法。
说白了,就是OpenGL的子集、可以应用于ES上。
OpenVG是针对诸如Flash和SVG的矢量图形算法库提供底层硬件加速界面的免授权费、跨平台应用程序接口API。
OpenVG现仍处于发展阶段,其初始目标主要面向需要高质量矢量图形算法加速技术的便携手持设备,用以在小屏幕设备上实现动人心弦的用户界面和文本显示效果,并支持硬件加速以在极低的处理器功率级别下实现流畅的交互性能。
(2)GLX、EGL:
GLX是OpenGL Extension to the X Window System的缩写。
它作为x的扩展,是x协议和X server的一部分,已经包含在X server的代码中了。
GLX提供了x window system使用的OpenGL接口,允许通过x调用OpenGL库。
OpenGL 在使用时,需要与一个实际的窗口系统关联起来。
在不同平台上有不同的机制以关联窗口系统,在Windows上是WGL,在Linux 上是GLX,在Apple OS上是AGL等。
EGL则是OpenGL ES在嵌入式平台上(WGL,GLX,AGL)的等价物。
EGL假设OS会提供窗口系统,但EGL与平台无关,并不局限于任何特定的窗口系统,所有用到本地窗口系统的地方都用屏蔽指针来处理。
我觉得这就是它易于移植的关键。
(3)其它:
Mesa 3D是OpenGL的一个开源本的实现,支持3D硬件加速,和DRI都使用它作为OpenGL驱动。
DRI是Direct Rendering Infrastructure的缩写。
DRI是一个安全且有效率的直接对显示硬件存取的方法。
它包含对X server,一些client函数库、以及对内核的变更。
DRI的一个主要目的就是提供高效能的OpenGL支持。
详细:/xwindow/dri_intro.html
XGL项目由Novell发起,是一个X server架构,其设计意图在于通过OpenGL驱动充分发挥最新显卡的功能,支持所有X、OpenGL和XVideo的硬件加速。
该项目最初于2006年1月在中发布,但随后由于AIGLX的出现,在2008年1月被抛弃。
Xgl可以使用Xglx和Xegl作为后台的server。
作为其衍生品,compiz和Xgl是完全兼容的。
AIGLX是Accelerated Indirect GLX的缩写。
该项目由Red Hat和Fedora社区发起。
此处Indirect的含义在于:client端应用程序的OpenGL命令首先送给X server,再通过X server 调用显卡驱动层的OpenGL接口,这里X协议走的是GLX。
Xgl则是另外一种方式:建立一个OpenGL窗口,由OpenGL库直接调用显卡驱动。
7.1开始,已经加入了AIGLX。
Xglx是Xgl框架的一个后台server,但他仍然需要一个现有的x server,Xglx通过x server 的GLX创建OpenGL窗口,然后使用它,类似于Xnest;同时,Xglx还对x server做一些使用OpenGL显示和绘图的初始化操作。
尽管使用另外一个x server显得多余,Xglx却避免了和不同的图形硬件直接打交道。
Xegl是Xgl框架的另一个后台server,继承了Xglx中绘图相关的代码,但它对OpenGL 环境的初始化部分,调用的是EGL接口(而非Xglx使用的GLX)。
由于一些硬件的闭源驱动不提供支持EGL的接口,Xegl的开发有些停滞。
阿。