计算机图形学实验指导书
授课教师:臧辉
适用专业:计算机学院计算机科学技术
使用班级: 12软件工程
授课时间:2015春季
授课学时:40/30/10学时
使用教材:计算机图形学教程
王汝传编著
人民邮电出版社,2009年版
湖北理工学院计算机学院
实验教学进度表
实验一直线段的生成算法
一、实验目的及要求
1、掌握Bresenham算法的原理;
2、熟悉Bresenham算法的具体c语言实现;
3、掌握dda算法的原理;
4、熟悉dda算法的具体c语言实现。
二、实验学时
4学时
三、实验任务
1、Bresenham算法的c语言实现
2、DDA算法的c语言实现
四、实验重点、难点
对Bresenham算法的原理以及c语言程序的具体实现
(一)Bresenham算法的实现
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void Bresenham_line(int x0,int y0,int x1,int y1,int color) {
具体代码根据书上算法2.1.6改写
}
Void main()
{
int gdriver = DETECT, gmode, errorcode;
char msg[80];
initgraph(&gdriver, &gmode, "");//初始化图形和局部变量Bresenham_line(100,100,300,300,5);
Getch();
Closegraph();
}
(二)DDA算法的实现
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void DDAline(int x0,int y0,int x1,int y1,int color)
{
根据书上算法2.1-2改写 }
void main()
{
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, ""); DDAline(0,100,100,0,5); Closegraph();
Getch();
}
六、注意事项
应该根据算法原理来编写算法过程。
实验二自行车动画编程
一、实验目的及要求
1、掌握线段和圆等图形的实现原理;
2、掌握图形动画的实现方法。
二、实验学时
2学时
三、实验任务
自行车动画实现的c语言程序
四、实验重点、难点
理解线段和圆等图形并将其编写成程序
五、操作要点
算法的基本过程:
在图形模式下,图形存取有着重要的作用,这也是图形动画的基础。
图形存取的基本原理是:反屏幕上某个区域的信息存入一个缓冲区,然后在另一个区域把它的内容显示出来。
原理见课本71-73面。
具体算法设计可以参考72页的算法过程。
六、注意事项
能够应用原理进行程序编写。
#include"stdlib.h"
#include"graphics.h"
#include"conio.h"
#include"stdio.h"
void main()
{
void *w;
int driver=DETECT,mode=0,i,start,end,j;
initgraph(&driver,&mode," ");
cleardevice();
setbkcolor(13);
setcolor(CGA-LIGHTGREEN);
start=0;
end=180;
circle(387,290,37);
circle(525,290,37);
line(404,217,398,230);
line(436,217,429,230);
line(398,230,429,230);
line(413,230,387,290);
line(387,290,525,290);
line(408,243,484,243);
line(387,290,484,243);
line(484,243,525,290);
line(444,290,484,243);
line(444,290,446,279);
line(444,290,443,300);
line(438,277,444,278);
line(435,300,451,301);
line(484,243,487,233);
line(472,233,502,233); //自行车基本轮廓的绘制
w=malloc(imagesize(350,200,562,327));
getimage(350,200,562,327,w);
for(i=350,j=0;i>0;i--,j--)
{
setfillstyle(EMPTY_FILL,0);
pieslice(387+j,290,start,end,37);
pieslice(525+j,290,start,end,37);
start+=40;
end+=40;
delay(5); //处于运动状态的自行车车轮的轴线的绘制
putimage(i-1,200,w,COPY_PUT);
line(2,327,562,327);
delay(10); //自行车行驶动画的实现
}
for(i=0;i<10;i++)
{
pieslice(37,290,start,end,37);
pieslice(175,290,start,end,37);
start+=40;
end+=40;
} //处于静止状态的自行车车轮的轴线的绘制
getch();
restorecrtmode();
closegraph();
}
实验三多边形扫描线种子填充算法
一、实验目的与要求
1、掌握多边形扫描线种子填充算法的原理;
2、能够依据算法原理实现c语言代码。
2学时
三、实验任务
依据算法实现程序编写
四、实验重点、难点
理解算法原理并进行应用
五、操作要点
算法基本思想:
该算法的基本思想是将(x,y)点与边界值相比较。
检测该点的像素是否处在区域之内;同时与新值相比,以确定该点是否已被访问过。
多边形扫描线种子填充算法是种子填充算法的改进。
可以分为5步:
原理见课本124-126面。
具体算法设计可以参考162页习题15的算法过程。
六、注意事项
能够理解算法原理和程序大体框架
实验四OpenGL图形库的初步编程
一、实验目的与要求
1、了解基于OPENGL图形库的动画编程;
2、掌握基本的编程技巧;
2学时
三、实验任务
了解基于OPENGL图形库的动画编程并能进行简单编程;
四、实验重点、难点
OPENGL图形库的理解
五、操作要点
原理见课本270-273面。
六、注意事项
能够理解OPENGL图形库的动画编程并能进行简单编程。