实验《计算机图形学》课内实验报告(实验二).doc

实验《计算机图形学》课内实验报告(实验二).doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验《计算机图形学》课内实验报告(实验二).doc

及学号: 及学号: 学院: 班级: 踝程名称: 实验题目: 11 *1 MM 冻”电力犬斥 《计算机图形学》 课内实验报告 学生姓名: 理学院 计算机图形学 基本图形的生成算法 讲师 讲师 2014年4月1日 TOC \o 1-5 \h \z 一、 实验题目 1 HYPERLINK \l bookmark4 \o Current Document \h 二、 实验目的 1 HYPERLINK \l bookmark6 \o Current Document \h 三、 实验内容 1 HYPERLINK \l bookmark8 \o Current Document \h 四、 实验结果 2 HYPERLINK \l bookmark10 \o Current Document \h 五、 实验体会或遇到问题 23 基本图形的生成算法 二 实验目的 通过实验,进一步理解直线段扫描转换的DDA算法、中点bresenham算 法及bresenham算法的基本原理; 掌握以上算法生成直线段的基本过程; 通过编程,会在C/C++环境下完成用DDA算法、中点bresenham算法及 bresenham算法对任意直线段的扫描转换。 三 实验内容 点的显示与属性 对VC中画点的函数PutPixel与获取点函数GetPixel分别用于在指定位 置画指定大小颜色的点或获取指定位置的点的颜色,而在OpenGL屮可以用 属性选择来控制画点还是画线或多边形等。 在VC中PutPixel的前两个参数为点的坐标位置,后面的参数为颜色属 性来实现画点,在OpenGL中位于gibegin和glend之间的是数据点,通过选 取gibegin的属性为GL_POINTS则数据点显示为点。 常用画线算法与实现 1) DDA算法,按四舍五入法取点的简单算法,编程容易,但计算量大。 2) 中点算法,是通过递推确定取点的方法,由于计算加与减,没有乘 法运算所以计算量少,是常用的算法,此算法是判断实际点位于相邻两个像 素点的中点的上方,如果是则取上边的像点,否则取下边的像素点(当斜率 绝对值大于1时按左右取)。 3) 实现,可VC中实现以上算法,OpenGL中已有相应函数画线。 面的生成与填充 1) 用VC实现区域填充屮的扫描转换,用图像填充区域以及字符输出 等,可用扫描线算法等实现,用OpenGL则可用填充函数及材质设置函数实 现优质显示。 2) 由面生成空间图形可以用VC的图形变换实现不同角度效果,并用 裁剪算法及隐藏面消除算法实现真实感效果,但OpenGL实现则要简单些。 四、实验结果 1.DDA算法画线 图1 DDA算法画线 源程序: #include graphics.h # includeconio.h #include math.h #define ROUND(a) ((int)(a+0.5)) #define OX 320 #define OY 240 void lineDDA (int xa, int ya, int xb, int yb, int color); void setpixel (int x, int y, int color); main(){ int gdrive二DETECT, gmode=0; initgraph(gdrive, gmode, Hd:\\tcn); setbkcolor(BLACK); line (0, OY, 2*OX, OY); line (OX, 0, OX, 2*OY); lineDDA (300, 300, 0, 0, WHITE); getch (); closegraph(); return 0; } void lineDDA (int xa, int ya, int xb, int yb, int color) { int dx = xb - xa; int dy = yb - ya; int steps, i; float xlncrement, ylncrement; float x=xa; float y=ya; if(abs(dx) abs(dy)) steps = abs(dx); else steps = abs(dy); xlncrement = dx/(float)steps; ylncrement = dy/(float)steps; putpixel (ROUND(x), ROUND(y), color); for (i=0; isteps; i++) { x += xlncrement; y + 二 ylncrement; setpixel (ROUND(x), ROUND(y), color); } return; } void setpixel (int x, in

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档