c语言与opengl介绍.ppt_第1页
c语言与opengl介绍.ppt_第2页
c语言与opengl介绍.ppt_第3页
c语言与opengl介绍.ppt_第4页
c语言与opengl介绍.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机图形学,上海大学工业设计教研室 范乐明,计算机图形学,/,计算机图形学,第三章 OpenGL编程基础,3.1概述 3.2OpenGL工作结构 3.3OpenGL的功能 3.4OpenGL工作流程 3.5OpenGL图形操作步骤 3.6OpenGL的组成 3.7OpenGL数据类型 3.8OpenGL函数命名约定 3.9OpenGL程序,计算机图形学,概述,20世纪90年代,人们发现复杂的数据以视觉的形式出现最容易理解,三维图形得以迅猛发展,各种三维图形工作软件包相继推出,如PHIGS、PEX、RenderMan等 OpenGL在交互式三维图形建模能力、外部设备管理以及编程方便性上由无以伦比的优势,计算机图形学,OpenGL对GL的进一步发展而来 由于其高度可用性,几十家大公司接受其为标准图形软件接口 OpenGL ARB(OpenGL Architecture Review Board,即OpenGL体系结构审查委员会) 成员有,SGI,Microsoft(Direct 3D),Intel,IBM,SUN,HP,AT&T的UNIX软件实验室等 OpenGL已经成为高性能图形和交互式视景处理的工业标准之一(D3D是其竞争对手),计算机图形学,作为图形软件接口,OpenGL由几百个指令或函数组成。 对程序员而言,OpenGL是一些指令或函数的集合。 一个使用OpenGL的典型描绘程序是 首先在帧缓存中定义一个窗口 然后在此窗口中进行各种操作,计算机图形学,对于OpenGL的实现者而言,OpenGL是影响图形硬件操作的指令集合。 图形硬件可以包括不同级别 的图形加速器,从画二维的直线到多边形的网栅系统到包含能够转换和计算几何数据的浮点处理器 如果只有一个帧缓存,OpenGL不得不几乎在CPU上实现对象的描绘。,计算机图形学,OpenGL的网络透明性 在客户/服务器体系结构中,OpenGL允许本地和远程绘图,可以通过网络发送图形消息至远程机,也可以发送图形信息至多个显示屏幕。 透过网络不会发生编译错误。,计算机图形学,优秀的专业化3D图形应用程序设计界面,API(Applied Programmer Interface) OpenGL 2.0已经出现 不同公司由于开发目的不同,版本不一样。 TGS OpenGL Inventor SUN 面向Solaris的OpenGL基础图形库,计算机图形学,适用与广泛的计算环境,从个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能 具有广泛可移植性 成为三维图形的开发标准,计算机图形学,3.2 OpenGL的工作结构,客户/服务器模式 客户(试图用OpenGL进行绘制工作的应用程序)向服务器(OpenGL)内核发布命令,这些命令是由服务器来解释的。 大多数情况客户与服务器是运行在同一台机器上, 但基于客户/服务器模式,在网络环境中很容易使用OpenGL,具有网络透明性,计算机图形学,OpenGL在Windows环境中的工作过程,客户应用程序,OpenGL DLL,服务器 DLL,Win32 DDI,视频驱动程序,客户应用程序,服务器,客户机,计算机图形学,3.3 OpenGL的功能,模型绘制 模型观察 颜色模式指定 光照应用 图像效果增强 位图和图像处理 纹理映射 实时动画 交互技术,计算机图形学,3.4OpenGL工作流程,图元操作 图形控制 OpenGL指令解释模型 OpenGL基本操作,计算机图形学,图元操作 OpenGL提供多种模式绘制图元(Primitive),一种模式的设置一般不会影响其他图元的设置,指令总是会被顺序处理的。 图元由一组顶点定义。该组顶点既可以只包含一个顶点,也可以包含多个顶点。顶点的说明由位置坐标、颜色值、法向量和纹理坐标组成。每个顶点根据其是二维顶点和三维顶点而可以分别使用2个坐标、3个坐标或4个坐标。 在OpenGL中,几何对象是根据glBegin()/glEnd()函数对之间所包含的一系列指定顶点的位置坐标、颜色值、法向量值和纹理坐标画出的。这样的几何对象有点线段、循环线段、分离线段、多边形、三角形、三角形扇、分离的三角形、四边形及分离的四边形,计算机图形学,2. 图形控制 提供诸如变换矩阵、光照、反走样方法、象素操作等来控制二维和三维图形的绘制,但不提供一个描述或简历复杂几何物体的手段。 OpenGL提供的是怎样画复杂物体的机制,而非描绘复杂物体本身的面面俱到的工具,它是一个绘制系统而非造型系统。,计算机图形学,3. OpenGL指令解释模型 OpenGL的指令解释模型是客户/服务器模式,计算机图形学,4.OpenGL的基本操作 用户指令从左侧进入OpenGL。分为两部分,计算机图形学,OpenGL绘制原理图,几何顶点数据,图像象素数据,显示列表,求值器,逐点操作基元装配,象素操作,光栅化,基片操作,帧缓存,纹理存储器,计算机图形学,3.5 OpenGL图形操作步骤,根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述 把景物模型放在三维空间中合适的位置,并且设置视点(Viewpoint)以观察所感兴趣的景观。 计算模型中所有物体的色彩,这些色彩将根据应用要求来确定,同时确定光照条件、纹理贴图方式等。 把景物模型的数学描述及色彩信息转换至计算机屏幕上的象素中,这个过程也就是光栅化(Rasterization) 并行的其他一些操作,如自动消隐处理等。,计算机图形学,3.6 OpenGL的组成,OpenGL核心库 OpenGL实用程序库 OpenGL系统扩展库 OpenGL编程辅助库 OpenGL实用程序工具库,计算机图形学,3.7 OpenGL数据类型,为了更容易将OpenGL代码从一个平台移植到另一个平台,OpenGL定义了自己的数据类型,这些数据类型被映射为常规的C数据类型, 也可以直接使用C语言数据类型,但不同编译器环境对此有影响 OpenGL定义的数据类型,将代码与这些类型变更相隔离。,计算机图形学,3.8 OpenGL函数命名约定,OpenGL的函数采取以下格式 glColor3f(),库前缀,根命令,参数个数,参数类型,计算机图形学,3.9 OpenGL程序,最短的OpenGL程序,计算机图形学,最短的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(); ,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(); ,计算机图形学,程序演示,,计算机图形学,头文件,#include #include 定义了程序所用的函数原型 windows.h,包含大多数Win32函数原型 glut.h还包含gl.h,glu.h头文件,定义了OpenGL和GLU的库函数,计算机图形学,主体,void main(void) C程序的入口点,用了控制台模式,没用WinMain,计算机图形学,1. 显示模式 glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB); 告诉GLUT库在创建窗口时候使用哪种类型的显示模式, 这里标志它使用单缓冲窗口( GLUT_SINGLE)并使用RGB模式( GLUT_RGB),计算机图形学,2.创建OpenGL窗口 glutCreateWindow(“Simple“); 表示对GLUT库进行调用,在屏幕上实际创建窗口,并将标题设置为“Simple” glutCreateWindow的单个参数是窗口标题栏中的标题,计算机图形学,3.显示回调 glutDisplayFunc(RenderScene); 将先前定义的函数RenderScene设为显示回调函数,这意味着只要需要绘制窗口,GLUT就会调用这个指定的函数。,计算机图形学,4.设置上下文并执行 SetupRC(); 这一行与GLUT和OpenGL都没有关系,这个函数的作用是进行OpenGL的初始化 glutMainLoop(); 这个函数让GLUT框架开始运行。在为屏幕显示和其他函数定义了回调之后,这个函数回所有特定于操作系统的消息、键击等,直到用户终止这个程序为止。,计算机图形学,OpenGL图形调用,SetRC函数 只包含一个OpenGL的函数调用: glClearColor(0.0f,0.0f,1.0f,1.0f); 原型为 Void glClearColor(Glclampf red,Glclampf green,Glcampf blue,Glclampf alpha);,计算机图形学,1.实际清除 glClear(GL_COLOR_BUFFER_BIT); glClear函数用来清楚特定的缓冲区或者缓冲区组合。缓冲区是图像信息的存储区 刚只是把蓝色设置为清除色,计算机图形学,2.刷新队列 glFlush(); 让所有未执行的OpenGL命令都被执行,此时只有glClear未被执行 在内部,OpenGL使用一条渲染流水线来处理命令,以提高效能 glFLush函数只是告诉OpenGL,它应该处理到目前为止收到的绘图命令,而不要再等待更多的绘图命令。,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论