计算机图形学基础教程实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖北民族学院信息工程学院实验报告
(数字媒体技术专业用)
班级:0312413姓名:谌敦斌学号:031241318实验成绩:
实验时间:2013年10 月14 日9、10 节实验地点:数媒实验室课程名称:计算机图形学基础教程实验类型:设计型
实验题目:直线与圆的绘制
一、实验目的
通过本次实验,熟练掌握DDA、中点、Bresenham直线绘制方法和中点、Bresenham圆的画法,能够在vc环境下独立完成实验内容,逐渐熟悉opengl的语法特点,提高程序基本绘图的能力。
二、实验环境(软件、硬件及条件)
Microsoft vc++6.0 多媒体计算机
三、实验内容
1.从DDA、中点、Bresenham画线法中任选一种,完成直线的绘制。
2.从中点、Bresenham画圆法中任选一种,完成圆的绘制。
四、实验方法与步骤
打开vc++6.0,新建一个工程,再在工程里面建一个.cpp文件,编辑程序,编译连接后执行即可。
程序如下
bresenham画线法:
#include
#include
int bresenham(int x0,int y0,int x1,int y1,int color) {
int x,y,dx,dy,e,i;
dx=x1-x0;
dy=y1-y0;
e=-dx;
y=y0;
for(x=x0;x<=x1;x++)
{
putpixel(x,y,color);
e+=2*dy;
if(e>=0)
{ y++;
e-=2*dx;
}
}
return 0;
}
int main()
{
initgraph(640,480);
bresenham(0,0,500,200,255);
while(!kbhit())
{
}
closegraph();
return 0;
}
Bresenham画圆法:
#include
#include
int circlepoints(int x,int y,int color)
{
putpixel(255+x,255+y,color);
putpixel(255+y,255+x,color);
putpixel(255-x,255+y,color);
putpixel(255+y,255-x,color);
putpixel(255-x,255-y,color);
putpixel(255-y,255-x,color);
putpixel(255+x,255-y,color);
putpixel(255-y,255+x,color);
return 0;
}
int bresenhamcircle(int r,int color)
{
int x,y,d;
x=0;
y=r;
d=3-2*r;
while(x<=y)
{
circlepoints(x,y,color);
if(d<0)
d+=4*x+6;
else
{
d=d+4*(x-y)+10;
y--;
}
x++;
}
return 0;
}
int main()
{
initgraph(640,480);
bresenhamcircle(100,255);
while(!kbhit())
{
}
closegraph();
return 0;
}
五、实验结果记录与分析实验结果如下:
六、疑难问题报告
湖北民族学院信息工程学院实验报告
(数字媒体技术专业用)
班级:0312413姓名:谌敦斌学号:031241318实验成绩:
实验时间:2013年10 月29 日9、10 节实验地点:数媒实验室课程名称:计算机图形学基础教程实验类型:设计型 实验题目:多边形的填充算法和曲线的绘制
一、实验目的
通过本次实验,熟练掌握种子填充算法和多边形扫描线填充算法以及bezier曲线或者B样条曲线的基本绘制算法,能够独立在vc环境下实现任意多边形的填充和一般曲线的绘制,进一步熟悉opengl的语法结构和强大的绘图功能,增强多媒体底层程序绘图能力。
二、实验环境(软件、硬件及条件)
Microsoft vc++6.0 多媒体计算机
三、实验内容
1.选择种子填充算法或者多边形的扫描线算法完成多边形的填充。
2.选择bezier曲线或者B样条曲线算法完成曲线的绘制。
四、实验方法与步骤
打开vc++6.0,新建一个工程,再在工程里面建一个.cpp文件,编辑
程序,编译连接后执行即可。
程序如下:
多边形扫描线填充算法:
//sweep.h
#ifndef SWEEP_H
#define SWEEP_H
struct Edge {
int nxty;
int curx;
int dx, dy;
Edge *nxt;
};
void sweep(int p[][2], int n, void (*setPixel)(int, int));
#endif
//sweepline.cpp
#include
#include
#include
#include "sweep.h"
void myInit();
void setPixel(int x, int y);
void myDisplay();
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(640, 480);
glutInitWindowPosition (100, 150);
glutCreateWindow("SweepLine");
glutDisplayFunc(&myDisplay);
myInit();
glutMainLoop();
return 0;
}
void setPixel(int x, int y) {
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
}
void myInit() {
glClearColor(1.0, 1.0, 1.0, 0.0);