搜档网
当前位置:搜档网 › 基于OpenGL的海面场景模拟

基于OpenGL的海面场景模拟

基于OpenGL的海面场景模拟
基于OpenGL的海面场景模拟

OpenGL应用编程接口文档

OpenGL 1 OpenGL 特点 1.建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数。 2.变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法有利于减少算法的运行时间,提高三维图形的显示速度。 3.颜色模式设置:OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Inde x)。 4.光照和材质设置:OpenGL光有辐射光(Emitted Light)、环境光(Ambient Ligh t)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。 5.纹理映射(Texture Mapping)。利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。 6.位图显示和图象增强图象功能除了基本的拷贝和像素读写外,还提供融合(Blendi ng)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。以上三条可使被仿真物更具真实感,增强图形显示的效果。 7.双缓存动画(Double Buffering)双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。 此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。从而实现了消隐算法。 2 OpenGL 工作机制 ?如何在OpenGL中表示3D物体 ?OpenGL 的渲染流水线 ?OpenGL中函数的命名规则 2.1 OpenGL中3D物体的表示 在3D空间中,场景是物体或模型的集合。在3D图形渲染中,所有的物体都是由三角形构成的。这是因为一个三角形可以表示一个平面,而3D物体就是由一个或多个平面构成的。比如下图表示了一个非常复杂的3D地形,它们也不过是由许许多多三角形表示的。

使用OpenGL画球体

(计算机图形学)实验报告 实验名称使用OpenGL画球体 实验时间年月日 专业班级学号姓名 成绩教师评语: 一、实验目的 1、了解并学习open GL的编程; 2、掌握在open GL生成图形的基本思想和基本步骤; 3、使用open GL具体生成简单的三维立体图形; 二、实验原理 简单的说,该实验就是使用数学函数与OpenGL库中的函数实现图形的生成,比如生成球的函数为x=sin(thetar)*cos(phir); y=cos(thetar)*cos(phir); z=sin(phir); 之后在对thetar的值进行定义,使其在某一范围内变化。然后面的集合就生成了我们所需要的球体,但是该实验没有进行光照和材质的设定,所以看起来并不像一个立体的球体形状。其间还需要对OpenGL的编程原理和其所包含的库比较了解。 OpenGL核心库:Windows: OpenGL32。大多数Unix/Linux系统:GL库(libGL.a) OpenGL实用库(Utility Library, GLU):利用OpenGL核心库提供一些功能,从而避免重复编写代码,与窗口系统的连接 OpenGL实用工具库(OpenGL Utility ToolkitLibrary, GLUT),提供所有窗口系统的共同功能,打开窗口,从鼠标和键盘获取输入,弹出菜单,事件驱动。代码可以在平台间移植,但是GLUT缺乏在特定平台上优秀工具包所具有的功能滚动条。 函数的功能glVertex3f(x, y, z),属于GL库参数个数,x, y, z为float。在glVertex3fv(p)中注意每部分的大小写,p为指向float的指针。 绝大多数常数采用#define在头文件gl.h, glu.h和glut.h中定义。注意#include 会自动包含其它两个头文件。例如:glBegin(GL_POLYGON);glClear(GL_COLOR_BUFFER_BIT);在头文件中也定义了OpenGL数据类型:GLfloat, GLdouble, … 关于最初建立文件的步骤 创建一个win32 console application类型的workspace文件,创建一个C/C++

OpenGL完全教程 第一章 初始化OpenGL

OpenGL完全教程 第一章 初始化OpenGL 作者:何咏 日期:2006-2-3 20:47:09 点击:3373 如需转载本文,请声明作者及出处。 第一章初始化OpenGL 无论是什么东西,要使用它,就必须对它进行初始化。如果你之前使用过GDI,你应该也多多少少了解到GDI 在绘制图形之前要为之创建渲染环境。OpenGL也一样。本章给出的代码,大家可以不必理解其中的具体意义,反正以后每次初始化是使用这个代码即可。 首先,在一个新的应用程序中,我们需要添加对OpenGL库的引用。Delphi已经为我们写好了OpenGL的头文件,因此我们只须直接在单元的uses中添加OpenGL即可: ... uses Windows, Graphics, OpenGL, ... ... 在创建窗口时,应添加如下代码: procedure Form1.Create(Sender:TObject); var DC: HDC; HRC :HGLRC ; pfd:TPIXELFORMATDESCRIPTOR; pixelFormat:integer; begin DC := GetDC(Handle); With pfd do begin nSize:=sizeof(TPIXELFORMATDESCRIPTOR); // size nVersion:=1; // version dwFlags:=PFD_SUPPORT_OPENGL or PFD_DRAW_to_WINDOW or PFD_DOUBLEBUFFER; // support double-buffering iPixelType:=PFD_TYPE_RGBA; // color type cColorBits:=24; // preferred color depth cRedBits:=0; cRedShift:=0; // color bits (ignored) cGreenBits:=0; cGreenShift:=0; cBlueBits:=0; cBlueShift:=0; cAlphaBits:=0; cAlphaShift:=0; // no alpha buffer

使用OpenGL编程实现Bresenham直线扫描转换算法

实验要求: 学习Visual C++ 6.0 集成编程环境的使用,OpenGL编程环境的设置,OpenGL语法及基本函数的使用等基础知识,并编程实现Bresenham直线扫描转换算法,得出相应的输出图形。 源程序: #include void k1() //0

glFlush(); } void k2() //k>1 { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0,1.0,0.0); glBegin(GL_POINTS); GLint x1=0,y1=0,x2=200,y2=400; GLint x=x1,y=y1; GLint dx=x2-x1,dy=y2-y1,dT=2*(dx-dy),dS=2*dx; GLint d=2*dx-dy; glV ertex2i(x,y); while(y

_OpenGL入门教程

OpenGL入门教程 1.第一课: 说起编程作图,大概还有很多人想起TC的#include 吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。 OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。 1、与C语言紧密结合。 OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。 2、强大的可移植性。 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。 3、高性能的图形渲染。 OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。 总之,OpenGL是一个很NB的图形软件接口。至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。 OpenGL官方网站(英文) https://www.sodocs.net/doc/8d13789449.html, 下面我将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL 的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) https://www.sodocs.net/doc/8d13789449.html,/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: https://www.sodocs.net/doc/8d13789449.html,/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件

OPENGL VAO VBO使用步骤

使用VAO VBO的步骤 1、产生VAO void glGenVertexArrays(GLsizei n, GLuint*arrays); n:要产生的VAO对象的数量。 arrays:存放产生的VAO对象的名称。 2、绑定VAO void glBindVertexArray(GLuint array); array:要绑定的顶点数组的名字。 3、产生VBOs void glGenBuffers(GLsizei n, GLuint*buffers); 产生缓冲区对象的名称。 参数含义和glGenVertexArrays类似。 4、绑定VBOs void glBindBuffer(GLenum target, GLuint buffer); 绑定一个缓冲区对象。

target可能取值是:GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER,GL_PIXEL_PACK_BUFFER,or GL_PIXEL_UNPACK_BUFFER. 当进行绑定之后,以前的绑定就失效了。 5、给VBO分配数据: void glBufferData(GLenum target, GLsizeiptr size, const GLvoid*data, GLenum usage); target可能取值为:GL_ARRAY_BUFFER(表示顶点数据), GL_ELEMENT_ARRAY_BUFFER(表示索引数 据),GL_PIXEL_PACK_BUFFER(表示从OpenGL获取的的像素数据),or GL_PIXEL_UNPACK_BUFFER(表示传递给OpenGL的像素数据). 参数含义: size:缓冲区对象字节数 data:指针:指向用于拷贝到缓冲区对象的数据。或者是NULL,表示暂时不分配数据。 6、定义存放顶点属性数据的数组: 首先需要启用VAO中对应的顶点属性数组: void glEnableVertexAttribArray(GLuint index); index:指定了需要启用的顶点属性数组的索引

OpenGL入门C++教程

OpenGL入门c++教程 1.第一课: 说起编程作图,大概还有很多人想起TC的#include 吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。 OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。 1、与C语言紧密结合。 OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。 2、强大的可移植性。 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。 3、高性能的图形渲染。 OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。 总之,OpenGL是一个很NB的图形软件接口。至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。 OpenGL官方网站(英文) https://www.sodocs.net/doc/8d13789449.html, 下面我将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL 的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) https://www.sodocs.net/doc/8d13789449.html,/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: https://www.sodocs.net/doc/8d13789449.html,/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。

OpenGL完整安装手册

OpenGL的完整安装手册要对得起1个财富值 说起编程作图,大概还有很多人想起TC的#include 吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。 OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。 1、与C语言紧密结合。 OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL 是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。 2、强大的可移植性。 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关。 3、高性能的图形渲染。 OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。 总之,OpenGL是一个很NB的图形软件接口。至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。 OpenGL官方网站(英文) https://www.sodocs.net/doc/8d13789449.html, 下面将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。 我选择Visual Studio 2008和VC6++作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。Windows环境下的GLUT下载地址:(大小约为150k) https://www.sodocs.net/doc/8d13789449.html,/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: https://www.sodocs.net/doc/8d13789449.html,/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹 如果是VC++6,则应该将glut.h复制在“D:\Program Files\MicrosoftVisualStudio\VC98 \Include\GL文件夹”)。

OpenGL的常用接口-2016-10-13

OPenGL ES常用API: glClearColor( 0.f, 0.f, 0.f, 1.f ); // 设置模式窗口的背景颜色,颜色采用的是RGBA值 glViewport( 0, 0, iScreenWidth, iScreenHeight );//设置视口的大小以及位置, 视口:也就是图形最终显示到屏幕的区域,前两个参数是视口的位置,后两个参数是视口的宽和长。 glMatrixMode( GL_PROJECTION ); // 设置矩阵模式为投影矩阵,之后的变换将影响投影矩阵。 OpenGL属于状态管理机制,比如:设置当前矩阵为投影矩阵过后,在没有重新调用glMatrixMode()之前,任何矩阵变换都将影响投影矩阵。 glFrustumf( -1.f, 1.f, -1.f, 1.f, 3.f, 1000.f ); //该函数创建一个透视投影矩阵,其中的参数定义了视景体,可以理解为用相机的时候,眼睛的可视范围。就像一个三棱锥,参数1、3、5 和2、4、6分别定义了近裁面和远裁面的左下和右上的(x、y、z)坐标。 OpenGL 投影有两种模式,一种是透视投影,也就是通过上述函数创建一个三棱锥视景体,这种模式下观看三维模型是近大远小。另外一种模式是正交模式,视景体是一个平行六面体,离相机的距离不会影响物体的大小。 glMatrixMode( GL_MODELVIEW ); //设置当前矩阵为模式矩阵

glVertexpointer( 3, GL_BYTE, 0, vertices ); //指定从哪里存取空间坐标数据 OpenGL 一共有8个这样的函数可以存取不同的坐标数据: glColorPointer(); glIndexPointer(); glNormalPointer(); glTexCoordPointer();等 glShadeModel( GL_FLAT ); //设置阴影模式为GL_FLAT,默认是GL_SMOOTH 阴影模式一共有两种,GL_SMOOTH和GL_FLAT,在有关照的情况下会有不同的效果。 glClear( GL_COLOR_BUFFER_BIT ); //清除颜色缓存 glLoadIdentity(); //设置当前矩阵为单位矩阵 OpenGL里面的位置大小都是用矩阵来表示的,比如:glScanf()放大或缩小,其实就是用一个矩阵去乘当前的矩阵,为了使变换不受当前矩阵的影响,所以把当前矩阵设置为单位矩阵。 glTranslatex(0, 0, -100 << 16 ); //将坐标向z轴负方向移动100 glColor4f( 1.f, 0.f, 0.f, 1.f ); 设置颜色为红色

OpenGL使用手册.

OpenGL函数使用手册 (一)OpenGL函数库 格式: <库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有 gl、glu、aux、glut、wgl、glx、agl 等等, 1,核心函数库主要可以分为以下几类函数: (1) 绘制基本的几何图元函数。如:glBegain(). (2) 矩阵操作、几何变换和投影变换的函数。如:矩阵入栈 glPushMatrix(),还有矩阵的出栈、转载、相乘,此外还有 几何变换函数glTranslate*(),投影变换函数glOrtho()和 视口变换函数glViewport()等等。 (3) 颜色、光照和材质函数。 (4) 显示列表函数,主要有创建、结束、生成、删除和调用 显示列表的函数glNewList()、glEndList()、 glGenLists()、glDeleteLists()和glCallList()。(5) 纹理映射函数,主要有一维和二维纹理函数,设置纹理 参数、纹理环境和纹理坐标的函数glTexParameter*()、 glTexEnv*()和glTetCoord*()等。 (6) 特殊效果函数。 (7) 选着和反馈函数。 (8) 曲线与曲面的绘制函数。 (9) 状态设置与查询函数。 (10) 光栅化、像素函数。 2,OpenGL实用库(The OpenGL Utility Library)(GLU) 包含有43个函数,函数名的前缀名为glu. (1) 辅助纹理贴图函数。 (2) 坐标转换和投影变换函数。 (3) 多边形镶嵌工具。 (4) 二次曲面绘制工具。

(5) 非均匀有理B样条绘制工具。 (6) 错误反馈工具,获取出错信息的字符串gluErrorString() 3,OpenGL辅助库 包含有31个函数,函数名前缀名为aux 这部分函数提供窗口管理、输入输出处理以及绘制一些简单的三维物体。 4,OpenGL工具库(OpenGL Utility Toolkit) 包含大约30多个函数,函数前缀名为glut,此函数由glut.dll来负责解释执行。 (1) 窗口操作函数。窗口初始化、窗口大小、窗口位置等函 数glutInit() glutInitDisplayMode()、glutInitWindowSize() glutInitWindowPosition()等。 (2) 回调函数。响应刷新消息、键盘消息、鼠标消息、定时 器函数等,GlutDisplayFunc()、glutPostRedisplay()、 glutReshapeFunc()、glutTimerFunc()、 glutKeyboardFunc()、 glutMouseFunc()。 (3) 创建复杂的三维物体。这些和aux库函数功能相同。如创 建球体glutWireSphere(). (4) 函数菜单 (5) 程序运行函数 glutAttachMenu() 5,16个WGL函数,专门用于OpenGL和Windows窗口系统的联接,其前缀名为wgl。 (1) 绘制上下文函数。 wglCreateContext()、 wglDeleteContext()、wglGetCurrentContent()、 wglGetCurrentDC() wglDeleteContent()等。 (2) 文字和文本处理函数。wglUseFontBitmaps()、 wglUseFontOutlines()。 (3) 覆盖层、地层和主平面处理函数。wglCopyContext()、 wglCreateLayerPlane()、wglDescribeLayerPlane()、wglReakizeLayerPlatte()等。 (4) 其他函数。wglShareLists()、wglGetProcAddress()等。

OpenGL完全教程 第三章 使用OpenGL绘图

OpenGL完全教程 第三章 使用OpenGL绘图 作者:何咏 日期:2006-2-3 20:50:47 点击:3959 如需转载本文,请声明作者及出处。 第三章 使用OpenGL绘图 从本章开始,我们将正式开始使用OpenGL来绘制图形。学习本章内容,你将发现使用计算机绘制3D图形原来如此容易。你将了解: ?设置可视区域并创建投影 ?在3D空间中绘制基本图元 ?使用深度测试 ?使用背面剔除提高渲染速度 ?将绘制的图形输出到屏幕上 3.1 绘制之前的必要工作 从章节2.1中,你应该了解到,在使用OpenGL绘图之前,我们应该决定使用何种投影方式,设置渲染后的图形应出现在窗口的位置等等。本节中,我们将了解这些步骤的具体实现方法。 3.1.1 设置窗体的视见区域 (View Port) 在OpenGL初始化完成之后,我们应该进行一些视图设置。首先是设定视见区域,即告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。我们调用glViewPort函数来决定视见区域: procedure glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei); 其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height指定了视见区域的宽度和高度。注意OpenGL使用的窗口坐标和WindowsGDI使用的窗口坐标是不一样的。图3.1-1表示了在WindowsGDI中的窗口坐标,而图3.1-2则是OpenGL所定义的窗口坐标。

图3.1-1 WindowsGDI下的窗体坐标图3.1-2 OpenGL所定义的窗体坐标 例如,要设置如图3.1-3中的视见区域,我们应该调用函数: glViewPort(100,100,Width,Height); 图3.1-3 3.1.2 创建投影变换 接下来,我们要设置一种投影变换。投影变换分为平行投影和透视投影。平行投影中,物体无论远近,大小都是一样的,而透视投影则相反。因此,透视投影更像是我们眼睛所看到的景物。但在某些特殊的时候, 平行投影还是有它的作用的,比如3D建摸程序。图3.1-4是甲烷分子模型在平行投影下的渲染结果,而图3.1-5是在透视投影下的渲染结果。可以看到,平行投影下,四个氢原子(绿色的球体)大小是一样的,而在透视投影下,远处的氢原子要小一些。

使用 OpenGL 来开发模型编辑器

1 前言: 在计算机图形图像处理中,由于OpenGL库带来的便利,使得其取得了越来越广泛的应用.本文旨在通过一个小的应用实例,介绍了OpenGL的基本编程思路, 希望这些知识和经验能有助于OpenGL的推广。 2 OpenGL简介: OpenGL(Open Graphics Library)是独立于操作系统和硬件环境的三维图形软件库. 由于其开放性和高度的可重用性,目前已成为业界标准. 很多优秀的软件都是以它为基础开发出来的,象著名的产品有动画制作软件3DMAX ,Soft Image,VR软件和GIS软件等等。 OpenGL认可开发人员对真实世界中的二维图形和三维几何物体的描述,而且将这些几 何形体绘制到三维图形加速卡的帧缓存中,可用一个简单的工作流程图来描述OpenGL的工作原理,如图2所示。 图像像素像素操作光栅化评价器顶点操作几何物体顶点显示列表纹理存储器基本操作帧缓存器 图2 OpenGL工作流程 2.1 OpenGL的主要功能有: 1)几何建模:在OpenGL中提供了绘制点,线,多边形等基本形体的函数,还提供了绘制复杂三维曲线,曲面(如Bezier,Nurbs等)和三维形体(如球,锥体和多面体等)的函数.由于OpenGL是以顶点为图元,由点构成线,由线及其拓扑结构构成多边形.所以应用这些建模函数,可构造出几乎所有的三维模型。 2)坐标变换:包括取景变换,模型变换,投影变换和视区变换。 3)颜色模式设置:RGBA模式和颜色索引模式。

4)光照和材质设置:可设置四种光,即辐射光,环境光,镜面光和漫反射光.材质用模型表面的反射特性表示。 5)图像功能:提供像素拷贝和读写操作的函数,还提供了反走样,融合和雾化等,以增强图像效果 6)纹理映射:OpenGL的纹理映射功能可十分逼真地再现物体表面的细节。 7)实时动画:利用OpenGL的双缓存(Double Buffer)技术可获得平滑逼真的动画效果。 8)交互技术:方便的三维图形交互接口(选择,拾取,反馈),可进行人机交互操作。 2.2 Win32下OpenGL的运行机制: 由于OpenGL的作用机制是客户(Client)服务器(Server)机制,由客户(用OpenGL 绘制图形的应用程序)向服务器(OpenGL内核)发送OpenGL命令,服务器则负责解释这些命令。在多数情况下,客户和服务器在同一机器上运行,当然,也可以在网络环境下使用,所以OpenGL具有网络透明性,与在Win32下的图形设备接口(GDI)把图形函数库封装在动态的连接库GDI32.DLL内一样,OpenGL的图形库也被封装在一个动态连接库opengl32.dll 内。从客户应用程序发布的对OpenGL函数的调用首先被opengl32.dll处理,然后传送给服务器后,被Winsrv.dll进一步处理,再传给Win32设备驱动接口(DDI),最后把处理过的图形命令送给视频显示驱动程序。图2.2显示了整个处理过程。 客户应用程序 OpenGL DLL Win32.DDI 视频驱动程序OpenGL命令 图2.2 OpenGL在Windows 环境下的运行机制。2.3 OpenGL函数及结构

在PYTHON环境中使用OPENGL

我使用的编译环境是vs2010,在微软下载python就可以在2010环境下使用python了.当然,机子上需要安装python的解释器. 希望在python中使用opengl,必须下载opengl在python上的插件库,可以百度一下pyopengl,很容易就可以找到下载.安装后进入vs2010 创建一个python工程,会包含一个python的文件,在文件中填写代码(注意包含库的大小写) from OpenGL.GL import* from OpenGL.GLU import* from OpenGL.GLUT import* def display(): glClearColor(0,0,0,0) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMaterialfv(GL_FRONT, GL_AMBIENT, [0.1745, 0.0, 0.1, 0.0]) glMaterialfv(GL_FRONT, GL_DIFFUSE, [0.1, 0.0, 0.6, 0.0]) glMaterialfv(GL_FRONT, GL_SPECULAR, [0.7, 0.6, 0.8, 0.0]) glMaterialf(GL_FRONT, GL_SHININESS, 80) glutSolidTeapot(0.5) glutSwapBuffers() glutInit("hello") glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH) glutInitWindowSize(400,400) glutCreateWindow("hello "); glutDisplayFunc(display) glutMainLoop() 运行一下该脚步试试吧,如果得到如图所示的页面,说明你已经可以在该环境下使用opengl了

浅谈OpenGL的应用

浅谈OpenGL的应用 摘要: 本文介绍了系统仿真的概念和OGL在建立仿真模型的功能特点,及其在系统仿真中的应用,并根据课题开发的仿真系统,很好的说明了用OpenGL 建立的仿真模型具有建模方便、易于控制等优点。 关键词: OpenGL,三维模型,系统仿真 Abstract: this paper introduces the concept of system simulation and OGL in establishing the function characteristic of the simulation model, and the simulation system, and the application of the simulation system based on subject development, very good that the established with OpenGL simulation model is convenient, easy to control the modeling, etc. Keywords: OpenGL, 3 d model, the system simulation 1、引言 系统仿真是近30 年在系统科学、系统识别、控制理论、计算技术和控制工程等多种技术发展基础上发展起来的一门综合性很强的新兴技术。计算机系统仿真就是,以计算机为工具,以相似原理、仿真技术、系统技术及其应用领域有关的专业技术为基础,利用系统模型对实际的或设想的系统进行试验研究的一门综合性技术。从计算机系统仿真的定义可以看出,计算机系统仿真包含了三个方面的信息(三要素):系统、模型、计算机,而联系着它们三者之间的基本活动是:系统模型建立、仿真模型建立、仿真试验。 “系统”是指被研究的对象,任何事物都不是孤立地存在着的。因此,仿真研究的对象也不可避免地与其周围的环境之间存在着相互联系。建立系统模型就是要把待研究的系统从周围的环境中界定出来,并把它描述成数学模型。建立被研究系统的数学模型,就是为了能用计算机语言实现。从数学模型到仿真模型的转换过程,就是仿真模型建立。只有经过转换后的仿真模型才能为计算机识别并运行。综上所述,建立仿真模型是系统仿真的关键一环,选择什么工具来建模也显的由为重要。在这里就我们的课题,工业机器人动态仿真选用的工具OpenGL来探讨。 2、OpenGL 的功能特点 OpenGL 是SGI 公司推出的三维图形库(GL),它表现突出,易于使用而且功能强大。利用GL开发出来的三维应用软件颇受许多专业技术人员的喜爱,随着计算机技术的继续发展,GL 已经进一步发展成为OpenGL,OpenGL 已被认为是高性能图形和交互式视景处理的标准。OpenGL最大的特点首先是与硬件无关,可以在不同的平台上得于实现,用OpenGL编制的程序,可以随心所欲的

OpenGL纹理贴图简单例子

【代码】 #include #include #include staticdouble X = 0; staticdouble Y = 0; staticdouble Z = 7; // 定义函数指针,在Windows环境下使用OpenGL扩展PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL; PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL; // 纹理存储数组 static GLubyte T0[64][64][4]; static GLubyte T1[64][64][4]; static GLubyte T2[64][64][4]; // 纹理名字 static GLuint Tname0; static GLuint Tname1; static GLuint Tname2; // 创建纹理 void makeImages() { int i, j, c; // 第一个纹理,渐变绿色,*64 for (i = 0; i < 64; i++) { for (j = 0; j < 64; j++) { T0[i][j][0] = (GLubyte) 0; T0[i][j][1] = (GLubyte) i * 5 + j * 5; T0[i][j][2] = (GLubyte) 0; T0[i][j][3] = (GLubyte) 255; } } // 第二个纹理,黑白相间横条,*64 for (i = 0; i < 64; i++) { for (j = 0; j < 64; j++) { if (i % 16 < 8) c = 255;

使用opengl程序绘制实线、虚线和点划线

GIS专业实验报告(计算机图形学) 实验5 使用opengl程序绘制实线、虚线和点划线。 姓名系别班级学号实验日期指导教师实验成绩 殷悦地信10.4班2010203482 2013.6.12 肖燕 一.实验目的及要求 使用opengl程序绘制实线、虚线和点划线。。 二.理论基础 1.显示列表: 显示列表是一组OpenGL函数调用,它被存储起来供以后执行。这样就可以将基本图素的OpenGL函数实现组织起来,指定名称,构成图段,所构成的图段可以再以后需要的地方显示出来。 创建显示列表方式如下: glNewList(listID,listMode); glutSoildCube(2.0); …… glEndList(); 2.显示列表的调用: 在显示列表创建之后,可以使用函数 Void glCallList(GLuint listID); 调用显示列表,其中参数listID是已定义的显示列表标识。 3.OpenGL划线函数: glBegin(GL_LINES); glVertex2i(坐标1x,坐标1y); glVertex2i(坐标2x,坐标2y); glEnd(); GL_LINES:直线模式 GL_LINE_STIPPLE:虚线模式 三.算法设计与分析 程序源码如下: #include #include GLuint Line; void Initial(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); Line = glGenLists(1); glNewList(Line, GL_COMPILE); /************实线***************/ glColor3f(0.0, 1.0, 0.0); glLineWidth(3); glTranslatef(-20.0, 20.0, 0.0); glBegin(GL_LINES); //实线 glVertex2i(-10,5); glVertex2i(40,5); glEnd();

windows 下使用OPENGL开发

windows 下使用OPENGL开发 1,初始化: 1.1 根据hwnd 取得设备DC HDC dc = ::GetDC(hWnd); PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), //数据结构大小1, //数据结构版本号PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA,//缓冲区可以在窗口上绘图,支持OpenGL绘图24, //深度颜色缓冲区位数0,0,0,0,0,0, //忽略颜色位0,0,0, //没有非透明度缓存,忽略移位位,无累加缓存0,0,0,0, //忽略累加位32, //32位深度缓存0, //无模板缓存0, //无辅助缓存PFD_MAIN_PLANE, //主层0, //保留0,0,0, //忽略层,可见性和损毁掩膜}; //得到当前正在使用的绘图设备句柄int nPixelFormat = ::ChoosePixelFormat(dc, &pfd); //将当前绘图设备的像素格式设为nPixelFormat ::SetPixelFormat(dc, nPixelFormat, &pfd); //生成open设备上下文openglRC = wglCreateContext(dc); //生成纹理对象glGenTextures(1, &mTextureID);

glBindTexture(GL_TEXTURE_2D, mTextureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);//对于贴了纹理的模型,可以使用glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,XX)来指定纹//理贴图和材质混合的方式,从而产生特定的绘制效果如果target是GL_TEXTURE_ENV,且pname是GL_TEXTURE_ENV_MODE那么param必须是GL_REPLACE,GL_DECAL,GL_MODULATE; GL_ADD, GL_BLEND,GL_COMBINE颜色组合操作类型之一,或者GL_TEXTURE_ENV_COLOR直接提供一个色调进行组合颜色。OpenGL提供了3种不同的贴图模式:GL_MODULATE,GL_DECAL和GL_BLEND。默认情况下,贴图模式是GL_MODULATE,在这种模式下,OpenGL会根据当前的光照系统调整物体的色彩和明暗。第二种模式是GL_DECAL,在这种模式下所有的光照效果都是无效的,OpenGL将仅依据纹理贴图来绘制物体的表面。最后是GL_BLEND,这种模式允许我们使用混合纹理。在这种模式下,我们可以把当前纹理同一个颜色混合而得到一个新的纹理。我们可以调用glTexEnvi函数来设置当前贴图模式:

相关主题