计算机图形学的上机程序Microsoft Word 文[2]....

合集下载

计算机图形学第一次上机实验报告

计算机图形学第一次上机实验报告

计算机图形学上机实验报告实验名称:用DDA算法生成直线姓名:***班级:信息与计算科学学号:**********一:DDA 算法的思想精髓实现直线段光栅化的最简单的方法就是解直线的微分方程。

设直线的起点坐标为 (x s , y s ),终点坐标为 (x e , y e ),那么该直线的微分方程是:()m x x y y dx dy se s e =--=其离散解为:x x x y y y y y y s e s e i i i ∆--+=∆+=+1或: y y y x x x x x x s e s e i i i ∆--+=∆+=+1这里 (x i , y i ) 是直线上一点的坐标值。

式(3.2.1)和(3.2.2)表示所求直线 y 值和 x 值关于相应增量的逐次递归关系,递归初值为直线的起点。

DDA (Digital Differential Analyzer) 算法即数字微分分析算法就是基于式(3.2.1)或(3.2.2)对直线进行光栅化的算法。

在一个坐标轴上以单位间隔对直线采样,以决定另一个坐标轴上最靠近直线的对应整数值。

(1)当直线斜率 0 ≤ m ≤ 1 时,则按单位 x 间隔(D x = 1)取样并计算每个连续的 y 值:m y y i i +=+1(2)当 -1≤ m ≤ 0 时,则仍按单位 x 间隔(D x =-1)取样并计算每个连续的 y 值:m y y i i -=+1(3)当 m >1 时,则将 x 和 y 交换,这就是说,按单位 y 间隔(D y = 1) 取样并计算每个连续的 x 值:11-++=m x x i i(4)当 m <- 1 时,则同样交换 x 和 y 交换,并按 D y =- 1间隔取样计算每个连续的 x 值:11-+-=m x x i i应用上面的算式,解可以设计斜率为任意值的直线。

二:程序代码:#include<stdio.h>#include<graphics.h>#include<math.h>void lineDDA(int xs,int ys,int xe,int ye,int c){int i;float x=xs,y=ys;float xIncrement ,yIncrement,steps,dx=xe-xs,dy=ye-ys; steps=abs(dx);if(abs(dy)>abs(dx))steps=abs(dy);xIncrement=dx/steps;yIncrement=dy/steps;putpixel(x,y,c);for(i=1;i<=steps;i++){x+=xIncrement;y+=yIncrement;putpixel(x,y,c);}}main(){int gdriver=DETECT;int gmode;initgraph(&gdriver,&gmode,""); setbkcolor(MAGENTA); lineDDA(10,14,20,50,1); getch();closegraph();}三:程序截图如下:四:试验心得体会:(1)DDA算法生成直线是非常快的,但是有一点需要注意的,就是x,y的数值类型。

《计算机图形学》上机实验指导1

《计算机图形学》上机实验指导1

KMUSTTeaching Records昆明理工大学《上机实验指导书》课程名称:计算机图形学所在系(部):国资院测绘系学年学期: 2012 — 2013 学年第 2 学期授课专业班级:地信101/土管101/测绘101 班级人数: 27/24/56 讲授教师:李向新教材名称:计算机图形学课程总学时: 64 ;总学分:理论学时: 38 ;实验(或实践)学时: 上机学时: 32 ;辅导(或答疑)学时: 系主任签章:第1部分计算机图形学上机实验大纲1.1 目的与任务计算机图形学上机是计算机图形学课程的组成部分之一,是掌握计算机图形学课程内容的一个重要实践环节。

通过上机实验,一方面可以让学生巩固课堂所学的计算机图形学基础理论,另一方面能让学生掌握基本的OpenGL的编程方法及技能,掌握使用OpenGL绘制基本图形,进行2D及3D维图形变换,生成曲线曲面及构建具有真实感的3D场景。

1.2 基本要求1. 了解OpenGL在计算机图形学中的应用基础知识。

2. 掌握基本的OpenGL的编程方法及技能。

3. 学会使用OpenGL绘制基本图形。

4. 学会使用OpenGL进行2D及3D维图形变换、生成曲线曲面及构建具有真实感的3D场景。

1.3 内容及学时安排上机1:glut工具包的安装及使用 2学时上机2:OpenGL编程练习 2学时上机3:OpenGL中基本几何图形的绘制 2学时上机4:二维图形变换编程练习 2学时上机5:交互式绘图技术编程练习 2学时上机6:三维图形变换编程练习 2学时上机7:OpenGL三维物体表示编程练习 2学时上机8:真实感图形的生成与处理上机 2学时合计 16学时1.4 教学参考书(1) 成思源等编著:计算机图形学,冶金工业出版社,2003.(2) (美)安杰尔(Edward Angel)著;李桂琼,张文祥译: OpenGL程序设计指南(第二版),北京:清华大学出版社,2005.(3) Edward Angel: Interactive Computer Graphics—A Top-Down Approach withOpenGL, Third Edition, Pearson Education, Inc., 2003.(4) F.S. Hill, JR:Computer Graphics Using OpenGL Second Edition, PearsonEducation, Inc., 2003.(5) James D. Foley et al.: Computer Graphics—Principles and Practice, SecondEdition in C, Pearson Education, Inc., 2002.(6) 朱家义:Visual C++程序设计,机械工业出版社,2003。

计算机图形学上机作业

计算机图形学上机作业

计算机图形学(选作以下任意1—11题)1 用中点Bresenham 算法设计直线、圆、椭圆的算法,实现任意斜率的直线、圆、椭圆的绘制;2 使用有效边表算法填充多边形。

多边形的7个顶点分别为:P 0(500,400), P 1(350,600), P 2(250,350), P 3(350,50), P 4(500,250), P 5(700,50), P 6(800,450)。

3 使用四邻接点填充算法填充上述多边形。

4 在屏幕中心显示矩形窗口,使用Cohen-Sutherland 直线段裁剪算法实现任意直线的裁剪5 在屏幕中心显示矩形窗口,使用中点分割直线裁剪算法实现任意直线的裁剪6 在屏幕中心显示矩形窗口,使用梁友栋-Barsky 直线段裁剪算法实现任意直线的裁剪7使用斜等侧投影绘制图1所示多面体的投影图及其三视图,要求使用矩阵变换方法编程实现。

图1 图28 已知17个型值点:P 1(-360,0),P 2(-315,-71),P 3(-270,-100),P 4(-225,-71),P 5(-180,0),P 6(-135,71),P 7(-90,100),P 8(-45,71),P 9(0,0),P 10(45,-71),P 11(90,-100),P 12(135,-71),P 13(180,0),P 14(225,71),P 15(270,100),P 16(315,71),P 17(360,0)。

边界条件为:自由端。

编程绘制通过给定型值点的三次参数样条曲线和正弦曲线,试比较二者之间差异。

9 根据三次Bezier 曲线的基函数,编程绘制如图2所示三次Bezier 曲线。

10. 给定9个控制点:P0(150,350),P 1(250,250),P 2(350,350),P 3(428,167),P 4(525,440),P 5(650,250),P 6(682,40),P 7(850,450),P 8(950,350)。

计算机图形学上机实验指导

计算机图形学上机实验指导

计算机图形学上机实验指导指导教师:张加万老师助教:张怡2009-10-10目录1.计算机图形学实验(一) – OPENGL基础 ..................................... - 1 -1.1综述 (1)1.2在VC中新建项目 (1)1.3一个O PEN GL的例子及说明 (1)2.计算机图形学实验(二) – OPENGL变换 ..................................... - 5 -2.1变换 (5)3.计算机图形学实验(三) - 画线、画圆算法的实现....................... - 9 -3.1MFC简介 (9)3.2VC6的界面 (10)3.3示例的说明 (11)4.计算机图形学实验(四)- 高级OPENGL实验...................... - 14 -4.1光照效果 (14)4.2雾化处理 (16)5.计算机图形学实验(五)- 高级OPENGL实验........................ - 20 -5.1纹理映射 (20)5.2反走样 (24)6.计算机图形学实验(六) – OPENGL IN MS-WINDOWS .......... - 27 -6.1 实验目标: (27)6.2分形 (28)1.计算机图形学实验(一) – OpenGL基础1.1综述这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C++,它对OpenGL提供了完备的支持。

OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。

本次实验不涉及面向对象编程,不涉及MFC。

1.2在VC中新建项目1.2.1新建一个项目选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。

上机报告表,计算机图形学

上机报告表,计算机图形学

计算机图形学上机报告上机项目:计算机图形学系别:班级:学号:姓名:上机报告上机项目计算机图形学上机日期指导教师实验地点一、上机目的熟练掌握dda直线生成算法、中点画线法、bresenham画线法、中点画元发、bresenham 画圆法、二维图形变幻的方法、线段裁剪以及bezier曲线参数方程。

画出直线、圆、变换图形、裁剪图形及生成三次bezier曲线。

二、内容用vb实现dda直线生成算法、中点画线法、bresenham画线法、中点画元发、bresenham 画圆法、二维图形变幻的方法、线段裁剪以及bezier曲线参数方程。

分别画出直线、圆、变换图形、裁剪图形及生成三次bezier曲线。

三、上机实现过程(步骤、方法等)根据算法思想及计算方法通过vb实现各个图形的编程及显示。

1、分析算法思想2、编辑程序代码3、运行、纠正直到显示所要结果实验报告四、上机源程序1:Dda直线生成算法(1):Private Sub Command1_Click()Call ddaline(200, 1001, 2000, 3000)Call ddaline(900, 6001, 3000, 1000)Call ddaline(2300, 500, 10000, 4000)Call ddaline(700, 300, 8000, 5000)End SubPublic Sub ddaline(x1, y1, x2, y2 As Integer)Dim x, y, dx, dy, e As Doubledx = x2 - x1: dy = y2 - y1If Abs(dx) > Abs(dy) Thene = Abs(dx)Elsee = Abs(dy)End Ifdx = dx / e: dy = dy / ex = x1: y = y1For i = 0 To ePSet (Int(x + 0.5), Int(y + 0.5))x = x + dxy = y + dyNext iEnd SubDda直线生成算法(2):Public Sub ddaline(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer)Dim x, y, dx, dy, e As Doubledx = x2 - x1: dy = y2 - y1If Abs(dx) > Abs(dy) Thene = Abs(dx)Else: e = Abs(dy)End Ifdx = dx / e: dy = dy / ex = x1: y = y1For i = 0 To ePSet (Int(x + 0.5), Int(y + 0.5))x = x + dx: y = y + dyNext iEnd SubPrivate Sub Command1_Click()Form1.Scale (-ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth / 2, -ScaleHeight / 2)Dim x(7), y(7) As IntegerFor i = 0 To 7x(i) = Int(Cos(i * 3.14 / 4) * 4000 + 0.5)y(i) = Int(Sin(i * 3.14 / 4) * 4000 + 0.5)Next iFor i = 0 To 6Call ddaline(x(i), y(i), x(i + 1), y(i + 1))Next iCall ddaline(x(0), y(0), x(7), y(7))For i = 0 To 4Call ddaline(x(i), y(i), x(i + 3), y(i + 3))Next iCall ddaline(x(5), y(5), x(0), y(0))Call ddaline(x(6), y(6), x(1), y(1))Call ddaline(x(7), y(7), x(2), y(2))End Sub2:Presenham画线法:Public Sub bresenhamline(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer) Dim x, y, p, dx, dy As Integerdx = x2 - x1: dy = y2 - y1: p = 2 * dy - dxx = x1: y = y1For x = x1 To x2PSet (x, y)If p >= 0 Theny = y + 1: p = p + 2 * (dy - dx)Elsep = p + 2 * dyEnd IfNext xEnd SubPrivate Sub Command1_Click()Form1.Scale (-ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth / 2, -ScaleHeight / 2) Call bresenhamline(-1500, -1500, 2000, 2000)Call bresenhamline(-1900, -1800, -2000, 2000)End Sub3:中点画线法Public Sub midline(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer)Dim x, y, d, a, b As Integera = y1 - y2:b = x2 - x1x = x1: y = y1: d = 2 * a + bFor x = x1 To x2PSet (x, y)If d >= 0 Thend = d + 2 * aElsey = y + 1: d = d + 2 * a + 2 * bEnd IfNext xEnd SubPrivate Sub Command1_Click()Form1.Scale (-ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth / 2, -ScaleHeight / 2) Call midline(-1100, -1500, 4000, 2000)Call midline(-2000, -3000, -4000, 3000)End Sub中点画圆法Private Sub Command1_Click()Call midpointcircle(3000)End SubPrivate Sub Form_Load()Form1.Scale (-ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth / 2, -ScaleHeight / 2) End SubPublic Sub midpointcircle(R As Integer)Dim d, x, y As Integerd = 1 - R: x = 0: y = RDo While x <= yPSet (x, y)PSet (y, x)PSet (-x, y)PSet (-y, x)PSet (-x, -y)PSet (-y, -x)PSet (x, -y)PSet (y, -x)If d >= 0 Thend = d + 2 * x - 2 * y + 5x = x + 1: y = y - 1Elsed = d + 2 * x + 3x = x + 1End IfLoopEnd SubBresenham画圆法:Private Sub Form_Load()Form1.Scale (-ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth / 2, -ScaleHeight / 2) End SubPublic Sub midpointcircle(R As Integer)Dim p, x, y As Integerx = 0: y = R: p = 3 - 2 * RDo While x <= yPSet (x, y)PSet (y, x)PSet (-x, y)PSet (-y, x)PSet (-x, -y)PSet (-y, -x)PSet (x, -y)PSet (y, -x)If p >= 0 Thenp = p + 4 * (x - y) + 10x = x + 1: y = y - 1Elsep = p + 4 * x + 6x = x + 1End IfLoopEnd Sub二维坐标变换:Dim x(4), y(4) As IntegerPrivate Sub Command1_Click()Form1.ForeColor = vbBlueCall pingyi(-500, -500)End SubPrivate Sub Command2_Click()Form1.ForeColor = vbBlueCall cuoqie(0, 3)End SubPrivate Sub Command3_Click()Form1.ForeColor = vbBlueCall bili(2, 2)End SubPrivate Sub Command4_Click()Call xuanzhuan(45)End SubPrivate Sub Command5_Click()Call duichen(1, 0, 0, -1)End SubPrivate Sub Form_Load()Form1.Scale (-ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth / 2, -ScaleHeight / 2) Showx(0) = 500y(0) = 500x(1) = 1500y(1) = 500x(2) = 1500y(2) = 1500x(3) = 500y(3) = 1500Call lianxianEnd SubPublic Sub lianxian()For i = 0 To 2Line (x(i), y(i))-(x(i + 1), y(i + 1))Next iLine (x(3), y(3))-(x(0), y(0))End SubPublic Sub pingyi(tx As Integer, ty As Integer)For i = 0 To 3x(i) = x(i) + txy(i) = y(i) + tyNext iCall lianxianEnd SubPublic Sub cuoqie(b As Single, d As Single)Dim a As IntegerFor i = 0 To 3a = x(i)x(i) = Int(x(i) + b * y(i) + 0.5)y(i) = Int(y(i) + d * a + 0.5)Next iCall lianxianEnd SubPublic Sub bili(sx As Single, sy As Single)For i = 0 To 3x(i) = Int(x(i) * sx + 0.5)y(i) = Int(y(i) * sy + 0.5)Next iCall lianxianEnd SubPublic Sub xuanzhuan(l As Single)Dim a As Integer, b As IntegerFor i = 0 To 3a = x(i):b = y(i)x(i) = Int(a * Cos(l) - b * Sin(l) + 0.5)y(i) = Int(b * Cos(l) + a * Sin(l) + 0.5)Next iCall lianxianEnd SubPublic Sub duichen(a As Integer, b As Integer, d As Integer, e As Integer) Dim m As Integer, n As IntegerFor i = 0 To 3m = x(i): n = y(i)x(i) = Int(a * m + b * n + 0.5)y(i) = Int(d * m + e * n + 0.5)Next iCall lianxianEnd Sub直线段的裁剪:Dim x0, y0, x1, y1 As IntegerDim xl, yb, xr, yt As IntegerPrivate Sub Command1_Click()ForeColor = vbRedCall caijian(2000, 2500, 200, 2000)Call caijian(3000, 2000, 4000, 5000)Call caijian(2500, 1500, 1500, 7000)Call caijian(1500, 2000, 3000, 500)End SubPrivate Sub Form_Load()Showxl = 1000xr = 5000yb = 1000yt = 3000Line (1000, 1000)-(1000, 3000)Line -(5000, 3000)Line -(5000, 1000)Line -(1000, 1000)Line (2000, 2500)-(200, 2000)Line (3000, 2000)-(4000, 5000)Line (2500, 1500)-(1500, 7000)Line (1500, 2000)-(3000, 500)End SubPublic Sub caijian(x0 As Long, y0 As Long, x1 As Long, y1 As Long)If x0 > xl And x0 < xr And y0 > yb And y0 < yt ThenIf x1 > xl And x1 < xr And y1 > yb And y1 < yt ThenLine (x0, y0)-(x1, y1)ElseIf x1 < xl And y1 > yb And y1 < yt Thena = x1x1 = xly1 = Int(((y1 - y0) / (a - x0)) * xl + 0.5) + Int((a * y0 - x0 * y1) / (a - x0) + 0.5) Line (x0, y0)-(x1, y1)End IfIf y1 > yt And x1 < xr And x1 > xl Thena = y1y1 = ytx1 = Int(((yt - (x1 * y0 - x0 * a) / (x1 - x0)) / ((a - y0) / (x1 - x0))) + 0.5)Line (x0, y0)-(x1, y1)End IfIf x1 > xr And y1 > yr And y1 < yt Thena = x1x1 = xry1 = Int(((y1 - y0) / (a - x0)) * xl + 0.5) + Int((a * y0 - x0 * y1) / (a - x0) + 0.5)Line (x0, y0)-(x1, y1)End IfIf y1 < yb And x1 > xl And x1 < xr Thena = y1y1 = ybx1 = Int(((yb - (x1 * y0 - x0 * a) / (x1 - x0)) / ((a - y0) / (x1 - x0))) + 0.5)Line (x0, y0)-(x1, y1)End IfEnd IfEnd IfEnd SubBezier曲线的生成:Private Sub Form_Click()Call bezier3(100, 100, 7000, 200, 9000, 3000, 5000, 600)End SubPublic Sub bezier3(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, x3 As Integer, y3 As Integer, x4 As Integer, y4 As Integer)Dim x(1000), y(1000) As DoubleDim i As IntegerFor i = 0 To 100t = i / 100x(i) = (1 - t) ^ 3 * x1 + 3 * t * (1 - t) ^ 2 * x2 + 3 * t ^ 2 * (1 - t) * x3 + t ^ 3 * x4y(i) = (1 - t) ^ 3 * y1 + 3 * t * (1 - t) ^ 2 * y2 + 3 * t ^ 2 * (1 - t) * y3 + t ^ 3 * y4PSet (Int(x(i) + 0.5), Int(y(i) + 0.5))Next iFor i = 0 To 99Line (x(i), y(i))-(x(i + 1), y(i + 1))Next iEnd Sub五、上机中遇到问题及解决方法运行结果不理想检查算法是否正确检查代码是否出错改正错误六、上机结果Presenham画线法中点画线法: 中点画圆法:Bresenham画圆法:二维坐标变换:直线段裁剪:七、心得体会通过几次实习我学到了很多计算机图形学的实践知识,也了解到编程的一些技巧,深刻的体会到计算机的深奥。

计算机图形学上机报告

计算机图形学上机报告

计算机图形学上机实验报告计算机科学与技术学院班级:学号:姓名:指导教师:完成日期:实验一:基本图元绘制一. 实验目的1. 了解如何利用OpenGL库绘制图形2. 理解glut程序框架3. 理解窗口到视区的变换4. 理解OpenGL实现动画的原理二. 实验内容1. 实现中点Bresenham算法画直线2. 实现改进Bresenham算法画直线3. 实现圆的绘制三. 实验结果1.DDA算法画直线2. 中点Bresenham算法画直线3. 改进Bresenham算法画直线4. Bresenham算法画圆四. 源程序#include <windows.h>#include <gl/glut.h>#include "stdio.h"int m_PointNumber = 0; //动画时绘制点的数目int m_DrawMode = 4; //绘制模式 1 DDA算法画直线// 2 中点Bresenham算法画直线// 3 改进Bresenham算法画直线// 4 八分法绘制圆// 5 四分法绘制椭圆//绘制坐标线void DrawCordinateLine(void){int i = 0 ;//坐标线为黑色glColor3f(0.0f, 0.0f ,0.0f);glBegin(GL_LINES);for (i=10;i<=250;i=i+10){glVertex2f((float)(i), 0.0f);glVertex2f((float)(i), 250.0f);glVertex2f(0.0f, (float)(i));glVertex2f(250.0f, (float)(i));}glEnd();}//绘制一个点,这里用一个正方形表示一个点。

void putpixel(GLsizei x, GLsizei y){glRectf(10*x,10*y,10*x+10,10*y+10);}void DDACreateLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num){//设置颜色glColor3f(1.0f,0.0f,0.0f);//对画线动画进行控制if(num == 1)printf("DDA画线算法:各点坐标\n");else if(num==0)return;//画线算法的实现GLsizei dx,dy,epsl,k;GLfloat x,y,xIncre,yIncre;dx = x1-x0;dy = y1-y0;x = x0;y = y0;if(abs(dx) > abs(dy)) epsl = abs(dx);else epsl = abs(dy);xIncre = (float)dx / epsl ;yIncre = (float)dy / epsl ;for(k = 0; k<=epsl; k++){putpixel((int)(x+0.5), (int)(y+0.5));if (k>=num-1) {printf("x=%f,y=%f,取整后x=%d,y=%d\n", x, y, (int)(x+0.5),(int)(y+0.5));break;}x += xIncre;y += yIncre;if(x >= 25 || y >= 25) break;}}void BresenhamLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num){glColor3f(1.0f,0.0f,0.0f);if(num == 1)printf("中点Bresenham算法画直线:各点坐标及判别式的值\n");else if(num==0)return;//画线算法的实现GLsizei dx,dy,d,UpIncre,DownIncre,x,y,xend=0;if(x0>x1){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<=x1){putpixel(x,y);if (x>=num-1) {break;}x++;if(d<0){y++;d+=UpIncre;}else d+=DownIncre;if(x >= 50 || y >= 50) break;}}void Bresenham2Line(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num) {glColor3f(1.0f,0.0f,0.0f);if(num == 1)printf("改进的Bresenham算法画直线:各点坐标及判别式的值\n");else if(num==0)return;//画线算法的实现GLsizei x,y,dx,dy,e;dx=x1-x0;dy=y1-y0;e=-dx;x=x0;y=y0;while (x<=x1){putpixel(x,y);if (x>=num-1) {break;}x++;e=e+2*dy;if(e>0){y++;e=e-2*dx;}if(x >= 50 || y >= 50) break;}}void BresenhamCircle(GLsizei x, GLsizei y, GLsizei r, GLsizei num){glColor3f(1.0f,0.0f,0.0f);if(num == 1)printf("Bresenham算法画圆:各点坐标及判别式的值\n");x=0,y=r;GLsizei d=1-r;while (x<y){putpixel(x,y);if (x>=num) {break;}putpixel(y,x);if (x>=num) {break;}putpixel(-y,x);if (x>=num) {break;}putpixel(-x,y);if (x>=num) {break;}putpixel(-x,-y);if (x>=num) {break;}putpixel(-y,-x);if (x>=num) {break;}putpixel(y,-x);if (x>=num) {break;}putpixel(x,-y);if(d<0)d+=2*x+3;else{d+=2*(x-y)+5;y--;}x++;}}//初始化窗口void Initial(void){// 设置窗口颜色为蓝色glClearColor(1.0f, 1.0f, 1.0f, 1.0f);}// 窗口大小改变时调用的登记函数void ChangeSize(GLsizei w, GLsizei h){if(h == 0) h = 1;// 设置视区尺寸glViewport(0, 0, w, h);// 重置坐标系统glMatrixMode(GL_PROJECTION);glLoadIdentity();// 建立修剪空间的范围if (w <= h)glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0);elseglOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0); }// 在窗口中绘制图形void ReDraw(void){//用当前背景色填充窗口glClear(GL_COLOR_BUFFER_BIT);//画出坐标线DrawCordinateLine();switch(m_DrawMode){case 1:DDACreateLine(0,0,20,15,m_PointNumber);break;case 2:BresenhamLine(0,0,20,15,m_PointNumber);break;case 3:Bresenham2Line(1,1,8,6,m_PointNumber);break;case 4:BresenhamCircle(5,5,18,m_PointNumber);break;default:break;}glFlush();}//设置时间回调函数void TimerFunc(int value){if(m_PointNumber == 0)value = 1;m_PointNumber = value;glutPostRedisplay();glutTimerFunc(500, TimerFunc, value+1);}//设置键盘回调函数void Keyboard(unsigned char key, int x, int y){if (key == '1') m_DrawMode = 1;if (key == '2') m_DrawMode = 2;if (key == '3') m_DrawMode = 3;if (key == '4') m_DrawMode = 4;m_PointNumber = 0;glutPostRedisplay();}//void main(void)int main(int argc, char* argv[]){glutInit(&argc, argv);//初始化GLUT库OpenGL窗口的显示模式glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(800,600);glutInitWindowPosition(100,100);glutCreateWindow("基本图元绘制程序");glutDisplayFunc(ReDraw);glutReshapeFunc(ChangeSize);glutKeyboardFunc(Keyboard);//键盘响应回调函数glutTimerFunc(500, TimerFunc, 1);// 窗口初始化Initial();glutMainLoop(); //启动主GLUT事件处理循环return 0;}实验二:日地月模型一. 实验目的1. 理解OpenGL中的变换过程2. 理解透视投影与平行投影的不同3. 了解深度测试二. 实验内容1. 通过变换调整观察的位置与方向2. 实现太阳、地球和月亮的运动模型三. 实验结果太阳、地球和月亮的运动模型图1.图2.图3.四. 源程序#include <windows.h>#include <gl/gl.h>#include <gl/glu.h>#include <gl/glut.h>void Initial(){glEnable(GL_DEPTH_TEST); // 启用深度测试glFrontFace(GL_CCW); // 指定逆时针绕法表示多边形正面glClearColor(1.0f, 1.0f, 1.0f, 1.0f ); //背景为白色}void ChangeSize(int w, int h){if(h == 0) h = 1;// 设置视区尺寸glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();// 设置修剪空间GLfloat fAspect;fAspect = (float)w/(float)h;gluPerspective(45.0, fAspect, 1.0, 500.0);/*if (w <= h)glOrtho (-nRange, nRange, nRange*h/w, -nRange*h/w, -nRange*2.0f, nRange*2.0f);elseglOrtho (-nRange*w/h, nRange*w/h, nRange, -nRange, -nRange*2.0f, nRange*2.0f); */glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void RenderScene(void){// 绕原子核旋转的角度static float fElect1 = 0.0f;static float f2=0.0f;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 重置模型视图矩阵glMatrixMode(GL_MODELVIEW);glLoadIdentity();//将图形沿z轴负向移动glTranslatef(0.0f, 0.0f, -250.0f);// 绘制红色的原子核glColor3f(1.0f, 0.0f, 0.0f);glutSolidSphere(50.0f, 15, 15);// 当前绘制颜色变为黄色glColor3f(0.0f, 0.0f, 0.0f);//绘制第一个电子//保存当前的模型视图矩阵glRotatef(fElect1, 0.0f, 1.0f, 0.0f);//绕y轴旋转一定的角度glTranslatef(80.0f, 0.0f, 0.0f);//平移一段距离glutSolidSphere(12.0f, 15, 15);//画出电子// 恢复矩阵// 第二个电子glPushMatrix();glRotatef(45.0f, 0.0f, 0.0f, 1.0f);glRotatef(f2, 0.0f, 1.0f, 0.0f);glTranslatef(-20.0f, 0.0f, 0.0f);glutSolidSphere(6.0f, 15, 15);glPopMatrix();/* // 第三个电子glPushMatrix();glRotatef(-45.0f,0.0f, 0.0f, 1.0f);glRotatef(fElect1, 0.0f, 1.0f, 0.0f);glTranslatef(0.0f, 0.0f, 60.0f);glutSolidSphere(6.0f, 15, 15);glPopMatrix();*/// 增加旋转步长fElect1 += 10.0f;f2=fElect1*6;if(fElect1 > 360.0f){fElect1 = 10.0f;}glutSwapBuffers();}void TimerFunc(int value){glutPostRedisplay();glutTimerFunc(100, TimerFunc, 1);}int main(int argc, char* argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutCreateWindow("日地月模型");glutReshapeFunc(ChangeSize);glutDisplayFunc(RenderScene);glutTimerFunc(500, TimerFunc, 1);Initial();glutMainLoop();return 0;}。

06级信息与计算科学(本科)专业课程表(人数67)

06级信息与计算科学(本科)专业课程表(人数67)

华南师范大学南海校区(学院)2008—2009学年第二学期课程表制表:教学科研办公室2009年2月19日06级信息与计算科学(本科) 专业课程表(人数: 67 )备注:根据校历安排,本学期教学18周(2月22日—6月27日),考试2周(6月28日—7月11日)。

1华南师范大学南海校区(学院)2008—2009学年第二学期课程表制表:教学科研办公室2009年2月19日06级软件工程(本科) 专业课程表(人数: 68 )备注:根据校历安排,本学期教学18周(2月22日—6月27日),考试2周(6月28日—7月11日)。

2华南师范大学南海校区(学院)2008—2009学年第二学期课程表制表:教学科研办公室2009年2月19日06级金融学(本科)专业课程表(人数: 137 )备注:根据校历安排,本学期教学18周(2月22日—6月27日),考试2周(6月28日—7月11日)。

3华南师范大学南海校区(学院)2008—2009学年第二学期课程表制表:教学科研办公室2009年2月19日06级会计学(本科) 专业课程表(人数: 133 )备注:根据校历安排,本学期教学18周(2月22日—6月27日),考试2周(6月28日—7月11日)。

4华南师范大学南海校区(学院)2008—2009学年第二学期课程表制表:教学科研办公室2009年2月19日06级汉语言文学(本科) 专业1、2班课程表(人数:73 )备注:根据校历安排,本学期教学18周(2月22日—6月27日),考试2周(6月28日—7月11日)。

5华南师范大学南海校区(学院)2008—2009学年第二学期课程表制表:教学科研办公室2009年2月19日06级汉语言文学(本科) 专业3、4 课程表(人数: 73 )备注:根据校历安排,本学期教学18周(2月22日—6月27日),考试2周(6月28日—7月11日)。

6华南师范大学南海校区(学院)2008—2009学年第二学期课程表制表:教学科研办公室2009年2月19日06级英语(经贸翻译)(本科)专业课程表(人数: 53 ) 课室:1班实西B401A 2班实西B401B备注:根据校历安排,本学期教学18周(2月22日—6月27日),考试2周(6月28日—7月11日)。

教育资料Microsoft Word (2)

教育资料Microsoft Word (2)

讨论信息技术与课程整合存在哪些常见的问题?请你提供你身边的案例来说明?二十世纪初开始,生产及社会“电气化”的发展给教育带来的“电化教育技术”——从投影幻灯、录音到电影、录象,给教师增添了新的工具。

特别是电影和录象同时提供的视觉信息与听觉信息,使教育从简单的“可视化”发展到“声像同步”,使时空局限得到一定程度的克服,无论人文科学教育还是自然科学教育,都受到很大推动,是教育的第五次革命。

著名发明家爱迪生将卷片放映机改装为电影放映机的时候曾预言:“电影将是教育工具中最伟大的一个”,只是因为教育电影制作需要的投入大而回报率远不如故事片,一些教师嫌电影教学“麻烦”,使各国电影教育的发展都不近人意。

还特别值得提出的是“语言实验室”所提供的多媒体教学环境(利用电影和录象资源)和在有线广播技术基础上实现的语音通讯网络,实现了适应不同程度学生需求的多路同步教学、学生之间的分组讨论研究、师生之间的个别语音交互等教学模式。

“电化教室”、“电教组”曾是学校二十世纪后期的新名词。

“电教”给教育教学带来多种手段,在教学法理论上也就提出如何围绕教学目标合理组合使用,使之“一体化”或“整体化”(integrate)等课题。

现代信息技术。

以计算机和网络为代表的现代信息技术具有的有时将推动教育发生新一次更深刻、更广泛的革命。

从技术的角度看,现代信息技术的特殊优势主要有三个:⑴在对数字信息高速处理基础上,在彩色显示屏上连续动态输出的优势。

顾名思义,计算机的优势首先是“高速计算”。

“计算”是对“数”这种抽象符号信息的处理,是生活、生产,特别是科学技术研究都离不开的信息处理。

仅仅依赖人动手直接完成全部数据处理工作,受到个人能力有限的制约,在数学上称为“可计算性理论”的限制。

人们一直在研究如何以计算工具(算具)来提高计算速度,我国古代发明的“算盘”是优秀成果之一,既有利于提高工作效率,也有利于帮助学习者快速理解和掌握基本运算能力,对小学算术教学方法研究也有推动。

计算机图形学上机代码

计算机图形学上机代码
glDisable(GL_POLYGON_STIPPLE);
glRectf(0.0f, 0.0f, 0.5f, 0.5f); //在右上方绘制一个无镂空效果的正方形
glFlush();
}
E.g.7着色模型
#include <GL/glut.h>
#include <math.h>
const GLdouble Pi = 3.1415926536;
*/
static GLubyte Mask[128];
FILE *fp;
fp = fopen("D:/Mask/Mask.bmp", "rb"); //注意此处的格式fp = fopen("D:/vclx/mask.bmp", "rb");
if( !fp )
exit(0);
if( fseek(fp, -(int)sizeof(Mask), SEEK_END) )
glVertex2f(1.0f, 0.0f); //以上两个点可以画x轴
glVertex2f(0.0f, -1.0f);
glVertex2f(0.0f, 1.0f); //以上两个点可以画y轴
glEnd();
glBegin(GL_LINE_STRIP);
for(x=-1.0f/factor; x<1.0f/factor; x+=0.01f)
0x18, 0xCC, 0x33, 0x18,
0x10, 0xC4, 0x23, 0x08,
0x10, 0x63, 0xC6, 0x08,
0x10, 0x30, 0x0C, 0x08,
0x10, 0x18, 0x18, 0x08,

计算机图形学上机报告模板(2)

计算机图形学上机报告模板(2)

实验报告(第2周)
班级:姓名:学号:
实验名称:使用Visual Studio建立第一个MFC程序
报告内容:
1、任务描述
(1)使用向导创建一个单文档MFC应用程序,在主菜单添加绘图-画点的菜
单项;单击菜单项弹出消息框,输出“Hello,MFC!”的信息
(2)创建一个CRect类,用于描述矩形。

成员变量包括长度、宽度、颜色;
成员函数包括求矩形面积、求矩形周长;增加构造函数和析构函数,输
出构造和析构信息
(3)在CRect类基础上,派生一个CCube类,增加高度成员变量;增加构造
函数和析构函数
(4)建立一个控制台程序,实例化CRect类和CCube类,并输出结果(可参
见《基础教程》P38程序)
(5)(选作)尝试建立CRect类数组,随机初始化,并使用数组指针顺序输

2、试验环境
(1)Visual Studio 6.0 (或以上)标准版
3、试验目标
(1)熟悉Visual Studio开发环境
(2)熟悉MFC应用程序的组成
(3)复习C++语法,巩固类和继承的概念
4、实验步骤
(运行结果抓图,有用的程序代码,并辅助文字说明)。

计算机图形学完整课件

计算机图形学完整课件

由于我们使用的只是d的符号,而且d的增量都是整数,只是其初始值包含小数。因此,我们可以用2d代替d,来摆脱小数,写出仅包含整数运算的算法:
void MidpointLine(x1,y1,x2,y2,color) int x1,y1,x2,y2,color; { int a,b,d1,d2,dx,y; a=y1-y2; b=x2-x1; d=2*a+b; d1=2*a; d2=2*(a+b); x=x1; y=y1;
setpixel(x,y,color); while(x<x2) { If(d<0) {x++;y++d+=d2;} else {x++;d+=d1;} setpixel(x,y,color); }
2.1.3 Bresenham 画线算法
算法分析
算法推导
可视化效果图
2.1.4 图形环境的设置
1.2 计算机图形学的发展
1.2.1 计算机图形学的发展简史 50年代准备阶段 60年代发展阶段 70年代推广应用阶段 80年代系统实用化阶段 90年代标准化智能化阶段
1.2.2 计算机图形学的发展方向 造型技术的发展 真实图形生成技术的发展 人—机交互技术的发展 模拟艺术的仿真 计算机动画
另外,为了方便起见,我们只考虑中心在原点,半径为整数R的圆x2+y2=R2。对于中心不在原点的圆,可先通过平移变换,化为中心在原点的圆,再进行扫描转换,把所得的像素坐标加上一个位移量即得所求像素坐标。
1.3 计算机图形学的应用
1.用户接口 2.计算机辅助设计与制造(CAD/CAM) 3.地形地貌和自然资源图 4.计算机动画和艺术 5.件 计算机图形系统软件 计算机图形显示原理 光栅扫描式图形显示器

计算机图形学(C语言)教案

计算机图形学(C语言)教案

计算机图形学(C语言)教案第一章:计算机图形学概述1.1 图形与图像的概念介绍图形的定义和图像的定义解释图形和图像的区别与联系1.2 计算机图形学的基本概念介绍计算机图形学的定义和发展历程解释图形表示、图形和图形显示的基本过程1.3 计算机图形学应用领域列举计算机图形学在各个领域的应用实例探讨计算机图形学未来的发展趋势第二章:C语言基础2.1 C语言简介介绍C语言的历史和特点解释C语言在计算机图形学中的应用2.2 C语言基本语法介绍变量、数据类型、运算符和表达式的概念及使用方法解释控制语句、函数和数组的基本用法2.3 图形库的基本使用介绍图形库的概念和作用解释如何使用图形库进行图形绘制和显示第三章:基本图形的绘制3.1 点的绘制介绍如何使用C语言绘制点解释点的坐标系统和绘点函数的用法3.2 线的绘制介绍如何使用C语言绘制直线和曲线解释线的参数方程和绘线函数的用法3.3 填充区域的绘制介绍如何使用C语言绘制填充区域解释填充算法和绘填充区域函数的用法第四章:图形变换4.1 坐标变换介绍坐标变换的概念和作用解释平移、旋转和缩放等基本变换的实现方法4.2 投影变换介绍投影变换的概念和种类解释正交投影和透视投影的实现方法4.3 视图变换介绍视图变换的概念和作用解释平视、俯视和仰视等视图变换的实现方法第五章:动画与交互5.1 动画的基本概念介绍动画的定义和分类解释动画的方法和播放原理5.2 C语言实现动画介绍如何使用C语言实现简单的动画效果解释动画的播放控制和效果实现方法5.3 用户交互的基本概念介绍用户交互的定义和作用解释图形用户界面(GUI)的基本组件和交互方式5.4 C语言实现用户交互介绍如何使用C语言实现用户交互功能解释用户输入处理和输出显示的方法和技巧第六章:图形界面设计6.1 图形界面设计基础介绍图形界面设计的目的和重要性解释图形界面设计的基本原则和方法6.2 常用图形界面组件介绍按钮、菜单、对话框等常用图形界面组件的使用方法解释如何使用C语言绘制和处理这些组件6.3 图形界面事件处理介绍图形界面事件的概念和类型解释如何使用C语言处理用户交互事件第七章:图像处理基础7.1 图像处理概述介绍图像处理的概念和任务解释图像处理在计算机图形学中的应用7.2 图像文件格式介绍常见图像文件格式如BMP、JPG、PNG等的特点和用法解释如何使用C语言读取和写入这些图像文件7.3 图像基本处理技术介绍图像处理的基本技术如图像滤波、图像增强、图像分割等解释这些技术在计算机图形学中的应用和实现方法第八章:曲面建模8.1 参数曲面的基本概念介绍参数曲面的定义和表示方法解释参数曲面的性质和绘制方法8.2 常见曲面类型的绘制介绍柱面、球面、环面等常见曲面的定义和绘制方法解释如何使用C语言实现这些曲面的绘制8.3 曲面变换介绍曲面变换的概念和作用解释如何使用C语言实现曲面的变换第九章:光照与渲染9.1 光照模型介绍光照模型的概念和重要性解释朗伯光照模型和Phong 光照模型的原理和实现方法9.2 材质属性介绍材质属性的概念和作用解释如何设置和调整材质的反射率、透射率和光泽度等属性9.3 渲染技术介绍渲染的概念和任务解释如何使用C语言实现简单的渲染技术如纹理映射、阴影等第十章:案例分析与实践10.1 案例分析分析具体计算机图形学应用案例解释案例中的关键技术和实现方法10.2 实践项目提供实践项目让学生动手实现计算机图形学的基本功能指导学生如何设计程序结构、编写代码并调试程序10.3 课程设计介绍课程设计的要求和评价标准第十一章:OpenGL基础11.1 OpenGL简介介绍OpenGL的概念和作用解释OpenGL的特点和应用领域11.2 OpenGL基本设置介绍如何设置OpenGL环境解释如何使用OpenGL进行窗口创建、初始化等基本操作11.3 OpenGL绘制基本图形介绍如何使用OpenGL绘制点、线、三角形等基本图形解释OpenGL中的坐标系统、视图变换等概念第十二章:OpenGL高级图形绘制12.1 颜色与纹理映射介绍颜色和纹理映射的概念解释如何使用OpenGL进行颜色和纹理映射的设置和绘制12.2 光照与材质介绍光照和材质的概念解释如何使用OpenGL实现光照和材质的效果12.3 动画与交互介绍动画和交互的概念解释如何使用OpenGL实现动画和交互的效果第十三章:OpenGL图形编程实例13.1 实例一:绘制一个三角形解释如何使用OpenGL绘制一个简单的三角形指导如何编写代码和调试程序13.2 实例二:3D旋转立方体解释如何使用OpenGL绘制一个旋转的立方体指导如何编写代码和调试程序13.3 实例三:动态光照变化解释如何使用OpenGL实现动态光照变化的效果指导如何编写代码和调试程序第十四章:计算机图形学项目实践14.1 项目设计思路介绍项目的设计思路和目标解释项目中的关键技术和实现方法14.2 项目实现提供项目实现的过程和步骤指导学生如何编写代码、调试程序和优化性能14.3 项目总结与评价总结项目的完成情况和成果评价项目的创新性、实用性和稳定性等指标第十五章:计算机图形学前沿技术15.1 虚拟现实技术介绍虚拟现实技术的概念和应用领域解释虚拟现实技术在计算机图形学中的重要性15.2 增强现实技术介绍增强现实技术的概念和应用领域解释增强现实技术在计算机图形学中的重要性15.3 计算机图形学未来发展探讨计算机图形学未来的发展趋势和研究方向激发学生对计算机图形学的研究兴趣和创新思维重点和难点解析本文主要介绍了计算机图形学(C语言)的教案,内容涵盖了图形与图像的概念、C语言基础、基本图形的绘制、图形变换、动画与交互、图形界面设计、图像处理基础、曲面建模、光照与渲染、案例分析与实践、OpenGL基础、OpenGL高级图形绘制、OpenGL图形编程实例、计算机图形学项目实践以及计算机图形学前沿技术等十五个章节。

图形学上机实验报告

图形学上机实验报告

计算机图形学上机实验报告计算机科学与技术学院班级:CS13 班学号:U姓名:指导教师:完成日期:2015/11/15实验一:kock分形雪花图案的绘制一、实验目的与要求目的:1.通过实验初步了解OPENGL。

2通过上机编程掌握OPENGL的画图机理和OPENGL。

要求:1.了解分形绘图的过程。

二、实验内容以Kock曲线为例,说明分形图形是如何生成的。

Kock曲线的初始生成元是一条直线段,生成规则是将直线段均分为三等分,首尾两端保持不变,中间用两端等长且互成60度角的直线段代替。

迭代公式如下:分别迭代1,3,6次,并记录结果。

三、实验结果实验结果图如下:3-1第一次分形3-2三次分形3-3六次分形四、体会通过这次实验了解到了分形系统的从图元到图形的形成过,分形在图形学的应用中,可以用来表示岩层、云、水、树、等。

并且亲手实现了“雪花”的分形图形。

通过迭代次数可控制图形的不同。

掌握了分形系统的形成过程。

完成了此次试验目的。

五、源程序void drawline(pt pt1, pt pt2)//绘制线{glBegin(GL_LINES);glVertex2d(pt1.x, pt1.y);glVertex2d(pt2.x, pt2.y);glEnd();}void drawkoch(pt pt1, pt pt2, int n)//n为确定的迭代次数{pt p1, p2, p3, p4, p5;glColor3f(0.0, 0.0, 0.0);p1.x = pt1.x;p1.y = pt1.y;p2.x = pt2.x;p2.y = pt2.y;if (n == 1){ drawline(p1, p2); }if (n>1){p3.x = p1.x + (-p1.x + p2.x) / 3;p3.y = p1.y + (-p1.y + p2.y) / 3;p4.x = p1.x + 2 * (-p1.x + p2.x) / 3;p4.y = p1.y + 2 * (-p1.y + p2.y) / 3;p5.x = (p4.x - p3.x) / 2 - (p4.y - p3.y)*sqrt(3.0) / 2 + p3.x;p5.y = (p4.y - p3.y) / 2 + (p4.x - p3.x)*sqrt(3.0) / 2 + p3.y;drawkoch(p1, p3, n - 1);drawkoch(p3, p5, n - 1);drawkoch(p5, p4, n - 1);drawkoch(p4, p2, n - 1);}if (n == 0)exit(0);}void display(void){glClear(GL_COLOR_BUFFER_BIT);pt p1, p2, p3;p1.x = 30;p1.y = 30;p2.x = 110;p2.y = 30;p3.x = 70;p3.y = 30 + 40 * sqrt(3.0);int n;do{//循环改变迭代次数glClear(GL_COLOR_BUFFER_BIT);printf("请输入Koch雪花的迭代次数,或输入0退出:");scanf("%d", &n);drawkoch(p1, p3, n);drawkoch(p3, p2, n);drawkoch(p2, p1, n);glFlush();} while (n != 0);}int main(int argc, char**argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(50, 100);glutInitWindowSize(500, 400);glutCreateWindow("KOCHCURVE");init();glutDisplayFunc(display);glutMainLoop();return 0;}实验二:星球环绕模型一、实验目的与要求目的:1.通过实验初步了解OpenGL中的深度测试缓存器算法。

计算机图形学教学大纲(word文档【经典】)

计算机图形学教学大纲(word文档【经典】)

XX大学《计算机图形学》教学大纲编写单位:执笔人:审核人:XX大学xx系20xx年9 月[实验要求]本课程实验要求较高,实验内容多且相关性较强,有关实验的具体要求与内容需按实验大纲执行,本大纲中不再另行说明。

第一章绪论[教学内容]计算机图形学的目标与任务;计算机图形学的内容体系;计算机图形学相关学科;计算机图形学相关领域。

[教学目标与要求]熟练掌握:计算机图形学的内容体系;计算机图形学的目标与任务;掌握:计算机图形学的应用领域;计算机图形学的相关学科;了解:计算机图形学的发展。

[重点与难点]计算机图形学的内容体系;计算机图形学的目标与任务。

[教学时数]2学时第一节计算机图形学的目标与任务一、视觉交流是计算机图形学的目标与任务二、计算机图形学的三个基本任务第二节计算机图形学的内容体系一、基础模块二、建模与表示模块三、绘制模块四、交互技术第三节计算机图形学相关学科一、图形与图像二、相关学科第四节计算机图形学的应用领域一、计算机辅助设计与制造(CAD/CAM)二、科学计算可视化三、虚拟现实四、动画第五节计算机图形学的发展一、计算机图形学的发展简史二、计算机图形学的发展趋势[复习思考题]1、图形包括哪两方面的要素?在计算机中如何表示它们?2、图形的本质是什么?3、如何看待计算机图形学的发展趋势?第二章图形系统[教学内容]Visual 图形系统概述;图形系统体系结构;图形支撑软件;图形硬件显示原理;[教学目标与要求]熟练掌握:图形系统体系结构;图形硬件显示原理掌握:图形系统基本概念和术语;了解:图形支撑软件[重点与难点]图形系统体系结构;图形硬件显示原理[教学时数]2学时第一节图形系统概述一、图形系统组成结构1.图形系统组成结构2.图形系统分类第二节图形系统体系结构一、概述二、应用程序阶段三、几何处理阶段四、光栅阶段第三节图形支撑软件一、OpenGL二、DirectX三、Java2D和Java3D第四节图形硬件显示原理一、图形显示设备及工作原理二、图形显示方式三、光栅扫描图形显示系统[复习思考题]1、从图形硬件显示原理角度,思考并分析如何显示直线?2、请你总结一下光栅显示系统的优缺点?3、在光栅显示系统中,显卡有什么作用?第三章二维图形生成[教学内容]直线生成算法;圆弧绘制算法;区域填充;字符;反走样技术;[教学目标与要求]熟练掌握:直线生成算法;区域填充;圆弧绘制算法掌握:反走样技术了解:字符编码[重点与难点]直线生成算法;区域填充;圆弧绘制算法[教学时数]8学时第一节直线生成算法一、数值微分法二、逐点比较法三、Bresenham画线法四、中点画线法第二节圆弧绘制算法一、基于光栅的整圆绘制算法二、角度离散法绘制圆弧和椭圆弧第三节区域填充一、种子填充算法二、多边形填充算法第四节字符一、字符的编码二、点阵字符三、矢量字符第五节反走样技术第六节编程实例-地图绘制一、地图绘制方法二、基于OpenGL的地图绘制[复习思考题]1、简述DDA算法、中点画线法、Bresenham画线法算法的思想?2、根据中点画圆法和Bresenham算法,绘制一条端点为(1,1)和(6,5)的直线,画出对应各像素的位置?第四章图形几何变换[教学内容]二维几何变换;三维几何变换;图形几何变换的模式;[教学目标与要求]熟练掌握:二维几何变换;三维几何变换;掌握:图形几何变换的模式;[重点与难点]二维几何变换;三维几何变换;[教学时数]6学时第一节二维几何变换一、基本变换二、二维复合变换三、二维坐标系间的变换第二节三维几何变换一、基本变换二、三维复合变换三、三维坐标系间的变换第三节图形几何变换的模式一、固定坐标系模式二、活动坐标系模式[复习思考题]1、试编写对二维点实现平移、旋转、比例变换的程序。

计算机图形学上机实验指导

计算机图形学上机实验指导

计算机图形学上机实验指导指导教师:张加万老师助教:张怡2009-10-10目录1.计算机图形学实验(一) – OPENGL基础 ..................................... - 1 -1.1综述 (1)1.2在VC中新建项目 (1)1.3一个O PEN GL的例子及说明 (1)2.计算机图形学实验(二) – OPENGL变换 ..................................... - 5 -2.1变换 (5)3.计算机图形学实验(三) - 画线、画圆算法的实现....................... - 9 -3.1MFC简介 (9)3.2VC6的界面 (10)3.3示例的说明 (11)4.计算机图形学实验(四)- 高级OPENGL实验...................... - 14 -4.1光照效果 (14)4.2雾化处理 (16)5.计算机图形学实验(五)- 高级OPENGL实验........................ - 20 -5.1纹理映射 (20)5.2反走样 (24)6.计算机图形学实验(六) – OPENGL IN MS-WINDOWS .......... - 27 -6.1 实验目标: (27)6.2分形 (28)1.计算机图形学实验(一) – OpenGL基础1.1综述这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C++,它对OpenGL提供了完备的支持。

OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。

本次实验不涉及面向对象编程,不涉及MFC。

1.2在VC中新建项目1.2.1新建一个项目选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。

程序设计员实操考核:计算机图形学与游戏开发技术

程序设计员实操考核:计算机图形学与游戏开发技术

程序设计员实操考核:计算机图形学与游戏开发技术引言计算机图形学与游戏开发技术是现代计算机科学领域的重要研究方向。

它涉及了计算机图像处理、计算机视觉、计算机动画以及虚拟现实等多个领域。

作为一个程序设计员,掌握计算机图形学与游戏开发技术对于开发各种图形应用和游戏具有重要意义。

本文将介绍计算机图形学与游戏开发技术的基本概念和实操考核要点。

一、计算机图形学基础计算机图形学是研究如何生成、处理和显示图像的学科。

它涉及了多种算法和技术,包括坐标变换、线段绘制、多边形填充、光栅化等。

掌握基本的计算机图形学概念是进行游戏开发和图像处理的基础。

1.1 坐标系统和坐标变换在计算机图形学中,通常使用二维和三维的坐标系统来表示图像的位置。

二维坐标系统使用平面上的点坐标表示,三维坐标系统使用空间中的点坐标表示。

坐标变换是指将一个坐标系中的点转换到另一个坐标系中的操作,常用的坐标变换包括平移、旋转和缩放。

1.2 图像处理基础图像处理是指对图像进行各种操作和转换的技术。

常见的图像处理操作包括图像增强、图像滤波、图像分割等。

图像处理技术在游戏开发中广泛应用,可以实现游戏中的特效效果和图像优化等功能。

1.3 光栅化和绘制算法光栅化是指将图形转换为像素点的过程。

在计算机图形学中,绘制器会根据给定的图形描述将图形转化为像素点,并进行光栅化处理。

常见的绘制算法包括线段绘制算法和多边形填充算法。

二、游戏开发技术概述游戏开发技术是应用计算机图形学和计算机动画技术来开发各种类型的游戏。

它涵盖了游戏设计、游戏编程、游戏引擎等多个方面。

掌握游戏开发技术需要具备扎实的计算机图形学基础和相关编程技能。

2.1 游戏设计与开发流程游戏开发通常包括游戏设计、游戏编程、游戏测试和游戏发布等阶段。

游戏设计是指定义游戏的玩法规则和游戏内容,游戏编程是指根据设计要求使用编程语言来实现游戏逻辑和游戏界面,游戏测试是指对游戏进行功能测试和性能测试,游戏发布是指将游戏发布到特定的平台上供玩家下载和安装。

计算机图形学上机实验

计算机图形学上机实验

《计算机图形学》上机实验报告一、实验设计在曲线上按参数t进行for循环200次,每次将ti=i/200代入参数方程计算出一个点。

将这些点连成折线段即可。

glBegin(GL_LINE_STRIP);for(… )glVertex(xi,yi);glEnd();二、关键代码// test4.cpp : 此文件包含 "main" 函数。

程序执行将在此处开始并结束。

//#include"pch.h"#include<cstdio>#include<cmath>#include<GL/glut.h>const GLfloat Pi = 3.1415926536f;//定义点集struct data {GLfloat x;GLfloat y;}Point[201];void init() //初始化函数{glClearColor(1.0, 1.0, 1.0, 0.0); //设置背景颜色glMatrixMode(GL_PROJECTION); // 设置投影参数gluOrtho2D(0.0, 600.0, 0.0, 400.0); // 设置场景的大小}void mydisplay() //显示函数{glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 0.0, 0.0); //设置线条颜色glPointSize(2); //设置点的大小glTranslatef(100.0f, 0.0f, 0.0f); //平移图形glScalef(0.5f, 0.5f, 0.0f); //缩小图像0.5倍glRotatef(60.0f, 1.0f, 0.0f, 0.0f); //沿x轴旋转60度glBegin(GL_LINE_STRIP);for (int i = 1; i <= 200; i++){GLfloat t = i / 200.0;Point[i].x = 200.0 + 50.0 * (2.0 * cos(2.0 * Pi*t) - cos(4.0 * Pi*t)); //参数曲线Point[i].y = 150.0 + 50.0 * (2.0 * sin(2.0 * Pi*t) - sin(4.0 * Pi*t)); //参数曲线glVertex2i(Point[i].x, Point[i].y); //绘制曲线}glEnd();glFlush();}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("绘制曲线及图形变换");init();glutDisplayFunc(&mydisplay);glutMainLoop();return 0;}三、实验结果截图。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、扫描转换直线段的算法之一中点算法:#include "graphics.h"#include "conio.h"#include "stdio.h"#include "math.h"#define closegr closegraphvoid MidPointLine(int x0,int y0,int x1,int y1,int color)/*假定x0<x1,y0<y1,-1≤m≤1*/{int dx,dy,incrE,incrNE,d,x,y;dx=x1-x0;dy=y1-y0;d=dx-2*dy; /*初始化判别式d*/incrE=-2*dy; /* 取像素E时判别式的增量*/ incrNE=2*(dx-dy); /*取像素NE是判别式的增量*/x=x0,y=y0;putpixel(x,y,color);setbkcolor(BLACK); /*设置运行窗口的背景颜色*/ while(x<x1){if(d>0) /*取像素E*/d+=incrE;else{d+=incrNE; /*取像素NE */y++;x++;}putpixel(x,y,color);delay(3000);} /*while循环结束*/} /*中点算法的程序结束*/main(){int gdrive=DETECT,gmode;int x0=50,y0=50,x1=1000,y1=1000,color=3;initgraph( &gdrive,&gmode," ");MidPointLine(x0,y0,x1,y1,color);}算法之二DDA算法:#include <stdio.h>#include <graphics.h>#include <math.h>int max(int a,int b){if(a>b)return a;elsereturn b;}int min(int a,int b){if(a<b)return a;elsereturn b;}void DDA(int xs,int ys,int xe,int ye,int color){float dx,dy,k,y,x;dx = xe - xs;dy = ye - ys;if(dx == 0){y = min(ys,ye);x = xs;while(y < max(ys,ye)){putpixel((int)x,(int)y,color);y = y + 1;delay(10000);}}else{k = dy/dx;if(fabs(k)<=1){x = min(xs,xe);if(x == xs)y = ys;elsey = ye;for(;x < max(xe,xs);x++){putpixel((int)x,(int)(y+0.5),color);y = y + k;delay(10000);}}else{ y = min(ys,ye);if(y == ys)x = xs;elsex = xe;for(;y<max(ys,ye);y++){putpixel((int)(x+0.5),(int)y,color);x = x + 1/k;delay(10000);}}}}int main(){int driver = DETECT,graphmode;int a,b,c,d;a=b=c=d=0;initgraph(&driver,&graphmode,"");setbkcolor(BLACK);printf("Please input x0,y0\n");scanf("%d%d",&a,&b);printf("%d%d",a,b);printf("\nPlease input x1,y1\n");scanf("%d%d",&c,&d);DDA(a,b,c,d,WHITE) ;getch();closegraph();}2、生成圆弧的中点算法:#include "graphics.h"#include "conio.h"#include "stdio.h"void CirclePoints(int x,int y,int color){putpixel(x,y,color);putpixel(y,x,color);putpixel(-y,x,color);putpixel(y,-x,color);putpixel(x,-y,color);putpixel(-x,-y,color);putpixel(-y,-x,color);}void MidPointCircle(int radius,int color){int x,y;float d;x=0;y=radius;d=5.0/4-radius;CirclePoints(x,y,color);Delay(2000);while(y>x){if(d<=0)d+=2.0*x+3;else{d+=2.0*(x-y)+5;y--;}x++;CirclePoints(x,y,color);Delay(2000);}}int main(){int driver = DETECT,graphmode;int a;initgraph(&driver,&graphmode,"");setbkcolor(BLACK);printf("Please input radius:");scanf("%d",&a);MidPointCircle(a,WHITE);getch();closegraph();}3、生成圆的中点算法:#include <stdio.h>#include <graphics.h>#include <math.h>void CirclePoints(int x,int y,int x1,int y1,int color)putpixel(y,x,color);putpixel(2*x1-y,x,color);putpixel(2*x1-x,y,color);putpixel(y,2*y1-x,color);putpixel(x,2*y1-y,color);putpixel(2*x1-x,2*y1-y,color);putpixel(2*x1-y,2*y1-x,color);}void MidPointCircle(int radius,int x1,int y1,int color) {int x,y;float d;x=x1;y=y1+radius;d=5.0/4-radius;CirclePoints(x,y,x1,y1,color);delay(3000);while(y-y1>x-x1){if(d<=0)d+=2.0*(x-x1)+3;else{d+=2.0*(x-x1-y+y1)+5;y--;}x++;CirclePoints(x,y,x1,y1,color);delay(3000);}}int main(){ int driver = DETECT,graphmode;int a,x,y;initgraph(&driver,&graphmode,"");setbkcolor(BLACK);printf("Please input radius\n");scanf("%d",&a);printf("Please input x,y\n");scanf("%d%d",&x,&y);MidPointCircle(a,x,y,WHITE);getch();closegraph();}4、生成椭圆的中点算法:#include "Conio.h"#include "stdio.h"#include "math.h"#include "graphics.h"void EllipsePoints(int x,int y,int x1,int y1,int color) {putpixel(x,y,color);putpixel(2*x1-x,y,color);putpixel(2*x1-x,2*y1-y,color);putpixel(x,2*y1-y,color);}void MidPointEllipse(int a,int b,int x1,int y1,int color) {int x,y,d,xp,yp,squarea,squareb;squarea=a*a;squareb=b*b;xp=(int)(0.5+(float)squarea/sqrt((float)(squarea+squareb))); yp=(int)(0.5+(float)squareb/sqrt((float)(squarea+squareb))); x=x1;y=y1+b;d=4*(squareb-squarea*b)+squarea;EllipsePoints(x,y,x1,y1,color);while(x-x1<=xp){if(d<=0)d+=4*squareb*(2*(x-x1)+3);else{d+=4*squareb*(2*(x-x1)+3)-8*squarea*((y-y1)-1);y--;}x++;EllipsePoints(x,y,x1,y1,color);}x=x1+a;y=y1;d=4*(squarea-a*squareb)+squareb;EllipsePoints(x,y,x1,y1,color);while(y-y1<yp){if(d<=0)d+=4*squarea*(2*(y-y1)+3);else{d+=4*squarea*(2*(y-y1)+3)-8*squareb*((x-x1)-1);x--;}y++;EllipsePoints(x,y,x1,y1,color);}}int main(){int driver=DETECT,graphmode;int a,b,x,y;initgraph(&driver,&graphmode," ");setbkcolor(BLACK);printf("Please input a,b\n");scanf("%d%d",&a,&b);printf("Please input x,y\n");scanf("%d%d",&x,&y);MidPointEllipse(a,b,x,y,WHITE);getch();closegraph();}注:在运行窗口中输入a,b的数值尽量小(15~2以内)。

相关文档
最新文档