1、计算机图形学实验报告SA03006073 魏思介绍:所有实验用一个 MFC 程序完成。组合成一个类似于画图程序。程序左边面板上有所有的按钮,要完成功能只要点击相应按钮然后在客户区操作就可以了。实验一、图元的生成实验要求:能够生成直线、圆、椭圆、可以按照给定的边界顶点完成区域填充。实验内容:直线生成:使用 Bresenhan 方法绘制直线。使用介绍:鼠标点击左边按钮区域的直线按钮,然后在右边客户区域内点下鼠标左键,拖动鼠标倒你想要绘制的地方,就可以形成一条直线。这个直线是用 MFC 提供的 CDC 类的LinetTo() 函数绘制的。然后开始自己的直线生成算法来重新绘制,使用红色的线条来绘制直线
2、,系统提供的直线函数是用来做参考的。椭圆和圆的生成:使用 Bresenhan 方法绘制椭圆和圆。使用介绍:和直线基本类似,鼠标点击按钮区域的椭圆或者是圆按钮,然后在右边客户区域内点下鼠标左键,拖动鼠标倒你想要绘制的地方,就可以形成一个圆或者是椭圆。这个圆或者是椭圆是使用 MFC 提供的 CDC 类的 Ellipse() 函数绘制的。然后开始自己的椭圆和圆生成算法来重新绘制,使用红色的线条来绘制,系统提供的椭圆或者是圆函数是用来做参考的。区域填充:使用边扫描填充法完成区域填充使用介绍:鼠标点击按钮区域的正方形按钮,会弹出一个输入对话框。在这个对话框里,输入包含你要求填充的区域的线条坐标。格式如下
3、(以正方形为例):(0,0) , (100,0)(100,0) , (100,100)(100,100) , (0,100)(0,100) , (0,0)点击确定以后,首先根据输入的线条坐标绘制出区域的边界。然后使用填充算法来填充区域。为了方便观察,采用了延时 100 毫秒显示下一个点。所以有缓慢的感觉,不是算法的问题。实验二、样条曲线的生成实验要求:能够生成 Bezier 曲线、B-样条曲线实验内容:Bezier 曲线生成:鼠标点击按钮区域的 Bezier 按钮,弹出一个对话框。要给给出绘制 Bezier 曲线的控制多边形的顶点信息。比如要绘制一个四顶点的三阶 Bezier 曲线。以正方形为
4、例:输入如下:(20,20)(200,20)(200,200)(20,200)程序首先根据输入的顶点绘制出控制多边形。然后绘制 Bezier 曲线。由于我采用的是 N-1阶 Bezier 曲线。所以当控制多边形点数不等于 4 时,给出的 Bezier 曲线(红色线条)与系统提供的 Bezier 曲线(黑色线条)不一致,因为系统提供 Bezier 曲线的不管控制多边形有多少个顶点,总是 3 阶的。B-样条曲线生成:鼠标点击按钮区域的 Spline 按钮,弹出一个对话框。要给给出绘制 B-样条曲线的控制多边形的顶点信息和 B-样条曲线的阶数。比如要绘制一个四顶点的三阶 B-样条曲线。以正方形为例:
5、输入如下:(20,20)(200,20)(200,200)(20,200)程序首先根据输入的顶点绘制出控制多边形。然后绘制 B-样条曲线。实验三、分形图形的生成实验要求:生成 Koch 曲线、Mandelbrot 集和 Julia 集、蕨类植物实验内容:生成分形 Mandelbrot 集:鼠标点击按钮区域的 Bezier 按钮下方的图标为蓝色大圆(左边有一个突起)的按钮。弹出一个对话框要求输入分形 Mandelbrot 集的启动参数 Zc,Z0 已设置为 0+0i.不需变动。输入的启动参数应该合适,也就是说在此参数下的 Mandelbrot 集要存在。然后点击确定。右边客户区便会绘制分形 Ma
6、ndelbrot 集图形。生成分形 Julia 集:Mandelbrot 集按钮右边的就是 Julia 集按钮,点击此按钮,弹出一个对话框要求输入分形Julia 集的启动参数 Zc,Z0 已设置为 0+0i.不需变动。输入的启动参数应该合适,也就是说在此参数下的 Julia 集要存在。然后点击确定。右边客户区便会绘制分形 Julia 集图形。生成分形 Koch 曲线:点击按钮区域的图标为一个带毛刺的曲线按钮,然后移动鼠标到客户区域,点下鼠标左键,不要放开,拖动鼠标到另外一点,这时,一条直线跟着变动,这条直线就是 Koch 曲线的基线,然后放开鼠标。程序开始绘制 Koch 曲线。生成分形 Sie
7、rpenski 三角形:点击按钮区域的图标为一个空心的三角形按钮,然后移动鼠标到客户区域,点下鼠标左键,不要放开,拖动鼠标到另外一点,这时,一个三角形跟着变动,这个三角形就是 Sierpenski三角形最外面的三角形。放开鼠标,程序开始绘制 Sierpenski 三角形.附加:生成圆分形图形:点击按钮区域的图标为大圆带三个小圆的按钮。这是开始绘制向外面扩展的自相似的圆形分形图形。实验四、真实感图形的生成实验要求:显示一个具有真实感场景的图形,几何造型自定义,包括消隐、镜面反射、纹理效果。实验内容:本实验比较复杂,本来打算左一个可以随鼠标移动的空间立体图行。但是发现在提供了消隐,反射,纹理效果后,效率很差,不能实现实时跟踪鼠标。所以做了一个静态的立体图形。本立体图形具有线框图,光影效果和纹理。点击按钮栏上立方体按钮。弹出一个对话框,在此选择要不要加上光影效果和纹理。然后点击确定,就可以绘制出立体感图形。由于接近考试,时间繁忙。而且由于这个的确是比较复杂。所以制作了一个简单的。至于其他的立体图形和复杂的消隐以及纹理等处理没有进行。请原谅 :)附加功能:在绘制图形的过程中可以点击新建擦除所有图形。也可以点击橡皮擦(灰色的长条形按钮) ,然后选择要擦出的半径进行精细的擦除工作。还可以点击 info 按钮观察一些本程序的使用说明。