华中科技大学计算机图形学实验报告——画直线、日地月模型

上传人:第*** 文档编号:69715759 上传时间:2019-01-14 格式:PDF 页数:21 大小:496.97KB
返回 下载 相关 举报
华中科技大学计算机图形学实验报告——画直线、日地月模型_第1页
第1页 / 共21页
华中科技大学计算机图形学实验报告——画直线、日地月模型_第2页
第2页 / 共21页
华中科技大学计算机图形学实验报告——画直线、日地月模型_第3页
第3页 / 共21页
华中科技大学计算机图形学实验报告——画直线、日地月模型_第4页
第4页 / 共21页
华中科技大学计算机图形学实验报告——画直线、日地月模型_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《华中科技大学计算机图形学实验报告——画直线、日地月模型》由会员分享,可在线阅读,更多相关《华中科技大学计算机图形学实验报告——画直线、日地月模型(21页珍藏版)》请在金锄头文库上搜索。

1、计算机图形学基础实验报告计算机图形学基础实验报告 专业:专业: 班级:班级: 姓名:姓名: 学号:学号: 日期:日期: OpenGLOpenGL 简介简介 (1)OpenGL 作为一个性能优越的图形应用程序设计界面(API),它独立 于硬件和窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络 环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的 标准图形库。 它具有以下功能。 1. 模型绘制 2. 模型观察 在建立了三维景物模型后,就需要用 OpenGL 描述如何观察所建立的三维 模型。 3. 颜色模式的指定 OpenGL 应用了一些专门的函数来指定三维模型的颜色。

2、 4. 光照应用 用 OpenGL 绘制的三维模型必须加上光照才能更加与客观物体相似。 5. 图象效果增强 OpenGL 提供了一系列的增强三维景观的图象效果的函数,这些函数通过 反走样、混合和雾化来增强图象的效果。 6. 位图和图象处理 OpenGL 还提供了专门对位图和图象进行操作的函数。 7. 纹理映射 8. 实时动画 9. 交互技术 图 1.1 OpenGL 图形处理系统的层次结构 (2)OpenGL 的操作步骤 在 OpenGL 中进行的图形操作直至在计算机屏幕上渲染绘制出三维图形景观 的基本步骤如下: 1. 根据基本图形单元建立景物模型,得到景物模型的数学描述(OpenGL 中把点

3、、线、多边形、图像和位图都作为基本图形单元); 2. 把景物模型放在三维空间中的合适的位置,并且设置视点(Viewpoint) 以观察所感兴趣的景观; 3. 计算模型中所有物体的色彩,同时确定光照条件、纹理粘贴方式等; 4. 把景物模型的数学描述及其色彩信息转换至计算机屏幕上的像素,这个 过程也就是光栅化(rasterization)。 在这些步骤的执行过程中,OpenGL 可能执行其他的一些操作,例如自动消 隐处理等。另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对象素 数据进行操作。 (3)OpenGL 的组成 OpenGL 不是一种编程语言,而是一种 API(应用程序编程接口),它

4、实际 上是一种图形与硬件的接口,包括了多个图形函数。OpenGL 主要由以下函数库 组成。 1. OpenGL 核心库 OpenGL 核心库中包含了 115 个最基本的命令函数,它们都是以“gl”为前 缀,可以在任何 OpenGL 的工作平台上应用。这部分函数用于常规的、核心的图 形处理,如建立各种各样的几何模型,产生光照效果,进行反走样以及进行纹 理映射,以及进行投影变换等等。由于许多函数可以接收不同数据类型的参数, 因此派生出来的函数原形有 300 多个。 2. OpenGL 实用程序库 OpenGL 的实用程序库包含有 43 个函数,以“glu”为前缀,在任何 OpenGL 平台都可以应

5、用。这部分函数通过调用核心库的函数,来实现一些较为复杂的 操作,如纹理映射、坐标变换、网格化、曲线曲面以及二次物体(圆柱、球体 等)绘制等。 3. OpenGL 编程辅助库 OpenGL 的辅助库包含 31 个函数,以“aux”为前缀,但它们不能在所有的 OpenGL 平台上使用。OpenGL 的辅助库的函数主要用于窗口管理、输入输出处理 以及绘制一些简单的三维形体。 4. OpenGL 实用程序工具包 OpenGL 实用程序工具包(OpenGL utility toolkit,GLUT)包含 30 多个函 数,函数名前缀是“glut”。其中的函数主要提供基于窗口的工具,如窗口系 统的初始化,

6、多窗口管理,菜单管理,字体以及一些较复杂物体的绘制等。由 于 glut 库中的窗口管理函数是不依赖于运行环境的,因此 OpenGL 中的工具库 可以在所有的 OpenGL 平台上运行,在后面的示例中,我们均使用 glut 库建立 OpenGL 程序运行框架。 5. Windows 专用库 Windows 专用库函数包含有 6 个,每个函数以 wgl 开头,用于连接 OpenGL 和 Windows NT,这些函数用于在 Windows NT 环境下的 OpenGL 窗口能够进行渲 染着色,在窗口内绘制位图字体以及把文本放在窗口的某一位置等这些函数把 Windows 和 OpenGL 揉合在一起

7、。 6. Win32 API 函数库 这部分函数没有专用的前缀,主要用于处理像素存储格式和双帧缓存。 实验一实验一 一、实验目的一、实验目的 理解 glut 程序框架;理解窗口到视区的变换;理解 OpenGL 实现动画 的原理理解所学的画直线以及圆的各种算法,利用所学的算法,绘制基本 的直线以及圆。 二、二、实验内容实验内容 1.添加代码实现中点 Bresenham 算法画直线 2.添加代码实现改进 Bresenham 算法画直线 3.添加代码实现圆的绘制(可以适当对框架坐标系进行修改) 三、实验算法分析三、实验算法分析 1. 中点 Bresenham 算法:根据直线的斜率确定或选择变量在 x

8、 或 y 方 向上每次递增一个单位,而另一方向的增量为 1 或 0,它取决于实际直线与相 邻象素点的距离,这一距离称为误差项。 判别式: 则有: 误差项的递推:d=0: ) 1(5 . 0)5 . 0, 1(),(bxkyyxFyxFd iiiiMM )0( )0( 1 1 1 1 dy dy y xx i i i ii bxky yxFd ii ii ) 1(5 . 0 )5 . 0, 1( 1 bxky yxFd ii ii )2(5 . 1 )5 . 1, 2( 2 kd kbxkyd ii 1 1) 1(5 . 0 1 2 bxky yxFd ii ii ) 1(5 . 0 )5 .

9、0, 1( 1 bxky yxFd ii ii )2(5 . 0 )5 . 0, 2( 2 kd kbxkyd ii 1 2 ) 1(5 . 0 初始值 d 的计算: 则有:0k1 时 Bresenham 算法的算法步骤为: (1)输入直线的两端点 P0(x0,y0)和 P1(x1,y1)。 (2)计算初始值x、y、d=0.5-k、x=x0、y=y0; (3)绘制点(x,y)。判断 d 的符号;若 d0) then d=d-1if (e0) then e=e-1 改进 2:用 E=2ex 来替换 e; e 初=-0.5E 初=-0.5*2x=-x 每走一步有 e=e+k每走一步有 E=(e+k

10、)*2x=E+2y if (e0) then e=e-1if (e0) then E=(e-1)*2x=E-2x 算法步骤: (1)输入直线的两端点 P0(x0,y0)和 P1(x1,y1)。 (2)计算初始值x、y、e=-e=-x x、x=x0、y=y0。 (3)绘制点(x,y)。 (4)e 更新为 e+2e+2y y,判断 e 的符号。若 e0,则(x,y)更新为(x+1,y+1),同时 将 e 更新为 e-2e-2x x;否则(x,y)更新为(x+1,y)。 (5)当直线没有画完时,重复步骤 3 和 4。否则结束。 3.画圆算法: k kbkxy bxky yxFd 5 . 0 5 .

11、0 ) 1(5 . 0 )5 . 0, 1( 00 00 000 0.5)(d 0.5)(d 1 1 1 1 i i i ii y y y xx 0.5)(d 0.5)(d 1 1 1 1 i i i ii y y y xx 0)(e 0)(e 1 1 1 1 i i i ii y y y xx 八分画圆法 中点 Bresenham 画圆: 构造判别式: 当 d0 时,下一点取 Pu(xi+1,yi); 当 d0 时,下一点取 Pd(xi+1,yi-1)。 d0: d0: 初始值: 用 d-0.25 代替 d 则: 025. 0 025. 0 dd dd 算法步骤: (1)输入圆的半径 R。

12、(2)计算初始值 d=1-Rd=1-R、x=0、y=R。 (3)绘制点(x,y)及其在八分圆中的另外七个对称点。 (x,y) y y=-xy=x 222 )5 . 0() 1()5 . 0, 1(),(RyxyxFyxFd iiiiMM 222 2 )5 . 1()2( )5 . 1, 2( Ryx yxFd ii ii 5)(2 5)(2)5 . 0() 1( 1)5 . 0(2)5 . 0(32) 1( ) 15 . 0() 11( 1 22 222 222 2 ii iiii iiii ii yxd yxyx Ryyxx Ryxd 222 2 )5 . 0()2( )5 . 0, 2(

13、Ryx yxFd ii ii 32 )5 . 0(32) 1( )5 . 0() 11( 1 222 222 2 i iii ii xd Ryxx Ryxd R RR RF yxFd 25. 1 )5 . 0(1 )5 . 0, 1 ( )5 . 0, 1( 22 000 Rd dyxdd dxdd ii i 1 25. 05)(2 25. 032 0 (4)判断 d 的符号。若 d #include #include “stdio.h“ int m_PointNumber = 0; /动画时绘制点的数目 int m_DrawMode = 4;/绘制模式1DDA 算法画直线 /2中点 Bres

14、enham 算法画直线 /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); xIncre = (float)dx / epsl ; yIncre = (float)dy / epsl ; for(k = 0; k=num-1) printf(“x=%

15、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; / /中点 Bresenham 算法画直线(0x1) 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) printf(“x=%d,y=%dn“, x, y); brea

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

当前位置:首页 > 办公文档 > 规章制度

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号