图形学实验报告.docx课程设计报告
实验名称: 计算机图形学实验
1
1
实验一 1
实验二 3
3实验结果 3
实验一结果 3
实验二结果 8
8
5源代码 9
:
目的:
利用OpenGL库,对课本的图形原理进行C语言编程,从而实现各种绘图算 法。从中进一步了解计算机图形学的原理,加深对课程内容的理解,逐步掌握算 法原理的实现过程。另外,初步掌握OpenGL的基本使用方法,能够使用其进行 简单图形、图素的绘制。
实验要求:
I.
理解glut程序框架
理解窗口到视区的变换
理解OpenGL实现动画的原理
⑷添加代码实现中点Bresenham算法画直线
添加代码实现改进Bresenham算法画直线
添加代码实现圆的绘制(可以适当对框架坐标系进行修改
II.
理解OpenGL中的变换过程
理解透视投影与平行投影的不同
添加代码实现太阳、地球和月亮的运动模型
了解深度测试
通过变换调整观察的位置与方向
加入光照模型
:
实验一、利用各种算法实现直线与圆的扫描转换,在对应图中显示的同时,还
要在控制台中打印显示像素点的坐标,以及误差d, e的值。
中点Bresenham算法
.利用中点Bresenham算法画出直线,其中直线的斜率要求为:0〈=k〈=l.
.具体参数如下:
xO, yO起点坐标
xl, yl终点坐标
num 扫描转换时从起点开始输出的点的数目
.算法实现流程步骤:
对斜率k以及扫描点个数进行可行性判断。
通过起始点和终点,确定最大位移方向。
算出dO,以及dx, dy,由最大位移方向确定
dx, dy在不同情况下的增量Uplncre, Downlncre。
通过循环根据di逐步确定xi, yi,从而完成直线绘制。
(2)改进的Bresenham算法
.利用改进的Bresenham算法画出直线,其中直线的斜率要求为:0〈=k〈=l.
.具体参数如下:
xO, yO起点坐标
xl, yl终点坐标
num 扫描转换时从起点开始输出的点的数目
.算法实现流程步骤:
对斜率k以及扫描点个数进行可行性判断。
通过起始点和终点,确定最大位移方向。
算出dx, dy,由最大位移方向确定变化量e。
通过循环根据逐步确定xi, yi,以及修改ei的值 从而完成直线绘制。
(3) Bresenham算法画圆
.利用圆对称性八分法,以及Bresenham算法画圆。
.具体参数如下:
x, y 圆心坐标
R 圆半径
num 扫描转换时从起点开始输出的点的数目
.算法实现流程步骤:
设置起点坐标,以及误差dO初始值。
导出d在不同情况下的递推公式,以及x和y变化的范围(在 八分之一圆弧范围内)。
根据x, y的界限设置循环:
:按照八分法在不同位置同步显示像素点。
:打印所显示像素点的坐标。
:由递推公式更新d以及x, y的值。
实验二、
根据原子核转动的模型,仔细研读代码,修改成:月球绕地球旋转,地球绕 太阳旋转的地月模型。同时要求,各个天体用不同的颜色相区分,通过代码添加 地球与月亮受太阳光照反射的光照效果。
步骤:
初始化各种属性,光源颜色,材质属性,深度测试,多边形表示的方法以 及背景颜色。
设置视区的大小尺寸,同时对空间进行修剪,确定观察空间。
在函数模块RenderScene中添加月亮绕地球旋转的恢复矩阵;再添加一个 类似于电子的属性表,用以描述月亮;同时修改各个天体的颜色,用以区 分。
调整各个天体的大小,同时对最大的天体太阳的显示边数进行修改,增加 其边数使太阳边界更为圆滑。
为月球绕地球的旋转添加新的旋转步长,使得月亮绕地球以及地球绕太阳 旋转的速度有所区分,模拟出地月运行的效果。
在initial初始化函数中添加设置光照的代码,同时把光照效果中光源的 坐标位置设置为与太阳坐标位置相同。
调试运行观察运行的情况,着重检查:天体间的运行是否具有相对独立性; 光照效果中,由于太阳本身是光源因此不应该存在光照效果
:
实验一、
各像素点坐标:
|X
!x
^
000000,.
.
.
4 - 000000
,.
.
.
,
000000
图形学实验报告 来自淘豆网m.daumloan.com转载请标明出处.