计算机图形学上机报告(共13页).doc

上传人:飞****2 文档编号:13989966 上传时间:2022-05-02 格式:DOC 页数:13 大小:154.50KB
返回 下载 相关 举报
计算机图形学上机报告(共13页).doc_第1页
第1页 / 共13页
计算机图形学上机报告(共13页).doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《计算机图形学上机报告(共13页).doc》由会员分享,可在线阅读,更多相关《计算机图形学上机报告(共13页).doc(13页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上计算机图形学上机实验报告计算机科学与技术学院班 级: 学 号: 姓 名: 指导教师: 完成日期: 实验一:基本图元绘制一. 实验目的1. 了解如何利用OpenGL库绘制图形2. 理解glut程序框架3. 理解窗口到视区的变换4. 理解OpenGL实现动画的原理二. 实验内容1. 实现中点Bresenham算法画直线2. 实现改进Bresenham算法画直线3. 实现圆的绘制三. 实验结果1.DDA算法画直线2. 中点Bresenham算法画直线3. 改进Bresenham算法画直线4. Bresenham算法画圆四. 源程序#include #include #inc

2、lude stdio.hint m_PointNumber = 0; /动画时绘制点的数目int m_DrawMode = 4; /绘制模式 1 DDA算法画直线 / 2 中点Bresenham算法画直线 / 3 改进Bresenham算法画直线 / 4 八分法绘制圆 / 5 四分法绘制椭圆/绘制坐标线void DrawCordinateLine(void)int i = 0 ;/坐标线为黑色glColor3f(0.0f, 0.0f ,0.0f);glBegin(GL_LINES); for (i=10;i abs(dy) epsl = abs(dx);else epsl = abs(dy);

3、xIncre = (float)dx / epsl ;yIncre = (float)dy / epsl ;for(k = 0; k=num-1) printf(x=%f,y=%f,取整后 x=%d,y=%dn, x, y, (int)(x+0.5),(int)(y+0.5);break;x += xIncre;y += yIncre;if(x = 25 | y = 25) break;void BresenhamLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num)glColor3f(1.0f,0.0f,0.0f);

4、if(num = 1)printf(中点Bresenham算法画直线:各点坐标及判别式的值n);else if(num=0)return;/画线算法的实现GLsizei dx,dy,d,UpIncre,DownIncre,x,y,xend=0;if(x0x1)x=x1;x1=x0;x0=x;y=y1;y1=y0;y0=y;x=x0;y=y0;dx=x1-x0;dy=y1-y0;d=dx-2*dy;UpIncre=2*dx-2*dy;DownIncre=-2*dy;while (x=num-1) break;x+;if(d= 50 | y = 50) break;void Bresenham2L

5、ine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num)glColor3f(1.0f,0.0f,0.0f);if(num = 1)printf(改进的Bresenham算法画直线:各点坐标及判别式的值n);else if(num=0)return;/画线算法的实现GLsizei x,y,dx,dy,e;dx=x1-x0;dy=y1-y0;e=-dx;x=x0;y=y0;while (x=num-1) break;x+;e=e+2*dy;if(e0)y+;e=e-2*dx;if(x = 50 | y = 50) break;

6、void BresenhamCircle(GLsizei x, GLsizei y, GLsizei r, GLsizei num)glColor3f(1.0f,0.0f,0.0f);if(num = 1)printf(Bresenham算法画圆:各点坐标及判别式的值n);x=0,y=r;GLsizeid=1-r;while (x=num) break;putpixel(y,x);if (x=num) break;putpixel(-y,x);if (x=num) break;putpixel(-x,y);if (x=num) break;putpixel(-x,-y);if (x=num)

7、break;putpixel(-y,-x);if (x=num) break;putpixel(y,-x);if (x=num) break;putpixel(x,-y);if(d0)d+=2*x+3;elsed+=2*(x-y)+5;y-;x+;/初始化窗口void Initial(void) / 设置窗口颜色为蓝色 glClearColor(1.0f, 1.0f, 1.0f, 1.0f);/ 窗口大小改变时调用的登记函数void ChangeSize(GLsizei w, GLsizei h)if(h = 0)h = 1;/ 设置视区尺寸 glViewport(0, 0, w, h);/

8、重置坐标系统glMatrixMode(GL_PROJECTION);glLoadIdentity();/ 建立修剪空间的范围 if (w = h) glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0); else glOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0);/ 在窗口中绘制图形void ReDraw(void)/用当前背景色填充窗口glClear(GL_COLOR_BUFFER_BIT);/画出坐标线DrawCordinateLine();switch(m_DrawMode)case

9、1:DDACreateLine(0,0,20,15,m_PointNumber);break;case 2:BresenhamLine(0,0,20,15,m_PointNumber);break;case 3:Bresenham2Line(1,1,8,6,m_PointNumber);break;case 4:BresenhamCircle(5,5,18,m_PointNumber);break;default:break; glFlush();/设置时间回调函数void TimerFunc(int value)if(m_PointNumber = 0)value = 1;m_PointNu

10、mber = value;glutPostRedisplay();glutTimerFunc(500, TimerFunc, value+1);/设置键盘回调函数void Keyboard(unsigned char key, int x, int y) if (key = 1) m_DrawMode = 1;if (key = 2) m_DrawMode = 2;if (key = 3) m_DrawMode = 3;if (key = 4) m_DrawMode = 4;m_PointNumber = 0;glutPostRedisplay();/void main(void)int ma

11、in(int argc, char* argv)glutInit(&argc, argv);/初始化GLUT库OpenGL窗口的显示模式glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(800,600);glutInitWindowPosition(100,100);glutCreateWindow(基本图元绘制程序); glutDisplayFunc(ReDraw); glutReshapeFunc(ChangeSize); glutKeyboardFunc(Keyboard);/键盘响应回调函数glutTimer

12、Func(500, TimerFunc, 1); / 窗口初始化 Initial();glutMainLoop(); /启动主GLUT事件处理循环return 0;实验二:日地月模型一. 实验目的1. 理解OpenGL中的变换过程2. 理解透视投影与平行投影的不同3. 了解深度测试二. 实验内容1. 通过变换调整观察的位置与方向2. 实现太阳、地球和月亮的运动模型三. 实验结果太阳、地球和月亮的运动模型图1.图2.图3.四. 源程序#include #include #include #include void Initial()glEnable(GL_DEPTH_TEST);/ 启用深度测试

13、glFrontFace(GL_CCW);/ 指定逆时针绕法表示多边形正面glClearColor(1.0f, 1.0f, 1.0f, 1.0f );/背景为白色void ChangeSize(int w, int h)if(h = 0)h = 1;/ 设置视区尺寸 glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();/ 设置修剪空间GLfloat fAspect;fAspect = (float)w/(float)h;gluPerspective(45.0, fAspect, 1.0, 500.0);/* if

14、 (w 360.0f)fElect1 = 10.0f; glutSwapBuffers();void TimerFunc(int value) glutPostRedisplay(); glutTimerFunc(100, TimerFunc, 1);int main(int argc, char* argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutCreateWindow(日地月模型);glutReshapeFunc(ChangeSize);glutDisplayFunc(RenderScene); glutTimerFunc(500, TimerFunc, 1);Initial();glutMainLoop();return 0;专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com