计算机图形学实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

实验一直线的DDA算法

一、【实验目的】

1.掌握DDA算法的基本原理。

2.掌握DDA直线扫描转换算法。

3.深入了解直线扫描转换的编程思想。

二、【实验内容】

1.利用DDA的算法原理,编程实现对直线的扫描转换。

2.加强对DDA算法的理解和掌握。

三、【测试数据及其结果】

四、【实验源代码】

#include

#include

#include

#include

GLsizei winWidth=500;

GLsizei winHeight=500;

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0);

}

void DDALine(int x0,int y0,int x1,int y1) {

glColor3f(1.0,0.0,0.0);

int dx,dy,epsl,k;

float x,y,xIncre,yIncre;

dx=x1-x0; dy=y1-y0;

x=x0; y=y0;

if(abs(dx)>abs(dy)) epsl=abs(dx);

else epsl=abs(dy);

xIncre=(float)dx/(float)epsl;

yIncre=(float)dy/(float)epsl;

for(k=0;k<=epsl;k++)

{

glPointSize(3);

glBegin(GL_POINTS);

glV ertex2i(int(x+0.5),(int)(y+0.5));

glEnd();

x+=xIncre;

y+=yIncre;

}

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180);

glFlush();

}

void winReshapeFcn(GLint newWidth, GLint newHeight)

{

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight));

glClear(GL_COLOR_BUFFER_BIT);

winWidth=newWidth;

winHeight=newHeight;

}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(400,300);

glutInitWindowPosition(100,120);

glutCreateWindow("line");

Initial();

glutDisplayFunc(Display);

glutReshapeFunc(winReshapeFcn);

glutMainLoop();

return 0;

}

实验二Bresenham绘制直线和圆

一、【实验目的】

1.掌握Bresenham算法扫描转换圆和直线的基本原理。

二、【实验内容】

1.利用Bresenham算法扫描转换圆和直线的基本原理编程实现对圆和直线的扫描转换。

三、【测试数据及其结果】

四、【实验源代码】

绘制直线:

#include

#include

#include

#include

GLsizei winWidth=500;

GLsizei winHeight=500;

void lineBres(int x0, int y0, int xEnd, int yEnd) {

glColor3f(0.0, 0.0, 1.0);

int dx=fabs(xEnd-x0), dy=fabs(yEnd-y0);

int p=2*dy-dx;

int twoDy=2*dy, twoDyMinusDx=2*(dy-dx); int x, y;

if (x0>xEnd)

{

x=xEnd;

y=yEnd;

xEnd=x0;

}

else{

x=x0;

y=y0;

}

glPointSize(6);

glBegin(GL_POINTS);

glVertex2i(x, y);

glEnd();

while (x

{

x++;

if (p<0)

p+=twoDy;

else{

y++;

p+=twoDyMinusDx;

}

glPointSize(2);

glBegin(GL_POINTS);

glVertex2i(x, y);

glEnd();

}

}

void init (void)

{

glClearColor(1.0, 1.0, 1.0, 1.0);

glShadeModel(GL_FLAT);

}

void display (void)

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); lineBres(10, 10, 400, 300);

glFlush();

}

void winReshapeFcn(GLint newWidth, GLint newHeight)

{

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight));

glClear(GL_COLOR_BUFFER_BIT);

winWidth=newWidth;

winHeight=newHeight;

}

void main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(10, 10);

glutInitWindowSize(winWidth, winHeight);

glutCreateWindow("lineBres");

init();

相关文档
最新文档