2.1OpenGL简介 计算机图形学 OpenGL 课件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机图形学杨武影像科学与技术实验室东南大学计算机学院yangwu@seu.edu.cn2第二章OpenGL编程3第二章之第一节背景4基本内容OpenGLAPI的发展OpenGL的体系结构–状态机statemachineOpenGL函数–类型–格式简单程序5API的早期历史IFIPS(1973)组织了两个委员会建立图形API的标准–图形核心系统(GraphicalKernelSystem)•2D,包含很好的工作站模型–GKS成为ISO标准,之后成为ANSI标准(1980s)GKS很难推广到三维(GKS-3D)–远远落后于硬件的发展6PHIGS与XProgrammersHierarchicalGraphicsSystem(PHIGS)–来自于CAD团体–保存图形的数据库模型XWindow–DEC/MIT的成果–应用图形的客户服务Client-serverPEX把两者组合在一起–不易应用(这也是两者的缺陷)7SGI与GLSiliconGraphics(SGI)通过硬件实现流水线体系,改良了图形工作站(1982)应用程序通过一个称为GL的库与系统通讯借助于GL,可以非常简单地设计出三维交互图形应用程序8OpenGLGL的成功导致了OpenGL的出现(1992),这是一个与平台无关的API:–易于使用–与硬件非常贴近,从而可以充分发挥其功能–着重在于渲染(rendering)–没有提供窗口和输入接口,从而避免依赖于具体的窗口系统9OpenGL的发展由ArchitecturalReviewBoard(ARB)掌握–成员包括SGI,Microsoft,Nvidia,HP,3DLabs,IBM,…….–相对稳定(目前版本4.3)•发展反映了新的硬件能力–通过扩展可以指定具体平台相应的功能。10OpenGL库OpenGL核心库–Windows:OpenGL32–大多数unix/linux系统:GLOpenGL实用库(GLU)–利用OpenGL核心库提供一些功能,从而避免重复编写代码与窗口系统的连接–Xwindow系统:GLX–Windows:WGL–Macintosh:AGL11GLUTOpenGL实用工具库(GLUT)–提供所有窗口系统的共同功能•打开窗口•从鼠标和键盘获取输入•菜单•时间驱动–代码可以在平台间移植,但是GLUT缺乏在特定平台上优秀工具包所具有的功能•滚动条12软件组织GLUTGLUGLGLX,AGLorWGLX,Win32,MacO/S软件或硬件应用程序OpenGLMotifwidgetorsimilar13OpenGL体系快速模式显示列表多项式求值器逐顶点操作与基本几何体的集成光栅化逐片操作纹理内存CPU像素操作帧缓冲区几何流水线14OpenGL函数基本几何形状–点Points–线段LineSegments–多边形Polygons属性变换–视图–建模控制输入(GLUT)15OpenGL状态是一个状态机(statemachine)OpenGL函数具有两种类型–生成基本形状•如果形状可见,可以得到输出•顶点如何被处理、基本形状的外观,由状态控制–改变状态•变换函数•属性函数16面向对象方面的缺陷OpenGL不是面向对象的,因此逻辑上的一个函数却对应着多个OpenGL函数:glVertex3fglVertex2iglVertex3dv内在存储模式是相同的在C++中很容易创建重载函数,但效率却成为主要问题。17OpenGL函数名称的格式glVertex3f(x,y,z)属于GL库函数功能x,y,z为floatsglVertex3fv(p)p为指向数组的指针参数个数18OpenGL中的#defines绝大多数常数采用#define在头文件gl.h,glu.handglut.h定义–注意#includeglut.h会自动包含其它两个头文件在头文件中也定义了OpenGL数据类型:Glfloat,Gldouble,….19如何获取OpenGLOpenGL核心库与实用库:Windows98,NT3.5后系统自带C/C++语言编程库:VC6GLUT:课程网页20一个简单程序黑背景上画一个矩形21simple.c#includeGL/glut.hvoidmydisplay(){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();}intmain(intargc,char**argv){glutCreateWindow(simple);glutDisplayFunc(mydisplay);glutMainLoop();}22事件循环注意在程序中定义了一个显示回调函数(displaycallback):mydisplay–每个GLUT程序都必须有一个显示回调函数–只要OpenGL确定显示内容要被刷新时,显示回调函数就会被调用:例如,当窗口被打开的时候–main函数是程序进入事件循环做为结束23默认值simple.c非常简单大量使用状态变量的默认值–视图–颜色–窗口参数以后的程序将直接改变一些默认值

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功