如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
计算机图形学上机实验报告计算机科学与技术学院班级:CS1101学号:U201114135姓名:赵志强指导教师:何云峰完成日期:2013.12.041.1实验目的与要求用分形几何来描述非规则对象的方法,利用分形几何表示的物体所具有的无限的自相似性——即物体的整体和局部之间细节的无限重现,由简单的规则图形生成复杂的图形。了解OpenGL编程的方法,初步学习如何利用OpenGL图形库来绘制简单图形。通过实际编写OpenGL程序,加深对本课程相关概念的理解,提高学习兴趣。1.2实验内容用OpenGL程序,分别以直线段和正三角形为初始生成元,实现迭代次数在6次以内的Kock曲线。实验步骤如下:复习课本上Kock曲线的内容。假设原直线端点,则Kock雪花曲线的生成规则和新的直线段的5个端点的坐标表达式如公式1.1所示:公式1.1直线段经过一次Kock曲线生成规则生成的端点坐标2.用OpenGL程序以直线段为初始生成元生成Kock曲线,结果如实验结果中的图1.1所示。3.用OpenGL程序以正三角形为初始生成元生成Kock曲线,结果如实验结果中的图1.2所示的六角雪花形状。1.3实验结果分别以直线段和正三角形为初始生成元生成的Kock曲线的结果截图如下所示:图1.1以直线段为生成元迭代六次产生的Kock曲线图1.2以正三角形为生成元迭代六次生成的Kock曲线1.4心得体会这次实验是让做简单的分形几何。分形几何我以前听说过,总觉得是很高深的的内容,但是其实认真看过书上的内容后也没有想象中的那么麻烦。这次实验用递归调用的方法来实现分形的概念,因为能用分形几何表示的物体都具有从整体到局部的无限的自相似性,用递归调用的方法能够很容易地实现这种自相似性。主要的问题在于实际编程中用glVertex3f函数确定曲线端点的时候容易产生重复定点的错误,通过GL_LINE_STRIP画线模式会产生如下图1.3所示的错误:图1.3重复定点时GL_LINE_STRIP画线模式产生的错误这次实验收获很大,也很有趣,看到自己编程生成图形,是一种很大的乐趣。在这个过程中也加深了自己对分形几何知识的理解。1.5源程序#include<windows.h>#include<gl/glut.h>#include<gl/gl.h>#include<gl/glu.h>//初始化窗口voidInitial(void){//设置窗口颜色为蓝色glClearColor(1.0f,1.0f,1.0f,1.0f);}//窗口大小改变时调用的登记函数voidChangeSize(GLsizeiw,GLsizeih){if(h==0)h=1;//设置视区尺寸glViewport(0,0,w,h);//重置坐标系统glMatrixMode(GL_PROJECTION);glLoadIdentity();//建立修剪空间的范围if(w<=h)glOrtho(0.0f,250.0f,0.0f,250.0f*h/w,1.0,-1.0);elseglOrtho(0.0f,250.0f*w/h,0.0f,250.0f,1.0,-1.0);}//画线函数voidComputPoint(floatx0,floaty0,floatx1,floaty1,intn){floatx2,y2,x3,y3,x4,y4;x2=x0+(x1-x0)/3;y2=y0+(y1-y0)/3;x3=(x1+x0)/2+(y0-y1)*1.732/6;y3=(y1+y0)/2+(x1-x0)*1.732/6;x4=x0+2*(x1-x0)/3;y4=y0+2*(y1-y0)/3;n--;if(n==0)return;ComputPoint(x0,y0,x2,y2,n);ComputPoint(x2,y2,x3,y3,n);ComputPoint(x3,y3,x4,y4,n);ComputPoint(x4,y4,x1,y1,n);glVertex3f(x1,y1,0);}voidComputTriPoint(floatx0,floaty0,floatx1,floaty1,floatx2,floaty2,intn){ComputPoint(x0,y0,x1,y1,n);ComputPoint(x1,y1,x2,y2,n);ComputPoint(x2,y2,x0,y0,n);}//在窗口中绘制图形voidReDraw(void