实验题目: 基本图形生成算法
实验目的: 了解opengl图形软件包绘制图形的基本过程及其程序框架,并在已有的程序框架中添加代码实现直线和圆的生成算法,演示直线和圆的生成过程,从而加深对直线和圆等基本图形生成算法的理解,掌握多边形填充方法。
实验环境(硬件和软件) HP计算机+GLUT开发库
一、实验要求:
- 理解glut程序框架;
- 理解Opengl实现动画的原理;
- 添加代码实现中点Bresenham算法画直线;
- 添加代码实现改进Bresenham算法画直线;
- 添加代码实现圆的绘制(可以适当对框架坐标系进行修改);
- 适当修改代码实现具有宽度的图形(线刷子和方刷子,选作)。
- 利用OpenGL输出不同属性的点和线段。
- 利用OpenGL输出字符。
- 利用OpenGL实现反走样技术。
二、实验内容及步骤:
实验内容:
1、基本图元生成程序框架,补充代码完成图形的绘制。
2、完成头歌实训平台实验内容:
(1)CG1-v1.0-直线光栅化算法
(2)多边形填充v1.0
3、利用OpenGL实现不同属性的点和线、字符显示、反走样技术。
实验步骤:
DDA算法画直线:
- 通过输入起点(x0,y0)和终点(x1,y1)计算直线斜率k。
- 如果斜率k大于1,那么对y方向取整,否则对x方向取整。
- 根据直线斜率k和已经取整的偏移量(dx和dy),以步长为1绘制直线,逐个计算每个点的坐标并进行绘制。
中点Bresenham算法画直线:
- 输入起点(x0,y0)和终点(x1,y1)。
- 计算x轴和y轴偏移量(dx和dy),并选择两个方向中最大的一个作为最大位移方向。
- 初始化误差项d和两个坐标的初始值。
- 在最大位移方向上绘制每个像素点,同时更新误差项d的值,以判断是否需要在另一个方向上进行移动。
改进Bresenham算法画直线0.f:
- 输入起点(x0,y0)和终点(x1,y1)。
- 计算x轴和y轴偏移量(dx和dy),并选择两个方向中最大的一个作为最大位移方向。
- 初始化误差项d和两个坐标的初始值。
- 在最大位移方向上绘制每个像素点,同时更新误差项d的值,以判断是否需要在另一个方向上进行移动。在更新误差项d的时候,将误差项d乘以0.f,从而在处理斜率k小于1的直线时,能够得到更精确的结果。
八分法绘制圆:
- 输入圆心坐标(x0,y0)和半径r。
- 以圆心为中心,将圆划分为八份,并以45度为步长进行绘制。
- 在每个象限上分别计算出第一个点的坐标,并以扫描线的方式逐个绘制圆弧上的像素。
利用OpenGL实现不同属性的点和线、字符显示、反走样技术实验中按照所提供的部分核心代码查略相关函数,掌握知识点,对代码进行完善,不断调试最终得出想要的结果。
实验结果与分析:
基本图元绘制:(1)
(2)
(3)
(4)
点和线:
字符显示:
反走样: