资源预览内容
第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
第9页 / 共24页
第10页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Lecture 3 OpenGL编程基础,OpenGL 概述,人们对计算机可视化技术的研究已经历了一个很长的历程,而且形成了许多可视化工具,其中SGI公司推出的GL三维图形库表现突出,易于使用而且功能强大。利用GL开发出来的三维应用软件颇受许多专业技术人员的喜爱,这些三维应用软件已涉及建筑、产品设计、医学、地球科学、流体力学等领域。 随着计算机技术的继续发展,GL已经进一步发展成为OpenGL,OpenGL已被认为是高性能图形和交互式视景处理的标准,OpenGL 概述,目前包括ATT公司UNIX软件实验室、IBM公司、DEC公司、SUN公司、HP公司、Microsoft公司和SGI公司在内的几家在计算机市场占领导地位的大公司都采用了OpenGL图形标准。 值得一提的是,由于Microsoft公司在Windows NT中提供OpenGL图形标准,OpenGL将在微机中广泛应用. 尤其是OpenGL三维图形加速卡和微机图形工作站的推出,人们可以在微机上实现三维图形应用,如CAD设计、仿真模拟、三维游戏等,从而更有机会、更方便地使用OpenGL及其应用软件来建立自己的三维图形世界。,现有图形标准,现有图形标准 GKS GKS3D PHIGS PHIGS OpenGL 没有一种三维工具软件包在交互式三维图形建模能力、外部设备管理以及编程方便程度上能够与OpenGL相比拟 .,OpenGL已成为事实上的图形标准,OpenGL经过对GL的进一步发展,实现了二维和三维的高级图形技术: 性能表现异常卓越。 功能全面包括建模、变换、光线处理、色彩处理、动画以及更先进的能力,如纹理影射、物体运动模糊等。 已成为事实上的图形标准。SGI公司、Microsoft公司、Intel公司、IBM公司、SUN公司、DEC公司(已由Compaq公司兼并)、HP公司、ATT公司的UNIX软件实验室 已加入OpenGL ARB 。,OpenGL的优点,OpenGL的优点: OpenGL由几百个指令或函数组成 OpenGL是网络透明的,允许本地和远程绘图 OpenGL作为一个性能优越的图形应用程序设计界面(API)能适应广泛的计算环境 ,OpenGL应用程序具有广泛的移植性,OpenGL提供直观的三维图形开发环境,长期以来,从事三维图形开发的技术人员都不得不在自己的程序中编写矩阵变换、外部设备访问等函数,这样为调制这些与自己的软件开发目标关系并不十分密切的函数费脑筋,而OpenGL正是提供一种直观的编程环境,它提供的一系列函数大大地简化了三维图形程序。 例如: . OpenGL提供一系列的三维图形单元供开发者调用 . OpenGL提供一系列的图形变换函数 . OpenGL提供一系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据手套等这种直观的三维图形开发环境体现了OpenGL的技术优势,这也是许多三维图形开发者热衷于OpenGL的缘由所在。,OpenGL基本理解,OpenGL是一个与硬件图形发生器的软件接口,它包括了100多个图形操作函数,开发者可以利用这些函数来构造景物模型、进行三维图形交互软件的开发。OpenGL中的模型绘制过程就多种多样,内容十分丰富,OpenGL提供了以下的对三维物体的绘制方式: . 网格线绘图方式(wireframe)-这种方式仅绘制三维物体的网格轮廓线 . 深度优先网格线绘图方式(depth_cued)-用网格线方式绘图,增加模拟人眼看物体一样,远处的物体比近处的物体要暗些 . 反走样网格线绘图方式(antialiased)-用网格线方式绘图,绘图时采用反走样技术以减少图形线条的参差不齐,OpenGL基本理解,. 平面消隐绘图方式(flat_shade)-对模型的隐藏面进行消隐,对模型的平面单元按光照程度进行着色但不进行光滑处理 . 光滑消隐绘图方式(smooth_shade)-对模型进行消隐按光照渲染着色的过程中再进行光滑处理,这种方式更接近于现实 . 加阴影和纹理的绘图方式(shadows,textures)-在模型表面贴上纹理甚至于加上光照阴影,使得三维景观象照片一样 . 运动模糊的绘图方式(motion-blured)-模拟物体运动时人眼观察所感觉的动感现象 . 大气环境效果(atmosphere-effects)-在三维景观中加入如雾等大气环境效果,使人身临其境 . 深度域效果(depth-of-effects)-类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊,OpenGL工作结构,OpenGL指令的解释模型是客户/服务器模式,OpenGL工作流程,OpenGL工作流程,用户指令从左侧进人OpenGL。指令分为两部分,一部分画指定的几何物体,另一部分则指示在不同的阶段怎样处理几何物体。许多指令很可能被排列在显示列表(Display List)中,在后续时间里对其进行处理。通过求值器(Evaluator)计算输入值的多项式函数来为画近似曲线和曲面等几何物体提供有效手段,然后由顶点描述的几何图元进行操作。 图像像素数据的处理包括像素、位图、影像等,它们经过像素操作之后直接进入光栅化阶段。 由于OpenGL的几何图元是由顶点描述的,这样可以便于逐点操作并按其数据装配成基元,然后经光栅化形成像素段(基片)。,OpenGL图形操作步骤,根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述(OpenGL中把点、线、多边形、图像和位图都作为基本图形单元)。 把景物模型放在三维空间中的合适的位置,并且设置视点(Viewpoint)以观察所感兴趣的景观。 计算模型中所有物体的色彩,色彩将根据应用要求来确定,同时确定光照条件、纹理粘贴方式等。 把景物模型的数学描述及其色彩信息转换至计算机屏幕上的像素中,这个过程也就是光栅化(Rasterization)。,OpenGL的组成,(1)OpenGL核心库 OpenGL核心库中的函数均以“gl”关键字为前缀。包括115个不同的三维操作函数。提供基本的绘图命令。 (2)OpenGL实用程序库 库中的函数均以“glu”关键字为前缀。包括43个辅助函数,用来管理坐标变换,绘制曲面、曲线以及错误处理。 (3)OpenGL系统扩展库 库中的函数均以“wgl”关键字为前缀。用来管理显示列表、字体位图、绘图描述表的扩展函数。 (4)OpenGL编程辅助库 库中的函数均以“aux”关键字为前缀。是OpenGL的辅助库,包括31个与平台无关的函数,提供了窗口管理和消息相应函数以及一些简单模型的制作函数。,OpenGL数据类型,OpenGL命令后缀和参数数据类型,OpenGL函数命名约定,所有的OpenGL函数都采用以下格式 : 有些OpenGL函数最后带一个字母v, 表示函数参数可用一个指针指向一 个向量(或数组)来替代一系列单 个参数值。 glColor3f(1.0,0.0,0.0); float color_array=1.0,0.0,0.0; glColor3fv(color_array);,OpenGL程序,/ Simple.c / The Simplest OpenGL program with GLUT #include #include / Called to draw scene void RenderScene(void) / Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT); / Flush drawing commands glFlush(); ,OpenGL程序,/ Setup the rendering state void SetupRC(void) glClearColor(0.0f, 0.0f, 1.0f, 1.0f); / Main program entry point void main(void) glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutCreateWindow(Simple); glutDisplayFunc(RenderScene); SetupRC(); glutMainLoop(); ,Windows OpenGL程序,#include stdafx.h #include #include #include #include / Called to draw scene void CALLBACK RenderScene(void) / Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT); / Flush drawing commands glFlush(); ,Windows OpenGL程序,/ Setup the rendering state void SetupRC(void) glClearColor(0.0f, 0.0f, 1.0f, 1.0f); / Main program entry point int _tmain(int argc, _TCHAR* argv) auxInitDisplayMode(AUX_SINGLE | AUX_RGB); auxInitWindow(Simple); SetupRC(); auxMainLoop(RenderScene); return 0; ,程序解释,程序包含头文件: #include #include 或 #include #include #include #include ,程序解释,函数库文件:Opengl32.lib glu32.lib glaux.lib 动态连接库:Opengl32.DLL;glu32.DLL,程序解释,进入C程序的入口点: void main(void) 或 int _tmain(int argc, _TCHAR* argv) 创建窗口时设定显示模式: glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 或 auxInitDisplayMode(AUX_SINGLE | AUX_RGB); 创建窗口 glutCreateWindow(“Simple”); 或 auxInitWindow(Simple); 显示回调函数 glutDisplayFunc(RenderScene);或 auxMainLoop(RenderScene);,程序解释,设置OpenGL显示状态 SetRC(); SetRC()调用了以下函数: glClearColor(0.0f, 0.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); 设置强制刷新 glFlush();,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号