[已读]OpenGL、OpenGL ES、OpenVG、GLX、EGL简介

合集下载

glew,glee与gl,glu,glut,glx,glext的区别和关系

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使用简介

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 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和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简单介绍 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 简介二、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课件

十三讲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是网络透明的,在客户机/服务器体系结构中,允许 本地或远程调用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环境中。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的开发有些停滞。

阿。

相关文档
最新文档