三维空间中的分形课件

上传人:txadgkn****dgknqu... 文档编号:241660658 上传时间:2024-07-14 格式:PPT 页数:36 大小:1.28MB
返回 下载 相关 举报
三维空间中的分形课件_第1页
第1页 / 共36页
三维空间中的分形课件_第2页
第2页 / 共36页
三维空间中的分形课件_第3页
第3页 / 共36页
点击查看更多>>
资源描述
第第 9 章章三维空间中的分形三维空间中的分形 9.1 9.1 OpenGLOpenGLOpenGLOpenGL简介简介简介简介 9.29.2三维空间中的三维空间中的三维空间中的三维空间中的SierpinskiSierpinski地毯地毯地毯地毯 9.3 Sierpinski9.3 Sierpinski金字塔金字塔金字塔金字塔 9.49.4三维空间中三维空间中三维空间中三维空间中SierpinskiSierpinski海绵海绵海绵海绵 1参考书:分形算法与程序设计第9章三维空间中的分形9.1OpenGL简介9.OpenGLOpenGLOpenGLOpenGL简介简介简介简介9.19.1OpenGL,即即开开放放性性图图形形库库(Open Graphics Library),是是一一个个三三维维的的计计算算机机图图形形和和模模型型库库。OpenGL包包含含120个个图图形形函函数数,在在微微机机环环境境下下共共有有5种种函函数数,即即基基本本(或或核核心心)函函数数、实实用用函函数数、辅辅助助函函数数、Windows专专用用函函数数和和Win32 API函数。函数。2参考书:分形算法与程序设计OpenGL简介9.1OpenGL,即开放性图形库(OpenOpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能1 绘制物体绘制物体 OpenGL提供了丰富的基本图元绘制命令,从而可以方便地绘制物提供了丰富的基本图元绘制命令,从而可以方便地绘制物体,包括规则的和不规则的。体,包括规则的和不规则的。3参考书:分形算法与程序设计OpenGL的基本功能1绘制物体3参考书:分形算法与程OpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能2 变换变换 OpenGL提提供供了了一一系系列列基基本本的的变变换换,如如取取景景变变换换、模模型型变变换换、投投影影变变换换及及视视口变换。口变换。4参考书:分形算法与程序设计OpenGL的基本功能2变换4参考书:分形算法与程序设OpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能3 光照处理光照处理 包括发射光、环境光、散射光和镜面反射光。包括发射光、环境光、散射光和镜面反射光。5参考书:分形算法与程序设计OpenGL的基本功能3光照处理5参考书:分形算法与程OpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能4 着色着色 OpenGL提提供供了了两两种种物物体体着着色色模模式式,一一种种是是RGBA颜颜色色模模式,另一种是颜色索引(式,另一种是颜色索引(Color IndexColor Index)模式。)模式。6参考书:分形算法与程序设计OpenGL的基本功能4着色6参考书:分形算法与程序设OpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能5 反走样反走样 在在OpenGL绘绘制制图图形形过过程程中中,由由于于使使用用的的是是位位图图,所所以以绘绘制制出出的的图图像像的的边边缘缘会会出出现现锯锯齿齿形形状状,称称为为走走样样。为为了了消消除除这这种缺陷,种缺陷,OpenGL提供了点、线、多边形的反走样技术。提供了点、线、多边形的反走样技术。7参考书:分形算法与程序设计OpenGL的基本功能5反走样7参考书:分形算法与程序OpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能6 融合融合 为为了了使使三三维维图图形形更更加加具具有有真真实实感感,经经常常需需要要处处理理半半透透明明或或透明的物体图像,这就需要用到融合技术。透明的物体图像,这就需要用到融合技术。8参考书:分形算法与程序设计OpenGL的基本功能6融合8参考书:分形算法与程序设OpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能7 雾化雾化 正正如如自自然然界界中中存存在在烟烟雾雾一一样样,OpenGL提提供供了了“fog”的的基基本操作来达到对场景进行雾化的效果。本操作来达到对场景进行雾化的效果。9参考书:分形算法与程序设计OpenGL的基本功能7雾化9参考书:分形算法与程序设OpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能8 位图和图像位图和图像 在在图图形形绘绘制制过过程程中中,位位图图和和图图像像是是非非常常重重要要的的一一个个方方面面。OpenGL提供了系列函数来实现位图和图像的操作。提供了系列函数来实现位图和图像的操作。10参考书:分形算法与程序设计OpenGL的基本功能8位图和图像10参考书:分形算法OpenGLOpenGLOpenGLOpenGL的基本功能的基本功能的基本功能的基本功能9 纹理映射纹理映射 在在计计算算机机图图形形学学中中,把把包包含含颜颜色色、alpha值值、亮亮度度等等数数据据的的矩矩形形数数组组称称为为纹纹理理。而而纹纹理理映映射射可可以以理理解解为为将将纹纹理理粘粘贴贴在在所所绘绘制制的的三三维维模模型型表表面面,以使三维图形显得更生动。以使三维图形显得更生动。11参考书:分形算法与程序设计OpenGL的基本功能9纹理映射11参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的运行环境的运行环境的运行环境的运行环境10动画动画 出出色色的的动动画画效效果果是是OpenGL的的一一大大特特色色,OpenGL提提供供了了双缓存区技术来实现动画绘制。双缓存区技术来实现动画绘制。12参考书:分形算法与程序设计OpenGL的运行环境10动画12参考书:分形算法与程序OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数1顶点坐标顶点坐标 OpenGLOpenGL采用有序排列的顶点集合来构造几何图元,而不是采用有序排列的顶点集合来构造几何图元,而不是将线段、多边形组合起来构造几何图元。将线段、多边形组合起来构造几何图元。如:如:glVertex2s(2,5);glVertex2s(2,5);/整数定义的二维坐标 glVertex3f(2,5,7);glVertex3f(2,5,7);/浮点定义的三维坐标 13参考书:分形算法与程序设计OpenGL的基本函数1顶点坐标13参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数2顶点关系顶点关系 在在OpenGLOpenGL中中,同同一一个个几几何何图元元的的所所有有被被定定义的的顶点点一一起起放放在在glBegin()和和glEnd()函函数数之之间,同同时定定义这些些顶点点之之间的关系。如:的关系。如:glBegin(GL_POLYGON);glVertex2s(0,0);glVertex2s(0,11);glVertex2s(11,14);glVertex2s(14,7);glVertex2s(7,0);glEnd();14参考书:分形算法与程序设计OpenGL的基本函数2顶点关系14参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数3显示列表显示列表 OpenGLOpenGL显示示列列表表(Dispplay Dispplay ListList)是是由由一一组预先先存存储起起来来的的留留待待以以后后调用用的的OpenGLOpenGL函函数数语句句组成成的的,当当调用用这张显示示列表列表时就一次就一次执行表中所列出的函数行表中所列出的函数语句。句。创建显示列表创建显示列表 OpenGL OpenGL用下面的函数组创建显示列表:用下面的函数组创建显示列表:void glNewList(GLuint list,GLenum mode);void glEndList(void);执行显示列表执行显示列表 显示列表的执行函数形式如下:显示列表的执行函数形式如下:void glCallList(GLuint list);参数参数list指定被执行的显示列表。指定被执行的显示列表。15参考书:分形算法与程序设计OpenGL的基本函数3显示列表15参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数4颜色设置颜色设置 RGBA RGBA模式下的颜色定义模式下的颜色定义在在RGBARGBA模模式式下下,利利用用glColor*glColor*命命令令来来定定义义当当前前颜颜色色。glColor*glColor*命命令令有如下几种形式:有如下几种形式:void glColor3b s i f d ub us ui(TYPE r,TYPE g,TYPE b);void glColor4b s i f d ub us ui(TYPE r,TYPE g,TYPE b,TYPE a);void glColor3b s i f d ub us uiv(TYPE*v);void glColor4b s i f d ub us uiv(TYPE*v);在颜色索引模式下的颜色定义在颜色索引模式下的颜色定义 通过调用函数通过调用函数glIndex*()glIndex*()从颜色索引表中选取当前颜色。从颜色索引表中选取当前颜色。void glIndex(s f d i)(c:TYPE);void glIndex(s f d i)v(c:PTYPE);16参考书:分形算法与程序设计OpenGL的基本函数4颜色设置16参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数5光照设置光照设置 创建光源创建光源(Light Source)(Light Source)光光源源有有许许多多特特性性,如如颜颜色色、位位置置、方方向向等等。可可以以使使用用下下面面的的函函数数定定义光源:义光源:void void glLightifv(GLenum glLightifv(GLenum light light,GLenum GLenum pname,pname,TYPE TYPE param)param)启动光照启动光照 在在OpenGLOpenGL中中,必必须须明明确确指指出出光光照照是是否否有有效效或或无无效效。如如果果光光照照无无效效,则则只只是是简简单单地地将将当当前前颜颜色色映映射射到到当当前前顶顶点点上上去去,不不进进行行法法向向、光光源源、材材质质等等复复杂杂计计算算,那那么么显显示示的的图图形形就就没没有有真真实实感感。启启动动和和取取消消光光源源的的函函数数如如下下:glEnable(GL_LIGHTING);/启动光照启动光照 gDisable(GL_LIGHTING);/取消光照取消光照17参考书:分形算法与程序设计OpenGL的基本函数5光照设置17参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数6明暗处理明暗处理 在在OpenGL中中,用用单单一一颜颜色色处处理理的的称称为为平平面面明明暗暗处处理理(Flat Shading),用用许许多多不不同同颜颜色色处处理理的的称称为为光光滑滑明明暗暗处处理理(Smooth Shading)。设置明暗处理模式的函数为:设置明暗处理模式的函数为:void glShadeModel(GLenum mode);18参考书:分形算法与程序设计OpenGL的基本函数6明暗处理18参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数7材质设置材质设置 材质定义材质定义材质的定义与光源的定义类似。其函数为:材质的定义与光源的定义类似。其函数为:void glMaterialifv(GLenum face,GLenum pname,TYPE param);改变材质改变材质在在OpenGL中提供了两种方式来改变场景中的材质。中提供了两种方式来改变场景中的材质。第第一一种种方方法法是是利利用用函函数数glMaterial*()来来改改变变材材质质,但但是是调调用用函函数数 glMaterial*()需需 要要 同同 时时 保保 存存 当当 前前 矩矩 阵阵,也也 就就 是是 调调 用用 函函 数数 glPushMatrix()和和glPopMatrix()。第二种方法是使用函数第二种方法是使用函数glColorMaterial(),其形式为:,其形式为:void glColorMaterial(GLenum face,GLenum mode);19参考书:分形算法与程序设计OpenGL的基本函数7材质设置19参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数8纹理映射纹理映射 纹理定义纹理定义在程序中可以用以下函数定义二维纹理映射:在程序中可以用以下函数定义二维纹理映射:void glTexImage2D(GLenum target,GLint level,GLint components,GLsizei width,Glsizei height,GLint border,GLenum format,GLenum type,const GLvoid*pixels);纹理控制纹理控制OpenGL中控制纹理的函数是:中控制纹理的函数是:void glTexParameterifv(GLenum target,GLenum pname,TYPE param);定义纹理坐标定义纹理坐标OpenGL坐标定义的函数是:坐标定义的函数是:void gltexCoord1 2 3 4s i f dv(TYPE coords);20参考书:分形算法与程序设计OpenGL的基本函数8纹理映射20参考书:分形算法与OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数9选择与反馈选择与反馈 在在OpenGL中中,提提供供了了选选择择和和反反馈馈两两种种方方式式,以以实实现现对对屏屏幕上的某个物体的信息提供,达到交互的目的。幕上的某个物体的信息提供,达到交互的目的。进行模式选择的函数原型如下:进行模式选择的函数原型如下:Lint glRenderMode(GLenum Mode);在在进进入入选选择择模模式式之之前前,必必须须调调用用函函数数glSelectBuffer()来来制制定定选择数组。选择数组。在在进进入入反反馈馈模模式式之之前前,必必须须调调用用函函数数glFeedbackBuffer()来来制定反馈数组。制定反馈数组。21参考书:分形算法与程序设计OpenGL的基本函数9选择与反馈21参考书:分形算法OpenGLOpenGLOpenGLOpenGL的基本函数的基本函数的基本函数的基本函数10帧缓存与动画帧缓存与动画 帧缓存的组成帧缓存的组成 OpenGL帧帧缓缓存存由由以以下下四四种种缓缓存存组组成成:颜颜色色缓缓存存(Color Buffer)、深深度度缓缓存存(Depth Buffer)、模模板板缓缓存存(Stencil Buffer)、累积缓存累积缓存(Accumulation Buffer)。缓存清除缓存清除 OpenGL清清除除缓缓存存操操作作过过程程是是:先先给给出出要要写写入入每每个个缓缓存存的的清清除除值值,然后用单个函数命令执行操作,传入所有要清除的缓存表。然后用单个函数命令执行操作,传入所有要清除的缓存表。动画动画 OpenGL提提供供了了双双缓缓存存,可可以以用用来来制制作作动动画画。也也就就是是说说,在在显显示示前前台台缓缓存存内内容容中中的的一一帧帧画画面面时时,后后台台缓缓存存正正在在绘绘制制下下一一帧帧画画面面,当当绘绘制制完完毕毕,则则后后台台缓缓存存内内容容便便在在屏屏幕幕上上显显示示出出来来,而而前前台台正正好好相相反反,又又在在绘绘制制下下一一帧帧画画面面内内容容。这这样样循循环环反反复复,屏屏幕幕上上显显示示的的总是已经画好的图形,于是看起来所有的画面都是连续的。总是已经画好的图形,于是看起来所有的画面都是连续的。22参考书:分形算法与程序设计OpenGL的基本函数10帧缓存与动画22参考书:分形9.29.2 三维空间中的三维空间中的三维空间中的三维空间中的SierpinskiSierpinski地毯地毯地毯地毯 算法:算法:3D_Sierpinski标题:标题:三维空间中的三维空间中的Sierpinski地毯地毯变量:端点坐标变量:端点坐标 a(x1,y1,z1),b(x2,y2,z2)c(x3,y3,z3),d(x4,y4,z4)a1(),a2(),b1(),b2()c1(),c2(),d1(),d2()a_(),b_()c_(),d_()函数:函数:glVertex2s(x,y)(顶点坐标函数)glVertex2s(x,y,z)(顶点坐标函数)23参考书:分形算法与程序设计9.2三维空间中的Sierpinski地毯算法:3D_Si9.29.2 三维空间中的三维空间中的三维空间中的三维空间中的SierpinskiSierpinski地毯地毯地毯地毯 point3done_third(point3d&p2)returnpoint3d(p2.x-x)/3+x,(p2.y-y)/3+y,(p2.z-z)/3+z);/算出所有点的坐标 point3da1=a.one_third(b),a2=b.one_third(a);point3db1=b.one_third(c),b2=c.one_third(b);point3dc1=c.one_third(d),c2=d.one_third(c);point3dd1=d.one_third(a),d2=a.one_third(d);Point3d_a=a1.one_third(c2),_b=a2.one_third(c1);point3d_c=b2.one_third(d1),_d=d1.one_third(b2);24参考书:分形算法与程序设计9.2三维空间中的Sierpinski地毯point3d9.29.2 三维空间中的三维空间中的三维空间中的三维空间中的SierpinskiSierpinski地毯地毯地毯地毯 /递归绘制8个小块Menger(a,a1,_a,d2);Menger(a1,a2,_b,_a);Menger(a2,b,b1,_b);Menger(_b,b1,b2,_c);Menger(_c,b2,c,c1);Menger(_d,_c,c1,c2);Menger(d1,_d,c2,d);Menger(d2,_a,_d,d1);25参考书:分形算法与程序设计9.2三维空间中的Sierpinski地毯25参考书:分9.39.3 SierpinskiSierpinski金字塔金字塔金字塔金字塔 算法:算法:Sierpinski_pyramid标题:标题:Sierpinski金字塔金字塔 变量:端点坐标变量:端点坐标 a(x1,y1,z1),b(x2,y2,z2)c(x3,y3,z3),d(x4,y4,z4)函数:函数:glVertex2s(x,y)(顶点坐标函数)glVertex2s(x,y,z)(顶点坐标函数)26参考书:分形算法与程序设计9.3Sierpinski金字塔算法:Sierpinski9.39.3 SierpinskiSierpinski金字塔金字塔金字塔金字塔 point3dmiddle(point3d&p2)returnpoint3d(x+p2.x)/2,(y+p2.y)/2,(z+p2.z)/2);glBegin(GL_TRIANGLES);glVertex3f(a.x,a.y,a.z);glVertex3f(b.x,b.y,b.z);glVertex3f(c.x,c.y,c.z);glVertex3f(d.x,d.y,d.z);glVertex3f(a.x,a.y,a.z);glVertex3f(b.x,b.y,b.z);glVertex3f(d.x,d.y,d.z);glVertex3f(b.x,b.y,b.z);glVertex3f(c.x,c.y,c.z);glEnd();27参考书:分形算法与程序设计9.3Sierpinski金字塔point3dmiddl9.39.3 SierpinskiSierpinski金字塔金字塔金字塔金字塔 /递归绘制四个锥体seripinski(a.middle(b),b,b.middle(c),b.middle(d);seripinski(a,a.middle(b),a.middle(c),a.middle(d);seripinski(a.middle(c),b.middle(c),c,c.middle(d);seripinski(a.middle(d),b.middle(d),c.middle(d),d);28参考书:分形算法与程序设计9.3Sierpinski金字塔28参考书:分形算法与程9.49.4 SierpinskiSierpinski海绵海绵海绵海绵算法:算法:Sierpinski_sponge标题:标题:Sierpinski海绵海绵变量:端点坐标变量:端点坐标 x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8;函数:函数:glVertex2s(x,y)(顶点坐标函数)glVertex2s(x,y,z)(顶点坐标函数)29参考书:分形算法与程序设计9.4Sierpinski海绵算法:Sierpinski_s9.49.4 SierpinskiSierpinski海绵海绵海绵海绵void CRenderDlg:lft(double x,doubley,doublez,doublel)doublex1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8;x1=x-l/2;y1=y-l/2;z1=z-l/2;30参考书:分形算法与程序设计9.4Sierpinski海绵voidCRenderDlg9.49.4 SierpinskiSierpinski海绵海绵海绵海绵x2=x+l/2;y2=y-l/2;z2=z-l/2;x3=x-l/2;y3=y-l/2;z3=z+l/2;x4=x+l/2;y4=y-l/2;z4=z+l/2;x5=x-l/2;y5=y+l/2;z5=z+l/2;31参考书:分形算法与程序设计9.4Sierpinski海绵31参考书:分形算法与程序设9.49.4 SierpinskiSierpinski海绵海绵海绵海绵x6=x+l/2;y6=y+l/2;z6=z+l/2;x7=x-l/2;y7=y+l/2;z7=z-l/2;x8=x+l/2;y8=y+l/2;z8=z-l/2;32参考书:分形算法与程序设计9.4Sierpinski海绵32参考书:分形算法与程序9.49.4 SierpinskiSierpinski海绵海绵海绵海绵void CRenderDlg:Drawscene(double x,double y,double z,double l,double n)if(n 1)/画一级Sierpinski海绵l:=l/3;lft(x-l,y+l,z-l,l);/后左上lft(x,y+l,z-l,l);/后中上lft(x+l,y+l,z-l,l);/后右上lft(x-l,y,z-l,l);/后左中lft(x+l,y,z-l,l);/后右中lft(x-l,y-l,z-l,l);/后左下lft(x,y-l,z-l,l);/后中下lft(x+l,y-l,z-l,l);/后右下33参考书:分形算法与程序设计9.4Sierpinski海绵voidCRenderDlg9.49.4 SierpinskiSierpinski海绵海绵海绵海绵lft(x-l,y+l,z,l);/中左上lft(x+l,y+l,z,l);/中右上lft(x-l,y-l,z,l);/中左下lft(x+l,y-l,z,l);/中右下lft(x-l,y+l,z+l,l);/前左上lft(x,y+l,z+l,l);/前中上lft(x+l,y+l,z+l,l);/前右上lft(x-l,y,z+l,l);/前左中lft(x+l,y,z+l,l);/前右中lft(x-l,y-l,z+l,l);/前左下lft(x,y-l,z+l,l);/前中下lft(x+l,y-l,z+l,l);/前右下34参考书:分形算法与程序设计9.4Sierpinski海绵lft(x-l,y+l9.49.4 SierpinskiSierpinski海绵海绵海绵海绵else/递归调用画下一级Sierpinski海绵glClear(GL_COLOR_BUFFER_BITorGL_DEPTH_BUFFER_BIT);l:=l/3;Drawscene(x-l,y+l,z-l,l,n-1);/后左上Drawscene(x,y+l,z-l,l,n-1);/后中上Drawscene(x+l,y+l,z-l,l,n-1);/后右上Drawscene(x-l,y,z-l,l,n-1);/后左中Drawscene(x+l,y,z-l,l,n-1);/后右中Drawscene(x-l,y-l,z-l,l,n-1);/后左下Drawscene(x,y-l,z-l,l,n-1);/后中下Drawscene(x+l,y-l,z-l,l,n-1);/后右下35参考书:分形算法与程序设计9.4Sierpinski海绵else35参考书:分形9.49.4 SierpinskiSierpinski海绵海绵海绵海绵Drawscene(x-l,y+l,z,l,n-1);/中左上Drawscene(x+l,y+l,z,l,n-1);/中右上Drawscene(x-l,y-l,z,l,n-1);/中左下Drawscene(x+l,y-l,z,l,n-1);/中右下Drawscene(x-l,y+l,z+l,l,n-1);/前左上Drawscene(x,y+l,z+l,l,n-1);/前中上Drawscene(x+l,y+l,z+l,l,n-1);/前右上Drawscene(x-l,y,z+l,l,n-1);/前左中Drawscene(x+l,y,z+l,l,n-1);/前右中Drawscene(x-l,y-l,z+l,l,n-1);/前左下Drawscene(x,y-l,z+l,l,n-1);/前中下Drawscene(x+l,y-l,z+l,l,n-1);/前右下36参考书:分形算法与程序设计9.4Sierpinski海绵Drawscene(x
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!