计算机图形学实验报告.doc_第1页
计算机图形学实验报告.doc_第2页
计算机图形学实验报告.doc_第3页
计算机图形学实验报告.doc_第4页
计算机图形学实验报告.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学生学号实验课成绩武汉理工大学学 生 实 验 报 告 书实验课程名称 计算机图形学 开 课 学 院 计算机科学与技术学院 指导老师姓名 付国江 学 生 姓 名 学生专业班级 2012 2013学年 第 1学期实验课程名称: 软件工具与环境 实验项目名称橡皮筋技术的实现实验成绩实验者专业班级1组别同组者实验日期 年 月 日第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述)运用OpenGl技术实现橡皮技术,使得生成直线终点随鼠标移动而改变。二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#includeint iPointNum=0;int x1=0,x2=0,y1=0,y2=0;int winWidth=400,winHeight=300;void Initial(void)glClearColor(0.0f,0.0f,0.0f,0.0f);void ChangeSize(int w,int h)winWidth=w;winHeight=h;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,winWidth,0.0,winHeight);void Display(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();void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse)if(button = GLUT_LEFT_BUTTON & action = GLUT_DOWN)if(iPointNum = 0|iPointNum=2)iPointNum=1;x1=xMouse;y1=winHeight-yMouse;elseiPointNum=2;x2=xMouse;y2=winHeight-yMouse;glutPostRedisplay();if(button=GLUT_RIGHT_BUTTON&action=GLUT_DOWN)iPointNum=0;glutPostRedisplay();void PassiveMouseMove(GLint xMouse,GLint yMouse)if(iPointNum =1)x2=xMouse;y2=winHeight-yMouse;glutPostRedisplay();int main(int argc,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();return 0;三、主要仪器设备及耗材个人计算机 CC+学习试验系统第二部分:实验调试与结果分析(可加页)一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)测试1:二、 实验小结、建议及体会第一次试验,通过上机,对计算机图形学运用编程画图有了初步的了解,也对OpenGl有关知识有了了解,通过调试实现了橡皮筋技术。当然,实验时也出现了不少问题,但通过调试与查资料,最终完成了本次试验。实验课程名称: 软件工具与环境 实验项目名称直线的扫描转换实验成绩实验者专业班级组别同组者实验日期 年 月 日第一部分:实验分析与设计(可加页)三、 实验内容描述(问题域描述)选择一种方法完成直线的扫描转换,本次选用DDA方法生成四、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)DDA画线算法程序:void DDALine(int x0,int y0,int x1,int y1,int color) int x; float dx, dy, y, k; dx = x1-x0; dy=y1-y0; k=dy/dx,;y=y0; for (x=x0;x x1;x+) drawpixel (x, int(y+0.5), color); y=y+k; 源代码#include void LineDDA(int x0,int y0,int x1,int y1) int x, dy, dx, y; float m; 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; void myDisplay(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(); void Init() glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); void Reshape(int w, int h) glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); int main(int argc, char *argv) glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow(); Init(); glutDisplayFunc(myDisplay); glutReshapeFunc(Reshape); glutMainLoop(); return 0; 三、主要仪器设备及耗材个人计算机 CC+学习试验系统第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)、实验小结、建议及体会通过本次试验对DDA算法的概念与实现有了了解,并通过上机编程实现了直线的生成,同时也尝试其他方法对直线的生成。当然,实验时也出现了不少问题,但通过调试与查资料,最终完成了本次试验。实验课程名称: 软件工具与环境 实验项目名称圆的扫面转换实验成绩实验者专业班级组别同组者实验日期 年 月 日第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述)运用中点Bresenham算法实现圆的扫描转换。二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)void Bresenhamline (int x0,int y0,int x1, int y1,int color) int x, y, dx, dy; float k, e; dx = x1-x0;dy = y1- y0;k=dy/dx; e=-0.5; x=x0,;y=y0; for (i=0;idx;i+) drawpixel (x, y, color); x=x+1;e=e+k; if (e0) y+; e=e-1; 源代码#define GLUT_DISABLE_ATEXIT_HACK #include #includevoid Initial(void)glClearColor(1.0f, 1.0f, 1.0f, 1.0f); /设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); /设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0);void SetPixel(float x,float y)/绘制一个点glPointSize(2);glBegin(GL_POINTS);glVertex2f(x,y);glEnd();void CirclePoint(GLint x,GLint y)/八分法画圆 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);void MidBresenhamLineCircle(GLint r)/中点Bresenham法画圆int x,y,d;x=0;y=r;d=1-r;while(x=y)CirclePoint(x,y);if(d0)d+=2*x+3;elsed+=2*(x-y)+5;y-;x+;void Display(void)glClear(GL_COLOR_BUFFER_BIT); /用当前背景色填充窗口glColor3f(0.0f, 0.0f, 0.0f); /设置当前的绘图颜色为黑色MidBresenhamLineCircle(30); glFlush(); /处理所有的OpenGL程序int main(int argc, char* argv) glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /初始化窗口的显示模式glutInitWindowSize(400,300); /设置窗口的尺寸glutInitWindowPosition(100,120); /设置窗口的位置glutCreateWindow(画圆); /创建一个名为矩形的窗口glutDisplayFunc(Display); /设置当前窗口的显示回调函数Initial(); /完成窗口初始化glutMainL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论