2023年计算机图形学实验报告3.pdf

上传人:文*** 文档编号:92856329 上传时间:2023-06-16 格式:PDF 页数:46 大小:3.42MB
返回 下载 相关 举报
2023年计算机图形学实验报告3.pdf_第1页
第1页 / 共46页
2023年计算机图形学实验报告3.pdf_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《2023年计算机图形学实验报告3.pdf》由会员分享,可在线阅读,更多相关《2023年计算机图形学实验报告3.pdf(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、计 算 机 图 形 学 实 验 报 告 姓 名:_学 号:_班 级:_时 间:202 3 年 1 2月实 验 一 O p e n G L编 程 与 图 形 绘 制 1.实 验 目 的 了 解 O p e n G L编 程,并 熟 悉 O p e n G L的 重 要 功 能、绘 制 流 程 和 基 本 语 法。学 会 配 置 O penG L环 境,并 在 该 环 境 中 编 程 绘 图。2.实 验 内 容 O pen G L 的 重 要 功 能:模 型 绘 制、模 型 观 测、颜 色 模 式、光 照 应 用、图 像 效 果 增 强、位 图 和 图 像 解 决、纹 理 映 射、实 时 动 画

2、和 交 互 技 术。OpenGL的 绘 制 流 程 分 为 两 个 方 面:一 个 完 整 的 窗 口 系 统 的 O penG L图 形 解 决 系 统 的 结 构 为:最 底 层 为 图 形 硬 件,第 二 层 为 操 作 系 统,第 三 层 为 窗 口 系 统,第 四 层 为 O p e n G L,最 上 面 的 层 为 应 用 软 件;O p e n G L命 令 将 被 放 在 一 个 命 令 缓 冲 区 中,这 样 命 令 缓 冲 区 中 包 含 了 大 量 的 命 令、顶 点 数 据 和 纹 理 数 据。当 缓 冲 区 被 清 空 时,缓 冲 区 中 的 命 令 和 数 据 都

3、 将 传 递 给 流 水 线 的 下 一 个 阶 段。O p e n G L的 基 本 语 法 中 相 关 库 有:Ope n G L 核 心 库:g l、O p e n G L 实 用 程 序 库:glu、0 penG编 程 辅 助 库:aux、Op e nG L 实 用 程 序 工 具 包(O p enGL u t ility toolki t,GLUT):g l u t、Windows 专 用 库:w g LO penG L的 基 本 语 法 中 命 名 规 则 为:O p e nG L 函 数 都 遵 循 一 个 命 名 约 定,即 采 用 以 下 格 式:库 前 缀 根 命 令 可

4、选 的 参 数 个 数 可 选 的 参 数 类 型。了 解 了 上 述 基 础 知 识 后,配 置 好 OP e n G L环 境,然 后 在 该 环 境 中 编 程 练 习 图 形 的 绘 制,本 次 实 验 重 要 是 对 点 的 绘 制、直 线 的 绘 制 和 多 边 形 面 的 绘 制。3.实 验 代 码 及 结 果 3.1 点 的 绘 制:#inc 1 ude g l/g 1 ut.h v o i d I n i t ial(vo i d)g lC lea rC o 1 o r(l.Of,1.Of,l.Of,1.O f);设 立 窗 口 背 景 颜 色 为 白 色 glM a tri

5、xMod e(G L_PROJECTION);/指 定 设 立 投 影 参 数 gluO r th o 2 D(0.0,2 0 0.0,0.0,1 5 0.0);设 立 投 影 参 数)v o i d D isplay(voi d)(g lC le a r(GL_CO L OR_B U F FER _BI T);/用 当 前 背 景 颜 色 填 充 窗 口 glCol o r 3f(l.Of,0.Of,0.Of);/设 立 当 前 的 绘 图 颜 色 为 红/glRectf(5 0.0 f,100.0f,15 0.0f,50.0f);/绘 制 一 个 矩 形 glPo i ntSize(10)

6、;/三 个 点 g lB e g in(G L _ P O I N T S);glC o lor3f(1.Of,0.0f,0.0 f);glVert e x 2 i(2,148);glVertex2i(100,75);glVe r tex 2i(19 8,2);glE nd();glFlus h();/清 空 O p enGL命 令 缓 冲 区,执 行 Op enGL程 序)int mai n(i n t ar g c,char*argv)(g 1 utlnit(&argc,a r g v);g lutlnilDis p 1 ayMod e(GLUT_SINGLE|GLUT_RGB);/初 始

7、 化 窗 口 的 显 示 模 式 g 1 ut I n i t W i n d ow S ize(400,3 0 0);/设 立 窗 口 的 尺 寸 g 1 utlnitW i n d owPos i t ion(100,1 20);/设 立 窗 口 位 置 g u tC re a te W in d o w(矩 形);/创 建 一 个 名 为 矩 形 的 窗 口glutDi s p layFunc(Display);数 I ni t i a 1();gl u tMai n L o o p();retur n 0;/设 立 当 前 窗 口 的 显 示 回 调 函/完 毕 窗 口 初 始 化 完

8、 毕 窗 口 G L U T事 件 解 决 循 环 运 营 结 果:矩 形 B 0B3.2 直 线 的 绘 制:#inclu d evoi d Initial(voi d)(glC 1 earC olor(1.0f,1.0 f j.0 f,l.Of):/设 立 窗 口 背 景 颜 色 为 白 色 glM a t rixM ode(GL_PROJECTI0 N);/指 定 设 立 投 影 参 数 g 1 u O r t ho2D(0.0,2 00.0,0.0,1 5 0.0);/设 立 投 影 参 数v o i d Display(void)glC 1 e a r(G L _ C O L O R

9、 _ B U F F E R _ B IT);用 当 前 背 景 颜 色 填 充 窗 口 glCo 1 o r 3 f(1.0f,0.0f,0.0 f);/设 立 当 前 的 绘 图 颜 色 为 红 色/g lR ec t f(50.Of,1 0 0.0 f,1 50.0f,50.Of);/绘 制 一 个 矩 形 g l B egin(GL_LINE_LOO P);/五 角 星 glVertex2i(10,10);g 1 Vert e x 2 i(30,3 5);g 1 Ve r tex2i(5 0,10);g 1 V ertex 2 i(5,2 5);glVertex2i(5 5,2 5);

10、g 1 E n d();g 1 Flush();/清 空 O P e n G L 命 令 缓 冲 区,执 行 O pen G L程 序)int main(i n t a r g c,char*a rgv)(glutin i t(&a r g c,argv);glutl n i t Display M od e(GLUT_SINGLE I G L UT_RGB);/初 始 化 窗 口 的 显 示 模 式 g 1 utlnitW i ndowSize(400,3 0 0);设 立 窗 口 的 尺 寸 glutin i(Window P o s i ti o n(1 0 0,1 20);/设 立 窗

11、 口 位 置 glutCrea t e Win d ow(矩 形);/创 建 一 个 名 为 矩 形 的 窗 口 glutDisplayF u n c(Displ a y);/设 立 当 前 窗 口 的 显 示 回 调 函 数 Ini t i al();完 毕 窗 口 初 始 化glu t M a inLoopO;完 毕 窗 口 GLUT事 件 解 决 循 环 r e t u r n 0;运 营 结 果:矩 形 BBS3.3 多 边 形 面 的 绘 制:#includevoid I nitial(vo i d)(glC 1 ea r Col o r(1.0f,1.0f,l.Of,1.Of);/

12、设 立 窗 口 背 景 颜 色 为 白 色 g 1 MatrixMode(GL_PROJECTION);/指 定 设 立 投 影 参 数 g 1 uO r th o 2 D(0.0,2 0 0.0,0.0,150.0);设 立 投 影 参 数)v o i d D i s pl a y(vo i d)glCI e ar(G L _ C OLO R _ B U F FER_B I T);/用 当 前 背 景 颜 色 填 充 窗 口g ic o l o r 3 f(1.0 f,O.Of,O.O f);/设 立 当 前 的 绘 图 颜 色 为 红 色/g 1 Rectf(5 0.0 f J00.0f,

13、15 0.O f,5 O.O f);绘 制 J 一 个 矩 形 g 1 B egin(G L _T RIANGLES);/等 边 三 角 形 glVer t e x2 f(0.0,0.0);glV e r t e x 2 f(1 5,2 5.9 5);g l V e r t e x 2 f(3 0,0);glEnd();g 1 Fl us h();O pe n G L程 序/清 空 O P enG L命 令 缓 冲 区,执 行 int m a in(in t argc,ch a r*a rgv)(g l u t Init(&a r g c,arg v);glu t I nitD i sp 1

14、ayM o de(G LUT.SINGL E|G LU T.RG B);g lu t I nitWindow S ize(400,300);gl u tInitWindowPosition(l 0 0,120);gl u t C r e a teW i n dow(矩 形)gl u t D isp 1 a y Fun c(D ispl a y);数 Init i a 1();gl u t M a i nLoop();解 决 循 环 初 始 化 窗 口 的 显 示 模 式 设 立 窗 口 的 尺 寸/设 立 窗 口 位 置 创 建 一 个 名 为 矩 形 的 窗 设 立 当 前 窗 口 的 显

15、示 回 调 函 完 毕 窗 口 初 始 化 完 毕 窗 口 G L U T事 件 return 0;运 营 结 果:实 验 二 直 线 绘 制 实 验 1.实 验 目 的 为 了 进 一 步 熟 悉 Open G L 编 程,了 解 基 本 图 形 生 成 算 法 中 的 直 线 绘 制,学 会 直 线 绘 制 算 法 中 最 常 用 的 三 种 算 法:数 值 微 分 法、中 点 画 线 算 法 和 Bresenham算 法。2.实 验 内 容(-*)数 值 微 分 法 数 值 微 分 法 直 接 从 直 线 的 微 分 方 程 生 成 直 线。给 定 直 线 的 两 端 点:P0(x 0,

16、丫 0)和 P1(X1,Y1),得 到 直 线 的 微 分 方 程(1丫/1*=4 丫/=(丫 1丫 0)/。1汽 0)=葭 数 值 微 分 算 法 的 原 理 是,由 于 直 线 的 一 阶 导 数 是 连 续 的,并 且 和 A y 是 成 比 例 的,因 此 通 过 在 当 前 位 置(X i,Yi)分 别 加 上 两 个 小 增 量 e Zx和 e Ay(e为 无 穷 小 的 正 数)来 求 下 一 点(X(i+1),Y(i+1)的 x,y 坐 标。(二)中 点 画 线 算 法 给 定 直 线 的 两 端 点:p 0(XO,YO)和 Pl(X 1,Y 1),可 得 到 直 线 方 程

17、F(x,y)=y-kx-b=0 Ji k=Ay/Ax=(Y 1-YO)/(X1-XO)绘 图 过 程 如 下:错 误!未 定 义 书 签。.输 入 直 线 的 两 端 点 P 0(X0,Y 0)和 P1(X1,Y1)错 误!未 定 义 书 签。.计 算 初 始 值*,Ay,d=A x 2Ay,x=X0,y=Y0.错 误!未 定 义 书 签。.绘 制 点(x,y)。判 断 d 的 符 号,若 d 0,则(x,y)更 新 为(x+1,y+1),同 样 将 e 更 新 为 e 2Zkx;否 则(x,y)更 新 为(x+l,y)错 误!.当 直 线 没 有 画 完 时,反 复 环 节 错 误!未 定

18、义 书 签。和 错 误!未 定 义 书 签。;否 则 结 束。3.实 验 代 码 及 结 果 3.1 数 值 微 分 算 法 编 程 绘 制 直 线 代 码:#i n clu d e#i n cludevoid I n itia 1(void)glClearColor(1.0f,l.Of.l.Of,l.Of);/设 立 窗 口 背 景 颜 色 为 白 色glMatrixMode(G L_P R O J E C T IO N);/指 定 设 立 投 影 参 数 g 1 u Ortho2D(0.0,2 0 0.0,0.0,1 5 0.0);/设 立 投 影 参 数)v oi d Dis p 1 a

19、y(voi d)(glClear(G L _ C 0 LOR_BU FFER.B I T);/用 当 前 背 景 颜 色 填 充 窗 口 glCol o r 3f(1.0 f,0.0 f,0.Of);/设 立 当 前 的 绘 图 颜 色 为 红 色 glB egin(G L_LINES);int x0=1 0;i n t y 0=20;int x 1=30;i n t yl=40;int c olor=10;i n t dx,dy,e ps 1,k;f l o a t x,y,xl n c r e,ylnere;dx=x 1-xO;d y=y 1-y 0;x=x 0;y=y 0;/if(abs

20、(dx)a b s(dy)o e p sl=abs(d x);els e ep s 1=a bs(dy);x In c re=(f loat)dx/(float)ep s 1;y I n cre=(floa t)d y/(f loat)epsl;fo r(k=0;k=e p s 1;k+)(g 1 Ve r tex2i(int(x+0.5),(i n t)(y+0.5);ox+=x Incre;o y+=ylncre;g lE n d();g 1 F 1 ush();清 空 O p e n G L命 令 缓 冲 区,执 行 O pen G L 程 序)in t m a in(i nt ar g

21、 c,c h ar*arg v)(g 1 u 11 n it(&a r gc,argv);glutl n itD i spl a yM o d e(GLU T _SING LE|GLUT_RG B);初 始 化 窗 口 的 显 示 模 式 gl u tlnitWin d owSize(4 00,3 00);gl u tin i tWindowPos i ti o n(1 0 0,120);glut C re a t eWindow(矩 形);g 1 utD i s p 1 a yFunc(D isp 1 a y);函 数 I n i t ial();gl u t MainL o o p();决

22、 循 环 return 0;设 立 窗 口 的 尺 寸/设 立 窗 口 位 置 创 建 一 个 名 为 矩 形 的 窗 口 设 立 当 前 窗 口 的 显 示 回 调 完 毕 窗 口 初 始 化 完 毕 窗 口 G L U T事 件 解 实 验 结 果:矩 形 目|回 冈 2.2中 点 画 线 算 法 编 程 绘 制 直 线 代 码:#inclu d e#in c 1 u d e v o id I n i tia 1(void)(g l C le a r Color(1.0 f,l.0 f,1.0 f,1.Of);/设 立 窗 口 背 景 颜 色 为 白 色 g IMatri x Mode(G

23、 L _ P R O J E CTION);/指 定 设 立 投 影 参 数 g l u O rth o2D(0.0,200.0,0.0,150.0);/设 立 投 影 参 数)voi d Disp 1 ay(vo i d)(g 1 C lear(G L _C O L O R _B U F F E R _ B I T);用 当 前 背 景 颜 色 填 充 窗 口 glCo 1 o r 3f(1.Of,O.Of,O.O f);设 立 当 前 的 绘 图 颜 色 为 红 色 glB e g in(GL_POINTS);int xO=5O;int y0=20;int xl=100;int y 1=1

24、20;i n t c olor=1 0;i nt dx,dy,d,U p Incr e,D o w n Incre,x,y;if(x 0 x 1)(x=x 1;xl=x0;x 0=x;y=y l;yl=yO;y 0=y;)x=x 0;y=y 0;d x=x 1-x 0;dy=yl-y 0;d=d x-2*dy;Up I ncre=2*d x-2*d y;Dow n I ncre=2*d y;while(x=x 1)(glVer t ex2i(x,y);。x+;。i f(d0)(y+;o d+=U piner e;)e Is e d+二 Dow n In c re;)gl E nd();g iF

25、 l ush();/清 空 OpenGL命 令 缓 冲 区,执 彳 丁 O p e nG L程 序int main(i nt a r g c,c h ar*ar g v J)gl u t I nit(&ar g c,argv);glutlnitDi s playMo d e(GLU T _ S I NGLE|GLU T_RGB)g 1 u tl n itWi n dow Siz e(40 0,30 0);glutlnitW i ndowPosi t ion(10 0,1 2 0);glutCreat e Wind o w(矩 形);g 1 u tDis p 1 a y F u n c(D i

26、s P 1 a y);回 调 函 数 In itial();gl u t M a i nLoop();循 环 re t u r n 0;/初 始 化 窗 口 的 显 示 模 式/设 立 窗 口 的 尺 寸 设 立 窗 口 位 置 创 建 一 个 名 为 矩 形 的 窗 口/设 立 当 前 窗 口 的 显 示 完 毕 窗 口 初 始 化/完 毕 窗 口 GLUT事 件 解 决 实 验 结 果:2.3 B res e nham算 法 编 程 绘 制 直 线 代 码:#i ncl u de#inclu d e vo i d Ini t ial(v o id)glC 1 earC olo r(1.Of

27、,1.Of,l.0f,1.0f);/设 立 窗 口 背 景 颜 色 为 白 色 glMatrixM o de(GL_PROJECTI ON);/指 定 设 立 投 影 参 数 g 1 u Ortho2D(0.0,200.0,0.0,1 5 0.0);设 立 投 影 参 数)void Display(v o id)g 1 Clear(GL_CO LOR_BU F FER_BIT);。/用 当 前 背 景 色 填 充 窗 口 glCo 1 or3f(1.0f,0.Of,0./设 立 当 前 的 绘 图 颜 色 为 红 色/B resen h am 算 法 g lBegin(GL_POIN T S)

28、;o i n t xO=1 O;int yO=20;int xl=90;i n t yl=9 0;intco 1 or=10;int x,y,dx,dy,e;也=x 1-x 0;d y=y 1-y 0;e=-d x;x=x 0;y=y 0;while(x0)O sy+;。e=e-2*d x;)g 1 E n d();g 1 F 1 u sh();清 空 OpenGL命 令 缓 冲 区,执 行 OpenGL程 序)in t main(int ar g c c har*argv)gl u tin i t(&arg c,argv);glutlni t D i s p l a y M o d e(GL

29、UT_SINGLE|GLUT_R G B);初 始 化 窗 口 的 现 实 模 式 glut I ni t Wind o wS i z e(400,300);“/设 立 窗 口 的 尺 寸 g 1 u t InitWin d o wPosi t io n(1 0 0,2 0 0);/设 立 窗 口 的 位 置 glu t Create Window(点);。创 建 一 个 名 为 矩 形 的 窗 口 g 1 u tDisplayFu n c(D i s p 1 a y)产 设 立 当 前 窗 口 的 显 示 函 数。I ni t ial();。完 毕 窗 口 的 初 始 化 gl u t M

30、a inLo o p();/启 动 主 G L U T事 件 解 决 循 环return 0;实 验 结 果:点 1 3回 区)实 验 三 圆 绘 制 实 验 i.实 验 目 的 2.实 验 内 容(一)八 分 法 画 圆 圆 心 位 于 原 点 的 圆 有 4 条 对 称 轴 x=0,y=0,y=x,y=-x。若 已 知 圆 上 任 一 点(x,y),可 以 得 到 其 在 圆 周 上 关 于 四 条 对 称 轴 的 此 外 7 个 点(y,x),(-x,y),(-x,-y),(-y,-x),(y,-x),(x,-y)o(二)中 点 B r e s en h a m画 圆 算 法算 法 环

31、节 如 下:错 误!未 定 义 书 签。输 入 圆 的 半 径 R错 误!计 算 初 始 值 d=1-R,x=0,y=R。错 误!未 定 义 书 签。绘 制 点(x,y)及 其 在 八 分 圆 中 的 此 外 7 个 对 称 点。错 误!未 定 义 书 签。判 断 d 的 符 号。若 d 0,则 先 将 d 更 新 为 d+2x+3,再 将(x,y)更 新 为(x+1,y);否 则 先 将 d 更 新 为 d+2(x-y)+5,再 将(x,y)更 新 为(x+1,y 1)。错 误!当 x y 时,反 复 环 节 错 误!未 定 义 书 签。和 错 误!未 定 义 书 签。;否 则 结 束。(三

32、)椭 圆 的 中 点 Bresenh a m 算 法 算 法 环 节 如 下:错 误!输 入 椭 圆 的 长 半 轴 a和 短 半 轴 b错 误!未 定 义 书 签。计 算 初 始 值 d=bA 2+a A2(-b+0.25),x=0,y=b。错 误!未 定 义 书 签。绘 制 点(x,y)及 其 在 四 分 象 限 上 的 此 外 三 个 对 称 点。判 断 d 的 符 号。若 dv=0,则 先 将 d 更 新 为 d+M2(2x+3),再 将(x,y)更 新 为(x+l,y);否 则 先 将 d 更 新 为 d+b,2(2x+3)+aA2(-2y+2),再 将(x,y)更 新 为(x+1,

33、y-l)o错 误!未 定 义 书 签。当 X 2(x+1)a八 2(y-0.5)时,反 复 环 节 和 错 误!;否 则 转 到 环 节 错 误!未 定 义 书 签。错 误!未 定 义 书 签。用 上 半 部 分 计 算 的 最 后 点(x,y)来 计 算 下 半 部 分 中 d 的 初 值 d=bA2(x+0.5)*2+aA2(y-1)A2-aA2bA2错 误!绘 制 点(x,y)及 其 在 四 分 象 限 上 的 此 外 三 个 对 称 点。o a c(O,8)判 断 d 的 符 号。若 d=0时,反 复 环 节 错 误!未 定 义 书 签。和 错 误!;否 则 结 束。3.实 验 代 码

34、 及 结 果 3.1八 分 法 画 圆 程 序 代 码:#incl u de#includ e void I n i t i a l(void)(glCl e a r Co 1 or(1.0f,l.O f,1.0 f,1.0 f);/设 立 窗 口 背 景 颜 色 为 白 色 glM a tri x M o d e(GL_PROJECT I ON);/指 定 设 立 投 影 参 数 gluO r tho 2 D(0.0,2 0 0.0,0.0,150.0);/设 立 投 影 参 数)void C i r c l e Poi n t(int x,i n t y,int color)glVert

35、e x2i(x+50,y+50);gl V e rtex2i(y+5 0,x+5 0);glVertex2i(y+5 0,x+50);glV e rte x 2 i(-x+5 0,y+5 0);g!Vertex2i(-x+5 0,-y+50);g 1V er t ex2 i(-y+50,-x+50);gl Ver t ex2i(y+50,x+5 0);glVerte x 2 i(x+50,y+5 0);)v oid Di s p 1 ay(v o i d)(g 1 Cie a r(GL_COLO R _ B U F F E R _ B IT);用 当 前 背 景 颜 色 填 充 窗 口 glC

36、olo r 3f(1.Of。0 f,O.Of);/设 立 当 前 的 绘 图 颜 色 为 红 色 glPointSize(lO);g IBe g in(GL_POINTS);CirclePoin t(1 0,20,20);g l E n d();g 1 Fl u sh();清 空 O p e n G L命 令 缓 冲 区,执 行 O pen G L 程 序)i n t ma i n(i n t ar g c,c h ar*arg v J)(glu t Init(&ar g c,argv);glutin i t Di s p 1 ayM ode(GLUT_SINGLE|GLU T_RGB);初

37、始 化 窗 口 的 显 示 模 式 glut I nitWi n d o wSi z e(4 0 0,3 00);g lull n ilWin d owP o s i tion(1 00,120);glutC r e ateWind o w(矩 形);g 1 u tDisplayFu n c(D ispl a y);调 函 数 I nit i al();glutMa i nL o op();循 环 return 0;/设 立 窗 口 的 尺 寸/设 立 窗 口 位 置/创 建 一 个 名 为 矩 形 的 窗 口 设 立 当 前 窗 口 的 显 示 回 完 毕 窗 口 初 始 化 完 毕 窗 口

38、 G L U T 事 件 解 决 实 验 结 果:矩 形 3.2I中 点 B r esenham算 法 绘 制 圆 代 码#includ e#in c lud e v o i d I n i tial(v oi d)(glClearCo 1 or(l.Of,l.Of,1.Of,1.0 f);/设 立 窗 口 背 景 颜 色 为 白 色 g IMa t ri x Mode(G L_PROJ E CTI0 N);指 定 设 立 投 影 参 数 gluOrtho2D(0.0,20 0.0,0.0,150.0);/设 立 投 影 参 数)vo i d C i rcl e P o i nt(int x,

39、i nt y,int co 1 o r)g 1 Ve r t ex2i(x+5 0,y+50);g 1 V ertex 2 i(y+50,x+50);g 1 V ertex2i(-y+5 0,x+5 0);gl V ert e x2i(-x+50,y+50);g IVer t ex2i(-x+5 0,-y+50);glVe r te x 2i(-y+5 0,-x+5 0);glV e rte x 2i(y+50,-x+50);glV e rt e x2i(x+50,y+5 0);)vo i d Mid Br e s enhamCi r cle(i n t r,int color)(int x,

40、y,d;x=0;y=r;d=1-r;while(x=y)(Cir c leP o int(x,y,colo r);i f(d 0)d+=2*x+3;elsed+=2*(x-y)+5;”一;0)x+;)void Di s p 1 ay(v o id)g 1 c lear(GL_COLO R_ B U F F ER_B I T);用 当 前 背 景 颜 色 填 充 窗 口 glCo 1 o r 3f(l.Of,O.Of,O.Of);设 立 当 前 的 绘 图 颜 色 为 红 色 g 1 Poin t S i ze(3);glB e g i n(GL_PO I NTS);Mi d Br e senh

41、 a m C ircle(2 0,10);glEnd();gl Flu s h();/清 空 Ope n G L命 令 缓 冲 区,执 行。penGL程 序)i n t main(i n t a r g c,c h a r*a r g v)(g l u t Init(&arg c,a r gv);g lutInitDisplayMode(GLU T _ S INGLE|G LU T_R G B);初 始 化 窗 口 的 显 示 模 式 glutlni t Windows i ze(400,300);glut I nitWi n d owPosition(100,1 2 0);g lutCrea

42、teW i ndow(矩 形);g lutDi s pla y F u n c(D isplay);调 函 数 I n i t i al();glu t M a inL o o p();循 环 re t ur n 0;/设 立 窗 口 的 尺 寸/设 立 窗 口 位 置 创 建 一 个 名 为 矩 形 的 窗 口/设 立 当 前 窗 口 的 显 示 回/完 毕 窗 口 初 始 化/完 毕 窗 口 GLUT事 件 解 决 实 验 结 果:矩 形 目|回 冈 3.3中 点 B re s e n h a m 算 法 绘 制 椭 圆 代 码:#inc 1 ude#includevoid In i ti

43、al(void)(glC learC olor(l.O f,1.Of,l.Of,1.0 f);/设 立 窗 口 背 景 颜 色 为 白 色 glMatrixMo d e(GL_PROJEC TION);/指 定 设 立 投 影 参 数 gl u O r tho2D(0.0,2 00.0,0.0,1 5 0.0);/设 立 投 影 参 数)void Mi d BresenhamEll i p s e(i n t a,i nt b,int color)(i n t x,y;f 1 oat d 1,d2;x=0;y=b;d 1=b*b+a*a*(-b+0.2 5);g 1 Vertex2 i(x+5

44、 0,y+50);g 1 Ve r t e x 2i(-x+50,y+5 0);g l V e rtex2i(-x+50,y+5 0);g 1 Vert e x 2 i(x+50,y+5 0);w h i l e(b*b*(x+1)a*a*(y-O.5)(if(d l 0)(if(d2=0)(d 2+=b*b*(2*x+2)+a*a*(-2*y+3);x+;ye 1 sed 2+=a*a*(-2*y+3);y;)glVertex 2 i(x+50,y+5 0);g I V e rtex 2 i(x+5 0,-y+5 0);g IV e r t e x 2 i(-x+50,y+5 0);gIVe

45、 r t e x2i(x+5 0,-y+5 0);)v o id D i splay(v o i d)(g ICle a r(G L_CO L 0 R _B U F FER_B I T);用 当 前 背 景 颜 色 填 充 窗 口 glColor 3 f(1.0 f,0.0 f,0.0f);设 立 当 前 的 绘 图 颜 色 为 红 色 g 1 Points i ze(3);g 1 Beg i n(GL_PO IN TS);MidBr e senh a mEllip s e(4 0,25,10):gl E nd();glFlush();清 空 Open G L 命 令 缓 冲 区,执 行 Op

46、 e nG L程 序)int main(i n t a r g c,cha r*a rg v J)(glut I nit(&ar g c,argv);glutlni t Dis p 1 a yMo d e(GLUT_ S IN GLE|GLUT_RG B);初 始 化 窗 口 的 显 示 模 式 glu 1 1n i tW in d o w S iz e(400,300);设 立 窗 口 的 尺 寸 g 1 utlnitW i n d ow P o sition(100,12 0);/设 立 窗 口 位 置 g 1 utCre a teWin d o w(矩 形);/创 建 一 个 名 为 矩

47、 形 的 窗 gl u tD i splayFu n c(D i sp 1 a y);/设 立 当 前 窗 口 的 显 示 回 调 函 数 Initial();/完 毕 窗 口 初 始 化 g 1 utM a in Loo p();完 毕 窗 口 G L U T事 件 解 决 循 环 r e t u r n 0;实 验 结 果:矩 形 0 B实 验 四 填 充 算 法 实 验 1.实 验 目 的 掌 握 用 扫 描 线 种 子 填 充 法,实 现 扫 描 线 种 子 填 充 算 法 填 充 任 一 多 边 形 区 域 的 程 序 2.实 验 内 容算 法 环 节 如 下:(1)种 子 像 素

48、入 栈。(2)执 行 如 下 三 步 操 作:错 误!栈 顶 像 素 出 栈。错 误!未 定 义 书 签。填 充 出 栈 像 素 所 在 扫 描 线 的 连 续 像 素 段,从 出 栈 的 像 素 开 始 沿 扫 描 线 向 左 和 向 右 填 充,直 到 碰 到 边 界 像 素 为 止,即 每 出 栈 一 个 像 素,就 对 包 含 该 像 素 的 整 个 扫 描 线 区 间 进 行 填 充,并 且 记 录 下 此 时 扫 描 线 区 间 的 x 坐 标 范 围 xl,x2。o a c(0,3)分 别 检 查 上、下 两 条 扫 描 线 上 位 于 x l,x 2 坐 标 区 间 内 的 未

49、 被 填 充 的 连 续 水 平 像 素 段,将 每 个 连 续 像 素 段 的 最 左 像 素 取 作 种 子 像 素 压 人 栈 堆。(3)检 查 栈 是 否 为 空,若 栈 非 空 反 复 执 行 环 节(2),若 栈 为 非 空 则 结 束。3.实 验 代 码 及 结 果 代 码:#i n c lude”g 1/gl u t.h#i n clud e m a th.h#include st d 1 i b.h#includ e co n io.h#include t y pe d ef float C o 1 or 3;str u ct Po i nt(oG L int x;eGL i

50、 nt y;);s t d:stack s t k;voi d i nit(vo i d)gl C le a rCo 1 o r(1.0,1.0,1.0,1.O);/Set disp 1 a y-w i ndow colo r whi t e.glMa t r ixMo d e(GL_PR 0 JECTION);g 1 uOrtho2D(0.0,400.0,0.0,400.0);)v o i d setP i xel(GL i nt x,GLi n t y);种 子 像 素 坐 标 void setPixe 1(Point cur_poin t)(glBeg i n(G L _ PO IN T

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

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

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁