计算机图形学实验报告.docx

上传人:b****7 文档编号:9520861 上传时间:2023-02-05 格式:DOCX 页数:14 大小:83.99KB
下载 相关 举报
计算机图形学实验报告.docx_第1页
第1页 / 共14页
计算机图形学实验报告.docx_第2页
第2页 / 共14页
计算机图形学实验报告.docx_第3页
第3页 / 共14页
计算机图形学实验报告.docx_第4页
第4页 / 共14页
计算机图形学实验报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算机图形学实验报告.docx

《计算机图形学实验报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告.docx(14页珍藏版)》请在冰豆网上搜索。

计算机图形学实验报告.docx

计算机图形学实验报告

学生学号

实验课成绩

武汉理工大学

学生实验报告书

 

实验课程名称计算机图形学

开课学院计算机科学与技术学院

指导老师姓名付国江

学生姓名

学生专业班级

 

2012—2013学年第1学期

 

实验课程名称:

软件工具与环境

实验项目名称

橡皮筋技术的实现

实验成绩

实验者

专业班级

1

组别

同组者

实验日期

年月日

第一部分:

实验分析与设计(可加页)

一、实验内容描述(问题域描述)

运用OpenGl技术实现橡皮技术,使得生成直线终点随鼠标移动而改变。

 

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

#include

intiPointNum=0;

intx1=0,x2=0,y1=0,y2=0;

intwinWidth=400,winHeight=300;

voidInitial(void)

{

glClearColor(0.0f,0.0f,0.0f,0.0f);

}

voidChangeSize(intw,inth)

{

winWidth=w;

winHeight=h;

glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0,winWidth,0.0,winHeight);

}

voidDisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0f,1.0f,1.0f);

if(iPointNum>=1)

{

glBegin(GL_LINES);

glVertex2i(x1,y1);

glVertex2i(x2,y2);

glEnd();

}

glutSwapBuffers();

}

voidMousePlot(GLintbutton,GLintaction,GLintxMouse,GLintyMouse)

{

if(button==GLUT_LEFT_BUTTON&&action==GLUT_DOWN)

{

if(iPointNum==0||iPointNum==2)

{

iPointNum=1;

x1=xMouse;

y1=winHeight-yMouse;

}

else

{

iPointNum=2;

x2=xMouse;y2=winHeight-yMouse;

glutPostRedisplay();

}

}

if(button==GLUT_RIGHT_BUTTON&&action==GLUT_DOWN)

{

iPointNum=0;

glutPostRedisplay();

}

}

voidPassiveMouseMove(GLintxMouse,GLintyMouse)

{

if(iPointNum==1)

{

x2=xMouse;

y2=winHeight-yMouse;

glutPostRedisplay();

}

}

intmain(intargc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);

glutInitWindowSize(400,300);

glutInitWindowPosition(100,100);

glutCreateWindow("橡皮筋技术");

glutDisplayFunc(Display);

glutReshapeFunc(ChangeSize);

glutMouseFunc(MousePlot);

glutPassiveMotionFunc(PassiveMouseMove);

Initial();

glutMainLoop();

return0;

}

三、主要仪器设备及耗材

个人计算机C\C++学习试验系统

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

测试1:

 

 

二、实验小结、建议及体会

第一次试验,通过上机,对计算机图形学运用编程画图有了初步的了解,也对OpenGl有关知识有了了解,通过调试实现了橡皮筋技术。

当然,实验时也出现了不少问题,但通过调试与查资料,最终完成了本次试验。

 

实验课程名称:

软件工具与环境

实验项目名称

直线的扫描转换

实验成绩

实验者

专业班级

组别

同组者

实验日期

年月日

第一部分:

实验分析与设计(可加页)

三、实验内容描述(问题域描述)

选择一种方法完成直线的扫描转换,本次选用DDA方法生成

四、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

DDA画线算法程序:

voidDDALine(intx0,inty0,intx1,inty1,intcolor)

{intx;

 floatdx,dy,y,k;

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

 k=dy/dx,;y=y0;

 for(x=x0;x

 {drawpixel(x,int(y+0.5),color);

     y=y+k;

 }

}

源代码

#include

voidLineDDA(intx0,inty0,intx1,inty1)

{

intx,dy,dx,y;

floatm;

dx=x1-x0;

dy=y1-y0;

m=dy/dx;

y=y0;

glColor3f(0.0f,0.0f,0.0f);

for(x=x0;x<=x1;x++)

{

glBegin(GL_POINTS);

glVertex2i(x,(int)(y+0.5));

glEnd();

y+=m;

}

}

voidmyDisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0f,1.0f,0.0f);

LineDDA(0,0,200,300);

glBegin(GL_LINES);

glColor3f(1.0f,0.0f,0.0f);

glVertex2f(100.0f,0.0f);

glColor3f(0.0f,1.0f,0.0f);

glVertex2f(180.0f,240.0f);

glEnd();

glFlush();

}

voidInit()

{

glClearColor(0.0,0.0,0.0,0.0);

glShadeModel(GL_FLAT);

}

voidReshape(intw,inth)

{

glViewport(0,0,(GLsizei)w,(GLsizei)h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h);

}

intmain(intargc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);

glutInitWindowPosition(100,100);

glutInitWindowSize(400,400);

glutCreateWindow("");

Init();

glutDisplayFunc(myDisplay);

glutReshapeFunc(Reshape);

glutMainLoop();

return0;}

 

 

三、主要仪器设备及耗材

个人计算机C\C++学习试验系统

 

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

 

 

、实验小结、建议及体会

通过本次试验对DDA算法的概念与实现有了了解,并通过上机编程实现了直线的生成,同时也尝试其他方法对直线的生成。

当然,实验时也出现了不少问题,但通过调试与查资料,最终完成了本次试验。

 

实验课程名称:

软件工具与环境

实验项目名称

圆的扫面转换

实验成绩

实验者

专业班级

组别

同组者

实验日期

年月日

第一部分:

实验分析与设计(可加页)

一、实验内容描述(问题域描述)

运用中点Bresenham算法实现圆的扫描转换。

 

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

 

voidBresenhamline(intx0,inty0,intx1,inty1,intcolor)

{intx,y,dx,dy;

 floatk,e;

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

 e=-0.5;x=x0,;y=y0;

 for(i=0;i

 {drawpixel(x,y,color);

   x=x+1;e=e+k;

   if(e0)

   {y++;e=e-1;}

 }

}

 

源代码

#defineGLUT_DISABLE_ATEXIT_HACK

#include

#include

voidInitial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f);//设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION);//设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0);

}

voidSetPixel(floatx,floaty)//绘制一个点

{

glPointSize

(2);

glBegin(GL_POINTS);

glVertex2f(x,y);

glEnd();

}

voidCirclePoint(GLintx,GLinty)//八分法画圆

{

SetPixel(100+x,100+y);SetPixel(100-x,100+y);

SetPixel(100+x,100-y);SetPixel(100-x,100-y);

SetPixel(100+y,100+x);SetPixel(100-y,100+x);

SetPixel(100+y,100-x);SetPixel(100-y,100-x);

}

voidMidBresenhamLineCircle(GLintr)//中点Bresenham法画圆

{

intx,y,d;

x=0;y=r;d=1-r;

while(x<=y)

{

CirclePoint(x,y);

if(d<0)d+=2*x+3;

else

{

d+=2*(x-y)+5;

y--;

}

x++;

}

}

voidDisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT);//用当前背景色填充窗口

glColor3f(0.0f,0.0f,0.0f);//设置当前的绘图颜色为黑色

MidBresenhamLineCircle(30);

glFlush();//处理所有的OpenGL程序

}

intmain(intargc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//初始化窗口的显示模式

glutInitWindowSize(400,300);//设置窗口的尺寸

glutInitWindowPosition(100,120);//设置窗口的位置

glutCreateWindow("画圆");//创建一个名为矩形的窗口

glutDisplayFunc(Display);//设置当前窗口的显示回调函数

Initial();//完成窗口初始化

glutMainLoop();//启动主GLUT事件处理循环

return0;

}

 

三、主要仪器设备及耗材

个人计算机C\C++学习试验系统

 

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

 

三、实验小结、建议及体会

最后一次实验,通过对之前直线画法的运用,尝试运用八分法画圆弧与重点Bresenham算法生成圆。

当然,实验时也出现了不少问题,但通过调试与查资料,最终完成了本次试验。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1