OpenGL简介资料

合集下载

opengl简介及实例

opengl简介及实例

C# 实例OpenGL是图形硬件的一个软件接口,是一种快速、高质量的3D图形软件。

它提供了近120个绘制点、线点多边形等3D图形的命令,可以完成绘制物体、变换、光照处理、着色、反走样、融合、雾化、位图和图像、纹理映射、动画等基本操作,通过把这一系列基本操作进行组合,可以构造更复杂的3D物体和描绘丰富多彩、千变万化的客观世界。

C#是以运行库为基础的一种编程语言,它几乎集中了所有关于软件开发和软件工程研究的最新成果,如面向对象、类型安全等,并被寄希望成为微软发布的用于企业编写基于COM+和视窗系统的程序语言中的最好的一种[2]。

与C++相比,C#的语法更加简洁,调试更加容易,且应用程序开发更加快速。

把C#和OpenGL结合起来开发3D应用程序和软件,将显著提高开发效率。

在C#中,程序间的依赖项通过符号而不是文本来控制,因而不使用头文件,而且opengl32.dll以及opengl32.lib等文件也不能像在C++中那样进行部署和引用,所以,无法直接使用OpenGL所提供的图形库。

在C#中通过调用OpenGL 动态链接库文件:csgl.dll和csgl.native.dll实现OpenGL所提供的强大的图形功能。

这2个文件可以从网页上获取。

csgl.dll中定义了4个名称空间,即CsGL,CsGL.OpenGL,CsGL.Pointers,CsGL.Util,其中,CsGL.OpenGL定义的4个类OpenGL、GL、GLU、GLUT中封装了几乎所有的OpenGL函数、用户库函数、辅助库函数和实用库函数及常量;类OpenGLControl中定义了OpenGL场景绘制函数,如场景的初始化、场景的绘制函数等;类OpenGLContext中定义了OpenGL环境控制命令,如像素格式、调色板的创建等命令。

CsGL.Util定义了键盘、鼠标事件及异常处理等。

为了能够使用这2个文件,先将这2个文件拷贝到系统文件夹%systemroot%╲system32中,然后在项目的属性页对话框中将"引用路径"设置为系统文件夹%systemroot%╲system32,这样C#就可以找到运行/调试应用程序所需要的库文件。

opengl学习必备

opengl学习必备

第一章 OpenGL 概览§1.1OpenGL 是什么 1. OpenGL 是一个通用共享的开放式三维图形标准2. OpenGL 是一个开放的针对于图形硬件的三维图形软件包,是图形硬件的软件接口3. OpenGL 是指令和函数的集合(从程序员的角度看),是一个优秀的专业化的 3D 的 API§1.2OpenGL 能作什么 1. 建模。

2. 变换 3. 颜色模式设置 4. 光照和材质设置 5. 纹理映射 6. 位图显示和图像增强 7. 双缓存动画§1.3OpenGL 函数语法 1) 所有 OpenGL 函数都以 gl 作为前,且词首字母大写(如glClearColor()函数); 2) OpenGL 中定义的常数都以 GL 开头,所有的字母都大写,且单词之间以下划线来分隔(例如 GL_COLOR_BUFFER_BIT); 3) OpenGL 命令(OpenGL 函数常被称为 OpenGL 命令)常常带有后。

如:glColor3f()和 glVertex3f()中的后 3f;后指示出该函数的参数的个数和类型,其中 3 表示该函数需要 3 个参数,f 表示参数为浮点型数值。

对于同一个功能函数,由于后的不同,可以有多种不同形式的函数(如:glVertex2i()、glVertex2f()、glVertex3f()、glVertex3d()、glVertex4f()、glVertex4fv()等)。

某些 OpenGL 函数可以接受多至 8 种不同的数据类型作为它们的参数。

表 1-1 列出了命令后的类型和相应的 OpenGL 的类型。

4) 有一些 OpenGL 函数的后面带有一个字母 v。

这表示该命令带有的是一个指向矢量(即数组)值的指针参数。

如:Glfloat color_array [] = { 1.0,1.0,1.0 }; glColor3fv(color_array); 以数组名 color_array 为参数,该命令等价于 glColor3f(1.0,1.0,1.0);后定义数据类型 C 语言类型 OpenGL 类型定义b 8 位整数 signed char GLbyte s 16 位整数 short GLshort i 32 位整数 long GLint, GLsizei f 32 位浮点数 float GLfloat, GLcampf d 64 位浮点数 double GLdouble, GLclampd ub 8 位无符号整数 unsigned char GLubyte, GLboolean us 16 位无符号整数 unsigned short GLushort ui 32 位无符号整数 unsigned long GLuint, GLenum, GLbitfield 表1-1命令后参数数据类型第 2 页OpenGL 程序设计讲稿中国地质大学(北京)地球物理与信息技术学院§1.4OpenGL 状态机制 1.2.OpenGL 是一个状态机。

OPENGL简介

OPENGL简介

OpenGL 的特点
从程序开发人员的角度来看,OpenGL是一组绘图命令 的API(Application Program Interface,应用程序接口)集合。 利用这些API能够方便地描述二维和三维几何物体,并 控制这些物体按某种方式绘制到显示缓冲区中。 OpenGL的API集提供了物体描述、平移、旋转、缩放、 光照、纹理、材质、象素、位图、文字、交互以及提 高显示性能等方面的功能,基本涵盖了开发二、三维 图形程序所需的各个方面。与一般的图形开发工具相 比,OpenGL具有以下几个突出特点: 应用广泛 跨平台性 高质量和高性能 出色的编程特性 网络透明性
OpenGL程序结构 ---------------------程序的基本结构
OpenGL程序的基本结构可分为三个部分:


第一部分是初始化部分。主要是设置一些OpenGL的状态开关,如颜色模式 (RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深 度检验,裁剪等等。这些状态一般都用函数glEnable(???), glDisable(???)来设置,??? 表示特定的状态。 第二部分设置观察坐标系下的取景模式和取景框位置大小。主要利用了三个函数:
函数void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏 幕窗口四个角上的坐标(以象素表示);
函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投 影),其取景体积是一个各面均为矩形的六面体; 函数void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景 体积是一个截头锥体。

OpenGL简介

OpenGL简介

OpenGL简介(),Open Graphics Library,开放图形库,是跨语⾔、跨平台的3D图形编程接⼝。

OpenGL使⽤客户端 - 服务器架构设计,应⽤程序为客户端,图形硬件设备为服务器。

客户端负责提交OpenGL命令,服务器执⾏这些命令并渲染出图像。

OpenGL是⼀个状态机,每个状态都有⼀个默认值。

开发者可以设置这些状态,然后让它们⼀直⽣效,直到再次修改它们。

例如:当前颜⾊就是⼀个状态变量,可以把其设置成红⾊,那么在此之后绘制的所有物体都会使⽤这种颜⾊,直到再次把当前颜⾊设置为其他颜⾊。

OpenGL的API可通过软件模拟实现,⾼效实现依赖于显⽰设备⼚商提供的硬件加速。

注:开源()是⼀个纯软件模拟实现的图形API,其代码兼容于OpenGL。

OpenGL规范⽬前由⾮盈利组织()的架构评审委员会(Architecture Review Board,ARB)维护。

ARB主要由操作系统⼚商(Apple Computer、Microsoft【2003.3已退出】等)、图形硬件⼚商(3Dlabs、SGI、NVIDIA、ATI Technologies、Intel等)、技术公司(Mozilla、Google等)和国际3D组织组成。

OpenGL是⼀个不断进化的API,在OpenGL1.2.1版本引⼊扩展(extension)的概念。

OpenGL新版本会定期由Khronos Group发布。

①增加新的扩展API(引⼊新函数和新常量)来增加新功能②放松或取消现有扩展API的限制来增强功能⼀个扩展由两部分组成:包含扩展函数原型的头⽂件和⼚商的设备驱动实现ARB扩展:标准扩展。

由架构评审委员ARB批准发布。

第⼀个ARB扩展是GL_ARB_multitexture(注:在OpenGL1.3中加⼊)。

所有ARB 扩展可从查询。

GL_ARB_multitexture扩展中新增了包含glActiveTextureARB、glClientActiveTextureARB、glMultiTexCoord*ARB函数,共34个。

OpenGL简介

OpenGL简介

Major Elements of a CG App
Recall the Viewing Pipeline …
Modeling
Generate vertices
Geometry Processing
Determine which objects appear and how
Rasterization
Байду номын сангаас
• DirectX
– 由Microsoft公司制定 – 专注娱乐应用 – 仅适用于windows平台
定位专业应用的OpenGL
• • • • • • • • IRISGL 1992年OpenGL1.0 1995年1.1 released 1999年Ferihant ? 2001年1.3 2002年1.4 2003年1.5 2005年2.0
}
OpenGL 初始化
设置OpenGL状态
void init( void ) { //屏幕清为黑色 glClearColor( 0.0, 0.0, 0.0, 1.0 ); //深度清为最远处(0.0-1.0) glClearDepth( 1.0 ); //打开光源0 glEnable( GL_LIGHT0 ); //打开光照 glEnable( GL_LIGHTING ); //深度测试 glEnable( GL_DEPTH_TEST ); }
Idle 回调函数
可用于动画制作,连续更新
glutIdleFunc( idle ); void idle( void ) { //时间变化 t += dt; glutPostRedisplay(); }
用户输入回调函数
• 处理键盘输入
glutKeyboardFunc( keyboard );

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

[已读]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库。

OpenGL 简介

OpenGL 简介

OpenGL使用
GLUT ( OpenGL Utility Toolkit ) 安装:在windows下通过 C/C++语言编写 GLUT 程序, 需要以下三个文件:
举例:在window XP下使用VC6安装GLUT
– – – –
– GLUT.H - 需要源代码中包含这个文件。通常情况下,这个文件 应该放在系统的包含目录下的 GL 文件夹中。 – GLUT.LIB (SGI windows版本) 以及 glut32.lib (微软版本) - 这 个文件必须被连接到程序中, 确保它放在 LIB 目录中。 – glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据所 使用的OpenGL选择一个,如果正在使用微软公司的版本,那么 必须选择 glut32.dll。应该把DLL放置在系统文件夹中。
OpenGL使用
void main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(50,100); glutInitWindowSize(400,300); glutCreateWindow(“An Example OpenGL Program.”); init(); glutDisplayFunc(lineSegment); glutMainLoop(); }
OpenGL使用
OpenGL使用
OpenGL使用
#include <GL/glut.h> void renderScene(void) { //绘制一个简单的二维的三角形 glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); //初始化glut glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); //设置窗口的模式-深度缓存,单缓存,颜色模型 glutInitWindowPosition(100,100); //设置窗口的位置 glutInitWindowSize(320,320); //设置窗口的大小 glutCreateWindow(“3D Tech- GLUT Tutorial”); //创建窗口并赋予title glutDisplayFunc(renderScene);//调用renderScene把绘制传送到窗口 glutMainLoop(); //进入循环等待

OPENGL简介

OPENGL简介

OPENGL 简 介
glBegin(GL_POLYGON); glBegin(GL_POLYGON); glNormal3fv(n0 glNormal3fv(n0); glVertex3fv(v0 glVertex3fv(v0); glNormal3fv(n1 glNormal3fv(n1); glVertex3fv(v1 glVertex3fv(v1); glNormal3fv(n2 glNormal3fv(n2); glVertex3fv(v2 glVertex3fv(v2); glNormal3fv(n3 glNormal3fv(n3); glVertex3fv(v3 glVertex3fv(v3); glE视图变换 3.视图变换 Void gluLookAt(GLdouble eyey,GLdouble eyez,GLdouble eyex,GLdouble centerx,GLdouble GLdouble
OPENGL 简 介
3. OpenGL程序基本结构 程序基本结构 初始化部分 主要是设置一些OpenGL的状态开关,如颜色模 的状态开关, 主要是设置一些 的状态开关 式的选择,是否作光照处理,深度检验,裁剪等等。 式的选择,是否作光照处理,深度检验,裁剪等等。 这些状态一般都用函数glEnable(???), glDisable(???) 这些状态一般都用函数 来设置, 表示特定的状态。 来设置,???表示特定的状态。 表示特定的状态
OPENGL 简 介
OpenGL基本几何结构 基本几何结构
1. 绘图准备 开始绘在制新图形前, 开始绘在制新图形前,计算机屏幕上可能已有一 些图形,OpenGL在显示缓冲区中存储了那些图形的 些图形, 在显示缓冲区中存储了那些图形的 绘图信息。绘制新的图形以前, 绘图信息。绘制新的图形以前,应当清除当前的这些 内容,以免影响绘图的效果。 内容,以免影响绘图的效果。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

建模 OpenGL图形库除了提供基本的点、线、多边 形的绘制函数外,还提供了复杂的三维物体 (球、锥、多面体、茶壶等)以及复杂曲线和 曲面(例如Bezier、Nurbs等曲线或曲面)绘 制函数。
OpenGL功能(二)

变换 OpenGL图形库的变换包括基本变换和投影变 换。基本变换有平移、旋转、缩放、镜像四种 变换,投影变换有平行投影(又称正交投影) 和透视投影两种变换。
OpenGL功能(三)

颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜 色索引(Color Index)。
OpenGL功能(四)

光照和材质设置 OpenGL光有辐射光(Emitted Light)、环 境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质 是用光反射率来表示。场景(Scene)中物体 最终反映到人眼的颜色是光的红绿蓝分量与材 质红绿蓝分量的反射率相乘后形成的颜色。
OpenGL功能(五)

纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真地表 达物体表面细节。
OpenGL功能(六)

位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提 供融合(Blending)、反走样(Antialiasing) 和雾(fog)的特殊图象效果处理。以上三条 可使被仿真物更具真实感,增强图形显示的效 果。
用OpenGL编写程序的基本模板
//主函数
int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); //设置显示模式(颜色、缓冲区等) glutCreateWindow(“A Simple Example”); //创建窗口 SetupRC(); //初始化渲染环境 glutDisplayFunc(RenderScene); //调用场景渲染函数 glutReshapeFunc(ChangeSize); //窗口发生变化 glutMainLoop(); //程序开始事件处理 }
走进OpenGL编程

术语

渲染:计算机根据模型创建图像。 模型:由几何图元(点、直线、多边形)构成的 物体。 将二维或三维的对象绘入一个帧缓冲区中。对象 被描述为一系列的顶点(用来定义几何图元)或 像素(用来定义图像)。O p e n G L对数据进行 几个步骤的处理从而将其转换成像素,这些像素 将在帧缓冲区中形成最终需要的图形。
OpenGL功能(七)


双缓存动画(Double Buffering) 双缓存即前台缓存和后台缓存,简而言之,后 台缓存计算场景、生成画面,前台缓存显示后 台缓存已画好的画面。 此外,利用OpenGL还能实现深度暗示 (Depth Cue)、运动模糊(Motion Blur) 等特殊效果。从而实现了消隐算法。
OpenGL特点



OpenGL是一个开放的三维图形软件包,它独 立于窗口系统和操作系统,以它为基础开发的 应用程序可以十分方便地在各种平台间移植。 OpenGL可以与Visual C++紧密接口,便于实 现有关计算和图形算法,可保证算法的正确性 和可靠性。 OpenGL使用简便,效率高。
OpenGL功能(一)
OpenGL函数库(三)


OpenGL辅助库(glaux.h) 提供一些特殊的函数,包括简单的窗口管理、 输入事件处理、某些复杂三维物体绘制等函数。 前缀是aux。 现在我们更多的采用glut库,不再使用glaux 库。
OpenGL函数库(四)

加载glut库



把过glut32.lib拷贝到VC的安装目录下的lib文 件夹中:如D:\Program Files\Microsoft Visual Studio\VC98\Lib 把glut.h拷贝到VC的安装目录下的Include\GL 文件夹中:如:D:\Program Files\Microsoft Visual Studio\VC98\Include\GL 把glut32.dll拷贝到C:\WINDOWS\system32
OpenGபைடு நூலகம்简介


是在SGI等多家世界闻名的计算机公司的倡导 下,以SGI的GL三维图形库为基础制定的一个 通用共享的开放式三维图形标准。 是图形硬件的一个软件接口。
OpenGL学习资源



《OpenGL红皮书》即《OpenGL编程指南》 《OpenGL蓝皮书》即《OpenGL参考手册》 《OpenGL超级宝典》 《OpenGL高级编程与可视化系统开发》(高 级编程篇) / /

OpenGL主要作用

OpenGL函数库(一)


OpenGL图形库(gl.h) 提供最基本的函数,函数前缀是gl。 OpenGL实用库(glu.h) 包含多个完成诸如设置视点矩阵和投影矩阵、 执行多边形网格化以及渲染曲面等任务的函数。
OpenGL函数库(二)

OpenGL实用工具包(glut.h) 这是一个独立于窗口系统的工具包,用于绕 开窗口系统API的复杂性,简化打开窗口、检 测输入等任务。 提供了一些用于创建复杂三维物体(如球体、 圆环和茶壶)的函数。 前缀是glut。
用OpenGL编写程序的基本模板


包含文件 #include<windows.h> //用到系统中的函数 #include<GL/gl.h> //基本函数 #include<GL/glu.h> //最常用函数 #include<GL/glut.h> //窗口操作 注意:glut.h确保了gl.h和glu.h被正确地包含进来,因 此同时包含这3个头文件是多余的。另外,glut.h在包含 gl.h和glu.h之前,确保任何与操作系统相关的内部宏都 被正确的定义。为使Glut程序是可移植的,应包含头文 件glut.h,但不显式地包含头文件gl.h和glu.h。
相关文档
最新文档