360 likes | 625 Views
第 9 章. 三维空间中的分形. 9.1 OpenGL 简介 9.2 三维空间中的 Sierpinski 地毯. 9.3 Sierpinski 金字塔 9.4 三维空间中 Sierpinski 海绵. OpenGL 简介. 9.1. OpenGL ,即开放性图形库( Open Graphics Library ),是一个三维的计算机图形和模型库。 OpenGL 包含 120 个图形函数,在微机环境下共有 5 种函数,即基本(或核心)函数、实用函数、辅助函数、 Windows 专用函数和 Win32 API 函数。. OpenGL 的基本功能. 1 . 绘制物体
E N D
第 9章 三维空间中的分形 9.1 OpenGL简介 9.2三维空间中的Sierpinski地毯 9.3 Sierpinski金字塔 9.4三维空间中Sierpinski海绵 参考书:《分形算法与程序设计》
OpenGL简介 9.1 OpenGL,即开放性图形库(Open Graphics Library),是一个三维的计算机图形和模型库。OpenGL包含120个图形函数,在微机环境下共有5种函数,即基本(或核心)函数、实用函数、辅助函数、Windows专用函数和Win32 API函数。 参考书:《分形算法与程序设计》
OpenGL的基本功能 1. 绘制物体 OpenGL提供了丰富的基本图元绘制命令,从而可以方便地绘制物体,包括规则的和不规则的。 参考书:《分形算法与程序设计》
OpenGL的基本功能 2.变换 OpenGL提供了一系列基本的变换,如取景变换、模型变换、投影变换及视口变换。 参考书:《分形算法与程序设计》
OpenGL的基本功能 3.光照处理 包括发射光、环境光、散射光和镜面反射光。 参考书:《分形算法与程序设计》
OpenGL的基本功能 4.着色 OpenGL提供了两种物体着色模式,一种是RGBA颜色模式,另一种是颜色索引(Color Index)模式。 参考书:《分形算法与程序设计》
OpenGL的基本功能 5.反走样 在OpenGL绘制图形过程中,由于使用的是位图,所以绘制出的图像的边缘会出现锯齿形状,称为走样。为了消除这种缺陷,OpenGL提供了点、线、多边形的反走样技术。 参考书:《分形算法与程序设计》
OpenGL的基本功能 6.融合 为了使三维图形更加具有真实感,经常需要处理半透明或透明的物体图像,这就需要用到融合技术。 参考书:《分形算法与程序设计》
OpenGL的基本功能 7.雾化 正如自然界中存在烟雾一样,OpenGL提供了“fog”的基本操作来达到对场景进行雾化的效果。 参考书:《分形算法与程序设计》
OpenGL的基本功能 8.位图和图像 在图形绘制过程中,位图和图像是非常重要的一个方面。OpenGL提供了系列函数来实现位图和图像的操作。 参考书:《分形算法与程序设计》
OpenGL的基本功能 9.纹理映射 在计算机图形学中,把包含颜色、alpha值、亮度等数据的矩形数组称为纹理。而纹理映射可以理解为将纹理粘贴在所绘制的三维模型表面,以使三维图形显得更生动。 参考书:《分形算法与程序设计》
OpenGL的运行环境 10.动画 出色的动画效果是OpenGL的一大特色,OpenGL提供了双缓存区技术来实现动画绘制。 参考书:《分形算法与程序设计》
OpenGL的基本函数 1.顶点坐标 OpenGL采用有序排列的顶点集合来构造几何图元,而不是将线段、多边形组合起来构造几何图元。 如: glVertex2s(2,5); //整数定义的二维坐标 glVertex3f(2,5,7);//浮点定义的三维坐标 参考书:《分形算法与程序设计》
OpenGL的基本函数 2.顶点关系 在OpenGL中,同一个几何图元的所有被定义的顶点一起放在glBegin()和glEnd()函数之间,同时定义这些顶点之间的关系。如: glBegin(GL_POLYGON); glVertex2s(0,0); glVertex2s(0,11); glVertex2s(11,14); glVertex2s(14,7); glVertex2s(7,0); glEnd(); 参考书:《分形算法与程序设计》
OpenGL的基本函数 3.显示列表 OpenGL显示列表(Dispplay List)是由一组预先存储起来的留待以后调用的OpenGL函数语句组成的,当调用这张显示列表时就一次执行表中所列出的函数语句。 创建显示列表 OpenGL用下面的函数组创建显示列表: void glNewList(GLuint list,GLenum mode); …… void glEndList(void); 执行显示列表 显示列表的执行函数形式如下: void glCallList(GLuint list); 参数list指定被执行的显示列表。 参考书:《分形算法与程序设计》
OpenGL的基本函数 4.颜色设置 ⑴RGBA模式下的颜色定义 在RGBA模式下,利用glColor*命令来定义当前颜色。glColor*命令有如下几种形式: void glColor3{b s i f d ub us ui}(TYPE r,TYPE g,TYPE b); void glColor4{b s i f d ub us ui}(TYPE r,TYPE g,TYPE b,TYPE a); void glColor3{b s i f d ub us ui}v(TYPE *v); void glColor4{b s i f d ub us ui}v(TYPE *v); ⑵ 在颜色索引模式下的颜色定义 通过调用函数glIndex*()从颜色索引表中选取当前颜色。 void glIndex(s f d i)(c:TYPE); void glIndex(s f d i)v(c:PTYPE); 参考书:《分形算法与程序设计》
OpenGL的基本函数 5.光照设置 ⑴ 创建光源(Light Source) 光源有许多特性,如颜色、位置、方向等。可以使用下面的函数定义光源: void glLight{if}[v](GLenum light , GLenum pname, TYPE param) ⑵ 启动光照 在OpenGL中,必须明确指出光照是否有效或无效。如果光照无效,则只是简单地将当前颜色映射到当前顶点上去,不进行法向、光源、材质等复杂计算,那么显示的图形就没有真实感。启动和取消光源的函数如下: glEnable(GL_LIGHTING);//启动光照 gDisable(GL_LIGHTING);//取消光照 参考书:《分形算法与程序设计》
OpenGL的基本函数 6.明暗处理 在OpenGL中,用单一颜色处理的称为平面明暗处理(Flat Shading),用许多不同颜色处理的称为光滑明暗处理(Smooth Shading) 。 设置明暗处理模式的函数为: void glShadeModel(GLenum mode); 参考书:《分形算法与程序设计》
OpenGL的基本函数 7.材质设置 ⑴ 材质定义 材质的定义与光源的定义类似。其函数为: void glMaterial{if}[v](GLenum face,GLenum pname,TYPE param); ⑵ 改变材质 在OpenGL中提供了两种方式来改变场景中的材质。 第一种方法是利用函数glMaterial*()来改变材质,但是调用函数glMaterial*()需要同时保存当前矩阵,也就是调用函数glPushMatrix()和glPopMatrix()。 第二种方法是使用函数glColorMaterial(),其形式为: void glColorMaterial(GLenum face,GLenum mode); 参考书:《分形算法与程序设计》
OpenGL的基本函数 8.纹理映射 ⑴ 纹理定义 在程序中可以用以下函数定义二维纹理映射: void glTexImage2D(GLenum target,GLint level,GLint components, GLsizei width,Glsizei height,GLint border,GLenum format,GLenum type,const GLvoid *pixels); ⑵ 纹理控制 OpenGL中控制纹理的函数是: void glTexParameter{if}[v](GLenum target,GLenum pname,TYPE param); ⑶定义纹理坐标 OpenGL坐标定义的函数是: void gltexCoord{1 2 3 4}{s i f d}[v](TYPE coords); 参考书:《分形算法与程序设计》
OpenGL的基本函数 9.选择与反馈 在OpenGL中,提供了选择和反馈两种方式,以实现对屏幕上的某个物体的信息提供,达到交互的目的。 进行模式选择的函数原型如下: Lint glRenderMode(GLenum Mode); 在进入选择模式之前,必须调用函数glSelectBuffer()来制定选择数组。 在进入反馈模式之前,必须调用函数glFeedbackBuffer()来制定反馈数组。 参考书:《分形算法与程序设计》
OpenGL的基本函数 10.帧缓存与动画 ⑴ 帧缓存的组成 OpenGL帧缓存由以下四种缓存组成:颜色缓存(Color Buffer) 、深度缓存(Depth Buffer) 、模板缓存(Stencil Buffer) 、累积缓存(Accumulation Buffer) 。 ⑵ 缓存清除 OpenGL清除缓存操作过程是:先给出要写入每个缓存的清除值,然后用单个函数命令执行操作,传入所有要清除的缓存表。 ⑶ 动画 OpenGL提供了双缓存,可以用来制作动画。也就是说,在显示前台缓存内容中的一帧画面时,后台缓存正在绘制下一帧画面,当绘制完毕,则后台缓存内容便在屏幕上显示出来,而前台正好相反,又在绘制下一帧画面内容。这样循环反复,屏幕上显示的总是已经画好的图形,于是看起来所有的画面都是连续的。 参考书:《分形算法与程序设计》
三维空间中的Sierpinski地毯 9.2 参考书:《分形算法与程序设计》
三维空间中的Sierpinski地毯 9.2 参考书:《分形算法与程序设计》
三维空间中的Sierpinski地毯 9.2 参考书:《分形算法与程序设计》
Sierpinski金字塔 9.3 参考书:《分形算法与程序设计》
Sierpinski金字塔 9.3 参考书:《分形算法与程序设计》
Sierpinski金字塔 9.3 参考书:《分形算法与程序设计》
Sierpinski海绵 9.4 参考书:《分形算法与程序设计》
Sierpinski海绵 9.4 参考书:《分形算法与程序设计》
Sierpinski海绵 9.4 参考书:《分形算法与程序设计》
Sierpinski海绵 9.4 参考书:《分形算法与程序设计》
Sierpinski海绵 9.4 参考书:《分形算法与程序设计》
Sierpinski海绵 9.4 参考书:《分形算法与程序设计》
Sierpinski海绵 9.4 参考书:《分形算法与程序设计》
Sierpinski海绵 9.4 参考书:《分形算法与程序设计》