计算机图形学课程设计

合集下载

计算机图形学教案

计算机图形学教案

计算机图形学教案一、课程简介计算机图形学是一门涉及计算机图形、图像处理和计算机视觉等领域的重要课程。

本课程将介绍计算机图形学的基本概念、原理和应用,帮助学生掌握计算机图形学的基础知识,并提升他们在图形学领域的技能。

二、课程结构1. 计算机图形学基础- 介绍计算机图形学的历史发展和基本概念- 讨论计算机图形学的应用领域和未来发展趋势- 熟悉图像处理、图形学渲染和动画等基本技术2. 图形系统建模- 学习三维图形对象的建模和表示方法- 掌握光栅化和矢量化图形处理技术- 讨论图形系统的设计和实现3. 计算机视觉- 理解视觉系统的基本原理和功能- 学习计算机视觉的算法和应用- 探讨计算机视觉在人工智能领域的应用4. 图形学编程实践- 深入学习图形学编程语言和库- 完成实际项目,提升图形学编程能力- 探索图形学在多领域的应用案例三、教学目标1. 帮助学生全面了解计算机图形学的基本知识和技术2. 培养学生分析和解决计算机图形学问题的能力3. 提升学生在图形学领域的实际操作和应用能力4. 激发学生对计算机图形学研究的兴趣和热情四、教学方法1. 理论讲解:通过课堂讲解、案例分析等方式,向学生介绍计算机图形学的基本概念和原理2. 实践操作:组织学生参与实验、项目等实际操作,巩固理论知识并提升实践能力3. 课堂互动:鼓励学生提问、讨论,促进师生间的互动和交流4. 作业考核:布置不同形式的作业,检测学生对知识的掌握情况,促进学习效果的提升五、教材参考1. 《计算机图形学导论》2. 《OpenGL图形与游戏开发实践》3. 《计算机视觉:算法与应用》4. 《经典图形学算法实例详解》六、学习评价1. 课堂表现:出勤情况、课堂参与度等2. 作业考核:课后作业、实验报告等3. 期末考核:闭卷考试、项目实践等4. 综合评价:综合考虑以上因素,对学生进行综合评定七、总结计算机图形学作为一门新兴的学科,正逐渐成为信息技术领域的热门专业之一。

计算机图形学课程设计

计算机图形学课程设计

计算机图形学课程设计一、课程目标知识目标:1. 让学生掌握计算机图形学的基本概念、基本原理和基本算法,如二维图形的表示、变换、裁剪和三维图形的建模、光照模型等。

2. 使学生了解计算机图形学在实际应用中的发展现状和前景,如虚拟现实、计算机辅助设计等。

3. 帮助学生建立计算机图形学与相关学科(如数学、物理、艺术等)的联系,提高跨学科素养。

技能目标:1. 培养学生运用计算机图形学知识解决实际问题的能力,如使用相关软件进行二维绘图、三维建模等。

2. 提高学生的编程能力,使其能够使用至少一种计算机图形学编程库(如OpenGL、DirectX等)实现基本图形绘制和动画效果。

3. 培养学生的团队协作能力和沟通表达能力,通过小组项目实践,共同完成具有一定难度的计算机图形学任务。

情感态度价值观目标:1. 激发学生对计算机图形学的兴趣,培养其主动探究、创新实践的精神。

2. 培养学生具有良好的审美观,能够从美学的角度评价和优化计算机生成的图形。

3. 强化学生的版权意识,尊重他人知识产权,遵循学术道德,树立正确的价值观。

本课程针对高中年级学生,结合学科特点和教学要求,将目标分解为具体的学习成果,以便于后续的教学设计和评估。

通过本课程的学习,期望学生能够掌握计算机图形学的基础知识,提高实际操作技能,培养良好的情感态度价值观。

二、教学内容1. 计算机图形学基本概念与历史:介绍计算机图形学的定义、发展历程、应用领域及发展趋势。

- 教材章节:第一章 计算机图形学概述- 内容安排:1课时2. 二维图形的表示与处理:讲解二维图形的数学表示、几何变换、裁剪算法等。

- 教材章节:第二章 二维图形处理- 内容安排:4课时3. 三维图形的建模与渲染:介绍三维图形的建模方法、光照模型、纹理映射等。

- 教材章节:第三章 三维图形处理- 内容安排:5课时4. 计算机动画与视觉效果:探讨计算机动画原理、关键帧动画、粒子系统等视觉效果技术。

- 教材章节:第四章 计算机动画与视觉效果- 内容安排:4课时5. 计算机图形学编程实践:学习计算机图形学编程库(如OpenGL、DirectX 等)的基本使用,完成二维和三维图形绘制实例。

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

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

计算机图形学(C语言)教案第一章:计算机图形学概述1.1 课程介绍介绍计算机图形学的定义、发展和应用领域。

解释图形和图像的区别。

1.2 图形学基本概念什么是点、线、面和体。

坐标系统和变换。

图形表示方法和存储结构。

1.3 图形处理流程图形输入、输出和显示。

图形裁剪和映射。

图形渲染和着色。

1.4 常见图形算法直线、圆和椭圆的算法。

填充算法和图像处理算法。

第二章:C语言基础2.1 C语言简介介绍C语言的历史和特点。

解释C语言在计算机图形学中的应用。

2.2 基本数据类型和语法整型、浮点型、字符型数据。

变量、常量和运算符。

2.3 控制语句条件语句和循环语句。

分支语句和循环控制语句。

2.4 函数和数组函数的定义和调用。

一维、二维数组和字符串。

第三章:图形库和API3.1 图形库简介什么是图形库和API。

常见的图形库和API介绍。

3.2 图形库的使用方法图形库的安装和配置。

图形库的基本函数和功能。

3.3 图形API的调用过程初始化图形环境。

创建图形对象和操作图形对象。

处理图形事件和关闭图形环境。

3.4 示例:绘制简单的图形使用图形库绘制点、线、圆等基本图形。

调整图形属性和颜色。

第四章:图形绘制和变换4.1 图形绘制基础绘制基本图形和文本。

使用图形属性调整图形外观。

4.2 图形变换坐标变换和几何变换。

矩阵和变换矩阵的运算。

4.3 图形裁剪和映射裁剪原理和算法。

映射原理和算法。

4.4 示例:绘制复杂的图形使用图形变换绘制复杂的图形。

应用图形裁剪和映射技术。

第五章:图形渲染和着色5.1 图形渲染基础什么是图形渲染和着色。

光和材质的模型。

5.2 颜色模型和转换RGB颜色模型和HSV颜色模型。

颜色转换和混合。

5.3 图形着色和光照基本着色算法和纹理映射。

点光源、聚光灯和环境光。

5.4 示例:实现简单的光照效果使用图形着色和光照技术绘制三维图形。

调整光照参数和观察光照效果。

第六章:图形界面设计6.1 图形界面设计基础界面设计原则和概念。

计算机图形学的课程设计

计算机图形学的课程设计

计算机图形学课程设计设计题目:画三次Bezier曲线和三次B样条曲线班级:姓名:学号:一、总体目标和要求1 课程设计目的本课程主要内容包括计算机图形学的研究内容、发展与应用,图形输入输出设备,图形显示原理,图形软件标准,基本图形生成算法,图形几何变换与裁剪,自由曲线和曲面,三维实体造型,分形几何造型,分形艺术,隐藏面消除,光照模型,颜色模型,光线跟踪,纹理细节模拟,常用的计算机动画技术和软件等。

通过本课程设计,使自己了解计算机图形学的有关原理、算法及系统,掌握基本图形显示程序设计方法,及二维和三维图形变换程序设计方法,为进一步学习计算机辅助设计方面的技术知识打下基础。

2 目标以图形学算法为目标,深入研究。

续而策划设计实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面做出评价和改进意见。

通过完成一个完整程序,经历策划、设计、开发、总结。

达到:(1)巩固和实践计算机图形学课程中的理论和算法;(2)学习表现计算机图形学算法的技巧;(3)培养认真学习积极探索的精神。

3总体要求策划、设计并实现一个能够充分表现图形学算法的系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。

二、内容与要求1设计题目画三次Bezier曲线和三次B样条曲线。

2设计要求利用计算机图形学原理画出三次Bezier曲线和三次B样条曲线。

三、算法描述(1)画三次Bezier曲线根据Q(t)=∑P i•B• C i n t i(1-t)n-i(∑中的n=3)并且 C i nBEZ 0,3BEZ 1,3(u)=3u(1-u)(1-u)BEZ2,3(u)=3uu(1-u)BEZ3,3(u)=3uuu三次Bezier函数可以写成P(u)=[u3 u2 u 1]×M×[a b c d] 其中M=[ -1 3 -3 1 ]3 -6 -3 0-3 3 0 01 0 0 0i=0(2)画三次B样条曲线Q i,3(t)=∑P i+l F l,3(t)= P i F0,3(t)+ P i+1 F1,3(t)+ P i+2 F2,3(t)+ P i+ 3 F3,3(t)(其中∑中的n=3)因为四个调和函数F0,3(t)、F1,3(t)、F2,3(t)和F3,3(t) 已知(参看公式7-5-3)因此只要给出四个控制点的位置矢量的坐标,当t在[0,1]范围内取离散地取100个点时(dt=0.01),分别求出每一个曲线上点,相邻点用直线段连接起来,就可以得到相应的B样条曲线。

计算机图形学课程设计

计算机图形学课程设计

《计算机图形学》课程设计报告学院:专业:班级:姓名:学号:指导教师:年11 月15 日一、课程设计报告内容说明:1 、直线:1.1 点生成直线利用for 循环,用pDC->SetPixel(int x,int y,RGB(a,b,c))像素函数画出直线。

1.2 DDA :根据直线的微分方程来产生直线,即dy/dx=△y/△x=(12y y -)/(12x x -)=k其中(1x ,1y )、(2x ,2y )是直线的两个端点坐标。

DDA 算法的原理是增量法,即使x 和y 同时以很小的步长增长,每次增长量与x 和y 的一阶导数成正比。

直线的一阶导数是与△x 和△y 成正比的函数。

可以将x 和y 各递增ε△x 和ε△y 来产生线,ε是很小的量。

从当前画线任意点的位置(i x ,i y )上分别递增两个增量ε△x 和ε△y ,就可以得到直线增长的下一个(1+i x ,1+i y )的坐标位置公式如下1+i x =ix +ε△x1+i y =i y +ε△y1.3 金刚石将圆分为20份,利用直线生成的MoveTo 和LineTo 函数,使每个点与其他点相连。

展示图形为:点生成直线、数值微分法画直线、金刚石 2、曲线2.1 直角坐标系:写出参数表达式后,利用MoveTo 和LineTo 函数,连接各点。

如:正弦曲线:参数方程如下 x_SIN=1000*t; y_SIN=1000*sin(t);极坐标系:写出参数表达式后,利用MoveTo 和LineTo 函数,连接各点。

如:四叶图:参数方程如下r_SIYE=5000*sin(2*t); x_SIYE=r_SIYE*cos(t); y_SIYE=r_SIYE*sin(t);2.2 以实际工作中应用较多的参数样条曲线为例:参数样条曲线定义:给定n+1个控制点Pi (i =0,1,2,…,n ),n 次B 样条曲线段的参数表达式为: 。

依次用线段连接控制点Pi (i =0,1,2,…,n )组成的多边形称为B 样条曲线控制多边形。

计算机图形学-期末课程设计

计算机图形学-期末课程设计

图形学课程设计报告题目:系别:班级:学号:姓名:指导老师:目录诚信说明......................................................................................................... 错误!未定义书签。

目录 .. (1)一、项目描述 (2)1.1项目的目的 (2)二、项目需求 (2)2.1需求分析 (2)2.2功能描述 (2)三、项目设计 (3)3.1直线扫描算法 (3)3.1.1 DAA扫描线算法 (3)3.1.2 中点扫描线算法 (3)3.1.3 Bresenham扫描线算法 (3)3.2圆的扫描算法 (4)3.2.1 中点画圆扫描算法 (4)3.2.2 Bresenham画圆扫描算法 (4)3.3种子填充算法 (4)3.4图形的基本几何变换算法 (4)3.4.1平移 (4)3.4.2旋转 (5)3.4.3伸缩 (5)3.5 Bezier曲线算法 (5)四、项目效果 (5)五、项目总结 (10)六、参考文献 (11)七、附录 (11)一、项目描述1.1项目的目的通过本次课程设计,使自己了解计算机图形学的有关原理、算法及系统,掌握基本图形显示程序设计方法,及二维和三维图形基本几何变换程序设计方法,为进一步学习计算机辅助设计方面的技术知识打下基础。

1.掌握图形学直线扫描算法:DDA,中点扫描线算法,Bresenham扫描线算法2.掌握图形学画圆扫描算法:中点画圆算法和Bresenham扫描算法3.掌握简单的几何图形的填充算法:种子填充和扫描线填充算法4.掌握简单图形的基本几何变换:平移,旋转和伸缩5.掌握Bezier曲线的生成算法6.熟悉并掌握vc6.0中的MFC使用方法7.掌握C/C++语言编程方法8.在学习基础上设计一个基于MFC的画图软件1.2项目内容在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的画图设计工具也越来越多,类似CAD和CDM及Photoshop的画图软件和图片处理软件的发展也日新月异,因此产生了制作一个类似的画图软件;而且通过制作该程序还能更好的学习图形学编程知识。

计算机图形学课程设计

计算机图形学课程设计

皮球运动动画一、设计方案圆皮球从某竖直高度以横向速度抛出,落地,弹起,最终静止。

设弹起后所能上升的高度为上一次最大高度的4/5,实现运动轨迹动画。

整个设计包括两个方面,一是掌握动画的基本原理,二是圆的绘制。

动画是将静止的画面变为动态的艺术。

实现由静止到动态,主要是靠人眼的视觉残留效应。

利用人的这种视觉生理特性可制作出具有高度想象力和表现力的动画影片。

动画中的皮球要用到中点画圆算法画圆,void MidCircle(int x0, int y0, int r)定义圆心的坐标和圆半径,用mLight.Ir, mLight.Ig, mLight.Ib来定义圆的颜色,glClearColor定义显示框的背景颜色,int cx=100,cy=300,cr=20定义圆开始运动时的水平位置,垂直高度和体积大小,glClearColor定义显示框的背景颜色,int windowswidth = 1000,windowshight = 500定义显示框的宽度和高度。

void Init()用来初始化,void myDisplay()用来显示,glLoadIdentity()为加载身份,void RenderScene(void)为渲染现场,void TimerFunction(int value)为计时器功能。

二、程序流程图floatmo;VectorN;theta<0alpha=H.fx*N.fx+H.fy*N.fy+H.fx*N.fz;alpha<0intx,y,deltax,deltay,d;x<yglEnd();d<0glVertex2i(x+x0,y+y0);NOd+=deltax; intx,y,deltax,deltay,d; i=-xi<=xi++i=-yi<=yi++mColor=Phong(x0,y0,r,i+x0,y +y0); WHILEmColor=Phong(x0,y0,r,i+x0,x +y0);glClear(GL_COLOR_BUFFE R_BIT);glViewport(0,0,(GLsizei)w,(G Lsizei)h);glClear(GL_COLOR_BUFFE R_BIT); floatt=0,vv,s,hv;h>1cy-cr>0&&cx+cr<windowswi flag==1Multit=sqrt(2*h/g);YESflag=1;glutInit(&argc,argv); return0;三、程序清单#include <GL/glut.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#define NO_LIGHT 1#define LIGHT 2bool bLight = false;struct Vector{float fx, fy, fz;};struct Color{float Ir, Ig, Ib;/*定义皮球的颜色*/};float KaIa;float Kd, n;Vector H,light;Color mLight, mColor;int cx=100,cy=300,cr=20;/*定义皮球开始运动时的水平位置,下落高度和体积大小*/int windowswidth = 1000,windowshight = 500;/*定义显示框的宽度和高度*/int xstep=0,ystep=0,flag=10,up=0;float vh =4,g=9.8,h=cy;void Init(){float mo;Vector eye;mLight.Ir = 200;mLight.Ig =20;mLight.Ib =200;/*定义皮球的颜色*/KaIa=100;Kd = 0.7;n = 20;light.fx=0.10;light.fy=0.50;light.fz = sqrt(1-(light.fx*light.fx)-(light.fy*light.fy));eye.fx=1;eye.fy=0;eye.fz=1;H.fx=light.fx+eye.fx;H.fy=light.fy+eye.fy;H.fz=light.fz+eye.fz;mo=sqrt(H.fx*H.fx+H.fy*H.fy+H.fz*H.fz);H.fx=(H.fx/mo);H.fy=(H.fy/mo);H.fz=(H.fz/mo);H.fx=(H.fx/mo);H.fy=(H.fy/mo);H.fz=(H.fz/mo);glClearColor(1.0, 1.0, 1.0, 0.0);glShadeModel(GL_SMOOTH);}Color Phong(int x0, int y0, int r, int x, int y){Vector N;float z,alpha,theta,Ks;Ks=1.0-Kd;z=sqrt((float)(r*r-(x-x0)*(x-x0)-(y-y0)*(y-y0)));N.fx=(x-x0)*1.0/r;N.fy=(y-y0)*1.0/r;N.fz = z*1.0/r;theta = N.fx * light.fx + N.fy * light.fy + N.fz * light.fz;if(theta<0)theta=0;alpha=H.fx*N.fx+H.fy*N.fy+H.fx*N.fz;if(alpha<0)alpha=0;mColor.Ir=KaIa+mLight.Ir*Kd*theta+mLight.Ir*Ks*pow(alpha,n);mColor.Ig=KaIa+mLight.Ig*Kd*theta+mLight.Ig*Ks*pow(alpha,n);mColor.Ib=KaIa+mLight.Ib*Kd*theta+mLight.Ib*Ks*pow(alpha,n);return mColor;}void MidCircle(int x0, int y0, int r) /*中点画圆算法定义圆的圆心坐标和半径*/ {int x,y,deltax,deltay,d;x = 0;y = r;deltax = 5;deltay = 5-r-r;d = 1-r;glColor3f (1.0f, 1.0f, 1.0f); glBegin(GL_POINTS); glVertex2i (x+x0,y+y0); glVertex2i (-x+x0,y+y0); glVertex2i (-x+x0,-y+y0); glVertex2i (x+x0,-y+y0); glVertex2i (y+y0, x+x0); glVertex2i (y+y0, -x+x0); glVertex2i (-y+y0, -x+x0); glVertex2i (-y+y0, x+x0);while(x<y){if(d<0){d += deltax;deltax += 2;deltay += 2;x++;}else{d += deltay;deltax += 2;deltay += 4;x++;y--;}glVertex2i (x+x0,y+y0);glVertex2i (-x+x0,y+y0);glVertex2i (-x+x0,-y+y0);glVertex2i (x+x0,-y+y0);glVertex2i (y+y0, x+x0);glVertex2i (y+y0, -x+x0);glVertex2i (-y+y0, -x+x0);glVertex2i (-y+y0, x+x0);}glEnd();}void MidCircleLight(int x0, int y0, int r) {int x,y,deltax,deltay,d;x = 0;y = r;deltax = 3;deltay = 5-r-r;d = 1-r;int i=0;glBegin(GL_POINTS);{for( i=-x;i<=x;i++){mColor=Phong(x0,y0,r,i+x0,y+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,y+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,-y+y0);}for(i=-y;i<=y;i++){mColor=Phong(x0,y0,r,i+x0,x+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,x+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,-x+y0);}while(x<y){if(d<0){d += deltax;deltax += 2;deltay += 2;x++;}else{d += deltay;deltax += 2;deltay += 4;x++;y--;}for(i=-x;i<=x;i++){mColor=Phong(x0,y0,r,i+x0,y+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,y+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,-y+y0);}for(i=-y;i<=y;i++){mColor=Phong(x0,y0,r,i+x0,x+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,x+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,-x+y0);}}}glEnd();}void myDisplay() /*用此函数来显示*/{glClear(GL_COLOR_BUFFER_BIT);glColor3f (0.0f, 0.0f, 1.0f);MidCircleLight(cx, cy, cr);glFlush();}void Reshape(int w, int h) /*加载身份*/{glViewport(0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);}void RenderScene(void) /*渲染现场*/{glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f, 0.0f, 0.0f);/*清空命令缓冲区并交换帧缓存*/glutSwapBuffers();}void TimerFunction(int value) /*定义计时器功能*/ {/*处理到达窗口边界的球形,使之反弹*/float t=0,vv,s,hv;if (h>1){if(cy-cr>0 && cx+cr<windowswidth && up == 0) {t =sqrt(2*h/g);vv = g*t/5;/*hv = 0.5*g*g*t;s= vh*t;*/cx += vh;cy -= vv;}else if(cy-cr<=0){flag = 1;up =1 ;}if(flag == 1){h=4.0/5.0*h;flag = 0 ;}printf("%d,%d,%d,%d\n",up,flag,h,cy-cr);if(cy-cr<=h && up == 1){t = sqrt(2*h/g);vv = sqrt(2*g*h)/8;/*hv= vv*t - 0.5*g*t*t;s = vh *t;*/cy +=vv;cx +=vh;}else if(cy-cr>=h){up = 0 ;}/*用新坐标重新绘图*/glutPostRedisplay();glutDisplayFunc(myDisplay);glutTimerFunc(33,TimerFunction, 1);}}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(windowswidth,windowshight );glutCreateWindow("Ball bouncing");Init();glutDisplayFunc(RenderScene);glutTimerFunc(33, TimerFunction, 1);glutReshapeFunc(Reshape);glutMainLoop();return 0;}四、程序运行结果及分析效果图1效果图2效果图3效果图4皮球从某一高度处水平抛出,落地后立即弹起,弹起的最大高度为上一次高度的4/5。

计算机图形学课程设计报告

计算机图形学课程设计报告

课程设计报告书设计名称:计算机图形学课程设计题目:画图程序的实现学生姓名:专业:计算机科学与技术(网络技术)班别:学号:指导老师:绘图小工具此绘图工具可以画直线、椭圆、矩形、曲线,可动态改变画笔的大小,画笔风格有连笔、单笔、填充颜色、实线、虚线1、虚线2,可根据需要选择其中一种,另外,还以根据需要调出颜色板定义颜色。

为了方便选择颜色进行绘图,特意在绘图区增加了颜料盒,操作将更加方便快捷。

1.总体界面如下:1.1“绘图”菜单界面1.2“画笔大小”菜单1.3“风格”菜单1.4“调色板”菜单及颜料盒2.各功能的实现及代码2.1首先在StdAfx.h头文件中定义全局变量extern int num; //记住“绘图”菜单选择extern int num2; //颜色填充选择extern int width; //记住“画笔大小”选择extern int fengge; //“风格”选择(连笔/单笔)extern int col,penstyle; //记住“颜料盒”与“调色板”的选择及画笔风格extern COLORREF c;//各种颜色的选择再在在StdAfx.cpp中初始化以上定义的各变量int num,num2=1,width,col=0,fengge=10,penstyle=0;COLORREF c;2.2.在Draw1View.h中定义CDDraw1View类私有变量POINT points[20];int m_Num;POINT m_pPrev; //画图的前一个终点POINT m_pOrigin; //画图起点POINT m_pPrev2;POINT m_pOrigin2; //记录获取颜料盒颜色时鼠标所在坐标int m_Drag; //鼠标状态HCURSOR m_HCursor;2.3.画图时以按下鼠标左键记住作图起点,为鼠标左键添加消息映射,函数如下:void CDraw1View::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);OnPrepareDC(&dc);dc.DPtoLP(&point);m_pPrev=point; //画图的前一个终点m_pOrigin=point; //点击鼠标左键作为拖动绘图的第一点m_Drag=1; //设置鼠标为拖动状态CView::OnLButtonDown(nFlags, point);}2.4.鼠标左键按下时已将其状态设为拖动状态,当鼠标移动时可以作画,为鼠标移动添加消息映射,函数如下:void CDraw1View::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);OnPrepareDC(&dc);dc.DPtoLP(&point);CBrush MyBrush,*OldBrush;if(m_Drag)//鼠标左键按下时已经将状态设为真{CPen NewPen,*pOldPen;if(col= =0) //选择颜料盒颜色c=dc.GetPixel(m_pOrigin2.x,m_pOrigin2.y);NewPen.CreatePen(penstyle,width,c);pOldPen=dc.SelectObject(&NewPen);if(num2= =0) //选择为图像填充颜色时,num2=0.{MyBrush.CreateSolidBrush(c);OldBrush=dc.SelectObject(&MyBrush);}dc.SetROP2(fengge);//风格(单笔:fengge=10/连笔:fengge=9) switch(num) //选择画直线(num=0)、椭圆(num=1)、矩形(num=2)、曲线(num=3) { case 0: dc.MoveTo(m_pOrigin); dc.LineTo(m_pPrev);dc.MoveTo(m_pOrigin); dc.LineTo(point);break;case 1: dc.Ellipse(m_pOrigin.x,m_pOrigin.y,m_pPrev.x,m_pPrev.y);dc.Ellipse(m_pOrigin.x,m_pOrigin.y,point.x,point.y);break;case 2: dc.Rectangle(m_pOrigin.x,m_pOrigin.y,m_pPrev.x,m_pPrev.y);dc.Rectangle(m_pOrigin.x,m_pOrigin.y,point.x,point.y);break;case 3: if(penstyle= =0) //选择画实曲线时(penstyle=0){dc.MoveTo(m_pOrigin);dc.LineTo(point);m_pOrigin=point;}else dc.SetPixel(point.x,point.y,c); //选择画虚曲线}m_pPrev=point; //把新的点设为所作图形的前一个终点dc.SelectObject(pOldPen);}CView::OnMouseMove(nFlags, point);}2.5.当作完画松开鼠标左键时要将鼠标状态设置为非拖动状态以停止作画,为鼠标左键松开添加消息映射,函数如下:void CDraw1View::OnLButtonUp(UINT nFlags, CPoint point){m_Drag=0;//设置为非拖动状态CView::OnLButtonUp(nFlags, point);2.6.当按下鼠标右键时记录此时鼠标的坐标以获取该像素点的颜色,为鼠标右键按下添加消息映射,函数如下:void CDraw1View::OnRButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);dc.DPtoLP(&point);m_pOrigin2=point;//点击鼠标右键获取此时鼠标所在位置的颜色col=0; //col=0时,所选颜色为颜料盒颜色,col=1时为调色板颜色CView::OnRButtonDown(nFlags, point);}2.7.当需要清除所画图形时,双击鼠标右键,为双击鼠标右键添加消息映射,函数如下:void CDraw1View::OnRButtonDblClk(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCDraw1Doc *pDoc=GetDocument();pDoc->UpdateAllViews(NULL);CView::OnRButtonDblClk(nFlags, point);}2.8.颜料盒代码,先画矩形后填充各种不同的颜色,函数如下:void CDraw1View::OnDraw(CDC* pDC){CDraw1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);int j=0;CBrush MyBrush,*OldBrush;MyBrush.CreateSolidBrush(RGB(205,203,203));OldBrush=pDC->SelectObject(&MyBrush);pDC->Rectangle(0,0,200,40);MyBrush.DeleteObject();for(int i=0;i<=160;){ if(j==0){ MyBrush.CreateSolidBrush(RGB(255,0,0));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==10){ MyBrush.CreateSolidBrush(RGB(0,255,0));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==20){ MyBrush.CreateSolidBrush(RGB(53,121,248));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==30){ MyBrush.CreateSolidBrush(RGB(250,0,250));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==40){ MyBrush.CreateSolidBrush(RGB(151,53,227));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==50){ MyBrush.CreateSolidBrush(RGB(223,225,14));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==60){ MyBrush.CreateSolidBrush(RGB(251,242,4));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==70){ MyBrush.CreateSolidBrush(RGB(3,3,3));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==80){ MyBrush.CreateSolidBrush(RGB(250,250,250));OldBrush=pDC->SelectObject(&MyBrush);}pDC->Rectangle(10+i,10,30+i,30);i+=20;j+=10;MyBrush.DeleteObject();}}2.9.修改画笔大小时,函数如下:void CPenWidth::OnOK(){UpdateData();CPenWidth penwidth; // CPenWidth为对话框类width=m_penwidth;CDialog::OnOK();}3.效果展示:。

计算机图形学课程设计安排

计算机图形学课程设计安排

《计算机图形学》课程设计要求及安排一.实习目的《计算机图形学实习》是实践性教学环节之一,是《计算机图形学》课程的辅助教学课程。

通过实习,达到如下目的:(1)巩固和综合应用所学的计算机图形学理论知识,培养学生理论联系实际和独立思考问题的能力;(2)培养学生实际运用《计算机图形学》的知识设计计算机课题的思想和方法;(3)培养学生分析、设计和解决实际问题的能力,加强创新素质教育,激发学生的实际开发创造意识和能力;(4)培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力;(5)培养学生团结协作,共同完成相关课题的能力。

二.实习内容及要求要求学生在理解直线、圆、区域填充、图形裁剪等理论知识的基础上,借助于程序设计语言(如VC++、VB等)进行小型图形应用软件的开发,要求界面美观(包括菜单栏、工具栏)、功能相对完整、衔接自然、注重交互性。

主要知识点包括:(1)点、线、圆、多边形等计算机基本图元的的绘制(必做)(2)点、线、圆、多边形等计算机基本图元属性的设置(3)平移、缩放、旋转等计算机图形的几何变换(必做)(4)图形的裁剪(5)平面投影和透视投影(6)样条曲线、曲面的绘制(7)三维图形的真实感实现学生可以在实习老师的指导下,按3-5人为一小组完成一个简易图形系统的设计与开发,系统实现内容要求包括以上至少4个知识点(包括必做知识点,其它任选或自己设计),并完成实习文档;或者独立一人完成一项创新性,综合性较强的设计开发项目,并完成实习文档。

实习文档与结果要求标准化,即按规定的格式书写并提交。

三.考核方式及办法根据学生任务完成的情况、设计报告的质量及平时的学习态度等全面评定成绩。

学期成绩考核为五级记分制。

百分制与五级记分制的换算关系为:优秀(90—100分)、良好(80—89分)、中等(70—79分)、及格(60—69分)、不及格(60分以下)。

考核参考标准:以实际操作技能和分析解决问题的能力为主,实习考核内容各单项所占分数比例为:操作技能占60%,实习报告(作业或作品)占40%。

计算机图形学课设报告

计算机图形学课设报告

计算机图形学课程设计报告专业:班级:学号:姓名:指导教师:[设计题目] :计算机图形学设计与实现[设计地点]: 10教4楼[设计人员]:[设计任务] :1:生成直线的DDA算法2:生成直线的中点算法3:生成圆的中点算法4:生成圆的正负法算法5:生成椭圆的中点算法6:扫描转化为矩形7:种子填充算法8:平移变换9:放缩变换10:直线段裁剪二维线画图元的生成1.1. 生成直线段的DDA 算法 基本原理 扫描转换直线段所谓扫描转换直线段就是计算出落在直线段上或充分靠近它的一串像素,并以此像素集近似替代原连续直线段在屏幕上显示的过程。

生成直线段的DDA 算法求表示直线段的像素集的最简单方法是利用直线方程直接计算。

设直线方程为y=m ·x+B DDA 算法描述:(1) 对给定端点的直线段以一个单位像素为分割区间(2) 根据直线方程得到直线段上对应于横坐标的点的纵坐标,于是得到一系列点列(3) 计算出的纵坐标可能是浮点数,并其四舍五入取整 (4) 描点画图 其中,用公式11(1)i i i i i y mx B m x B mx B m y m ++=+=++=++=+我们就从i y 直接得到1i y +,而不是由1i x +通过直线方程来计算1i y +,由此便消除了算法中的乘法。

递推公式的初值为:00(,)(0,0)x y x y =主要程序代码:void dda_line(int x1,int y1,int x2,int y2,int color) /*画直线*//DDA 算法 {int x;float dx,dy,y,m; if(x1==x2) {for(y=y1;y<=y2;y++) putpixel(x1,y,color); }dx=x2-x1; dy=y2-y1; m=dy/dx;y=y1;for(x=x1;x<=x2;x++) {putpixel(x,(int)(y+0.5),color); y+=m; } }运行效果:1. 2. 生成直线段的中点算法 基本原理假定直线段的斜率m ∈[0,1],并且左下方的端点为,0(0,0)P x y ,右上方的端点为1(1,1)P x y 。

计算机图形学课程设计报告1

计算机图形学课程设计报告1

目录1、课程设计目的 (1)2、系统功能介绍 (1)3、程序代码和分析 (2)4、总结 (4)5、参考文献 (4)6.源程序 (4)计算机图形学课程设计报告1.课程设计目的本课程主要内容包括计算机图形学的研究内容、发展与应用,图形输入输出设备,图形显示原理,图形软件标准,基本图形生成算法,图形几何变换与裁剪,自由曲线和曲面,三维实体造型,分形几何造型,分形艺术,隐藏面消除,光照模型,颜色模型,光线跟踪,纹理细节模拟,常用的计算机动画技术和软件等。

在学期期末时按课程要求进行运动,提高学生对计算机图形学知识的了解与运用技巧同时通过此次课程设计提高动手实践能力与学习分析能力这就是本次的课程设计的目的。

2.课程设计描述及要求此次课程设计的课题为利用VC++6.0和插件OPENGL制作三维模型。

本设计主要通过建立MFC工程,在工程里建立一个三维模型然后再进行旋转,飞行等运动,来建立一个动态的三维模型。

主要步骤如下:1:工程的建立2:三维模型的建立和映射3:三维模型的运动一:工程的建立1:系统配置。

先对机子安装VC++6.0.在建立工程前,本实验需要添加OPENGL 插件,故需要在Windows环境下安装GLUT步骤如下:1、将下载的压缩包解开,将得到5个文件2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。

把解压得到的glut.h放到这个文件夹。

3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。

4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。

(典型的位置为:C:\Windows\System32)然后建立一个OpenGL工程测试这里以VisualStudio2005为例。

计算机图形学课程设计

计算机图形学课程设计

目录一、课程设计任务及要求 (1)二、需求分析 (1)2.1 设计目标 (1)2.2 设计环境 (2)2.2.1 VC++6.0 (2)2.2.2 MFC (2)2.3 设计题目及要求 (2)三、总体设计 (3)3.1 绘图 (3)3.1.1 直线 (3)3.1.2 正三角形 (4)3.1.3 矩形 (4)3.2 变换类型 (5)3.2.1 平移变换 (5)3.2.2 比例变换 (6)3.2.3 旋转变换 (6)3.2.4 反射变换 (6)3.2.5 错切变换 (7)3.3 复位 (7)四、详细设计 (8)4.1 平移变换 (8)4.1.1 向左 (8)4.1.2 向右 (8)4.1.3 向上 (9)4.1.4 向下 (10)4.2 比例变换 (11)4.2.1 放大 (11)4.2.2 缩小 (12)4.3 旋转变换 (12)4.3.1 逆时针 (12)4.3.2 顺时针 (13)4.4 反射控制 (14)4.4.1 X轴 (14)4.4.2 Y轴 (15)4.4.3 原点 (15)4.5 错切变换 (16)4.5.1 X正方向 (16)4.5.2 X负方向 (17)4.5.3 Y正方向 (17)4.5.4 Y负方向 (18)五、运行调试与分析讨论 (20)六、设计体会与小结 (20)七、参考文献 (21)计算机图形学课程设计一、课程设计任务及要求利用VC++设计实现二维图形变换:1、学会使用VC++和MFC编写实现图形的绘制变换,需包括直线、正三角形、矩形的绘制和变换2、建立图形信息输入窗口,来输入图形的几何信息、拓扑信息和属性信息等3、建立图形变换参数输入窗口,来输入图形的基本几何变换参数4、熟练掌握平移变化、比例变换、、旋转变化、反射变换和错切变换。

5、其他功能:如复位、退出功能。

二、需求分析计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。

计算机图形学课程设计----课程设计

计算机图形学课程设计----课程设计

计算机图形学课程设计学 院:计算机科学学院 班 级:学 号:学生姓名:指导教师:2008年1月设计一一、课题说明用所学算法编写实现图形比例,移动,旋转变换的程序二、概要设计比例变换矩阵:移动变换矩阵:旋转变换矩阵:由于在640*480默认的显示模式下,原点(0,0)坐标在屏幕的左上角,左上角向右下角走,x 值增大,左上角向右上角走,y 值增大。

为了便于显示与理解,把原点定在(320,240)点。

则移动变换与旋转变换的矩阵就会改变。

移动变换矩阵:旋转变换后,x 坐标变为:320+(x-320)*cos(a)-(240-y)*sin(a);y 坐标变为:240-(x-320)*sin(a)-(240-y)*cos(a)本程序通过一个三角形比例,移动,旋转变换演示比例,移动,旋转后的结果。

首先画出需要变换的三角形(通过给出三角形的三个顶点画出三角形),对三个三角形的顶点变换实现比例,移动,旋转变换操作。

三、源程序及注释#include <stdio.h> #include <graphics.h>/*加入c 图形库*/ #include <math.h>yidong(int dx,int dy)/*实现移动函数*/S x 0 0 0 S y 0 0 0 1 1 0 0 0 1 0 T x T y 1cos (a) sin (a) 0 -sin (a) cos (a) 0 0 0 11 0 00 1 0 T x -- T y 1{moveto(320+dx,240-dy);lineto(420+dx,120-dy);lineto(450+dx,140-dy);变换三角形三个点的坐标实现移动变换*/lineto(320+dx,240-dy);/*}实现比例函数*/bilie(float Sx,float Sy) /*{moveto(320*Sx,240*Sy);lineto(420*Sx,120*Sy);lineto(450*Sx,140*Sy);变换三角形三个点的坐标实现比列变换*/lineto(320*Sx,240*Sy); /*}实现旋转函数*/xuanzhuan(float a) /*{float p;moveto(320,240);lineto(320+(420-320)*cos(a)-(240-120)*sin(a),240-(420-320)*sin(a)-(240-120)*cos(a));lineto(320+(450-320)*cos(a)-(240-140)*sin(a),240-(450-320)*sin(a)-(240-140)*cos(a));变换三角形三个点的坐标实现旋转变换*/lineto(320,240); /*}main(){int i,j;float X,Y,bx,by,a;int gdriver=DETECT,gmode; /*初始化显示模式参数*/初始化显示为默认的640*480、16色模式 */ initgraph(&gdriver,&gmode,""); /*i=20;j=240;moveto(i,j);/*使用双循环画点函数画出表格中的纵坐标*/for(i=20;i<=620;i+=20)lineto(i,240);i=320;j=20;moveto(i,j);/*使用双循环画点函数画出表格中的横坐标*/for(j=20;j<=460;j+=20)lineto(320,j);moveto(320,240);lineto(420,120);lineto(450,140);lineto(320,240);/*画出需变换的三角形,其三个顶点分别为(320,240);(420,120) ;(450,140)*/printf("please input X,Y to move:"); scanf("%f%f",&X,&Y); /*输入移动量 */ yidong(X,Y);printf("please input bx,by to scale:"); scanf("%f%f",&bx,&by); /*输入x 方向,y 方向缩放大小 */ bilie(bx,by);printf("please input a to circumgyrate:"); scanf("%f",&a); /*输入旋转角度,a 为正,则逆时针旋转*/ xuanzhuan(a); }四、运行结果原始三角形移动(40,40)后的三角形旋转45o 后的三角x 轴方向上缩小0.5倍后的三角形设计二一、课题说明编写一个AutoLISP程序,其功能是:画一个轴衬的两个视图,如图4所示。

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

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

计算机图形学(C语言)教案第一章:计算机图形学概述1.1 课程介绍计算机图形学的定义和发展历程C语言在计算机图形学中的应用1.2 图形系统的基本概念图形系统的硬件和软件组成坐标系统和图形坐标变换1.3 图形处理基本算法图形算法的分类常见图形算法介绍第二章:C语言图形库简介2.1 OpenGL库介绍OpenGL的概念和发展历程OpenGL的基本组成和功能2.2 GLUT库介绍GLUT的概念和功能GLUT的基本API和使用方法2.3 C语言图形库的选择和配置选择适合的图形库图形库的配置和集成第三章:图形绘制基础3.1 图形绘制基本概念图形绘制原理图形绘制流程3.2 基本图形的绘制点、线、圆的绘制方法字符和图像的显示3.3 颜色和光照处理颜色模型和颜色转换光照模型和光照计算第四章:图形变换和模型视图4.1 图形变换坐标变换和矩阵运算几何变换和图像变换4.2 模型视图视图变换和投影相机控制和视角设置4.3 三维图形绘制三维图形的建模和绘制方法曲面和体的绘制技巧第五章:动画和交互技术5.1 动画基础动画的概念和分类动画的实现方法和算法5.2 关键帧动画关键帧动画的原理和实现动画插值和优化技术5.3 交互技术用户输入和事件处理鼠标和键盘交互设计第六章:图形算法6.1 填充算法扫描线填充算法原理种子填充算法原理6.2 裁剪算法裁剪的概念和分类凸多边形裁剪算法6.3 图像分割算法图像分割的概念和应用阈值分割算法和区域生长算法第七章:图像处理基础7.1 图像处理基本概念数字图像的表示和存储图像处理的基本操作7.2 图像增强图像增强的目的和方法直方图均衡化和对比度增强7.3 图像滤波滤波器的设计和分类线性滤波和非线性滤波第八章:OpenGL高级功能8.1 纹理映射纹理映射的概念和原理纹理坐标和纹理映射过程8.2 光照模型光照模型的概念和分类Phong光照模型和Blinn-Phong光照模型8.3 阴影技术阴影的类型和方法软阴影和硬阴影的实现第九章:图形编程实践9.1 绘制一个简单的三角形设置窗口和初始化OpenGL绘制一个三角形的基本步骤9.2 实现一个简单的动画动画的原理和实现方法绘制一个旋转的立方体动画9.3 开发一个简单的图形应用程序图形应用程序的开发流程设计一个简单的3D场景第十章:项目实践10.1 项目选择和规划选择适合的项目主题制定项目开发计划10.2 项目开发和实现按计划进行项目开发解决项目开发过程中遇到的问题10.3 项目测试和优化测试项目的功能和性能对项目进行优化和改进第十一章:图形硬件和性能优化11.1 图形处理器(GPU)GPU的工作原理和架构GPU编程模型和API11.2 图形性能优化渲染管线和性能瓶颈优化技巧和策略11.3 实时图形渲染实时图形渲染的挑战实时渲染技术和算法第十二章:计算机动画12.1 动画原理和技术关键帧动画和补间动画骨骼动画和蒙皮动画12.2 动画编辑和播放动画编辑器的实现动画播放器和交互控制12.3 物理动画和效果粒子系统和不规则动画流体动力学和模拟动画第十三章:虚拟现实和增强现实13.1 虚拟现实技术VR系统的原理和设备VR应用程序开发和实践13.2 增强现实技术AR系统的原理和设备AR应用程序开发和实践13.3 混合现实和交互混合现实的概念和应用虚拟物体与现实世界的交互第十四章:图形学综合案例分析14.1 图形学应用案例游戏开发和图形学的关系图形学在其他领域的应用案例14.2 图形学项目的挑战和解决方案项目开发过程中的常见问题解决方案和最佳实践14.3 图形学未来趋势和展望图形学的发展方向图形学在未来的应用前景第十五章:课程总结和考试15.1 课程回顾本门课程的主要内容和知识点学生的学习成果和收获15.2 考试内容和策略考试的形式和要求考试的准备和复习策略15.3 课程反馈和改进学生对课程的评价和建议课程的改进方向和计划重点和难点解析第一章:重点:计算机图形学的定义和发展历程,C语言在计算机图形学中的应用。

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

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

计算机图形学(C语言)教案一、教案概述1. 目标:通过本章学习,使学生掌握C语言在计算机图形学中的应用,了解图形学基本概念,能够使用C语言进行简单的图形绘制和处理。

2. 课时:2课时3. 教学方法:讲授、实践相结合4. 教学工具:多媒体教学、编程环境二、教学内容1. 计算机图形学基本概念图形与图像的定义图形系统的组成图形表示方法2. C语言图形库介绍SDL库简介OpenGL简介Win32图形编程简介3. 图形绘制基本方法像素操作直线绘制圆绘制图形变换三、教学过程1. 引入计算机图形学的基本概念,让学生了解图形学在计算机领域的重要性和应用范围。

2. 介绍C语言图形库,对比不同图形库的特点和适用场景,引导学生选择合适的图形库进行学习。

3. 通过实例讲解图形绘制的基本方法,让学生掌握像素操作、直线绘制、圆绘制和图形变换等技巧。

四、课堂练习1. 编写一个简单的C程序,使用像素操作绘制一个红色矩形。

2. 编写一个C程序,使用SDL库绘制一条直线。

3. 编写一个C程序,使用OpenGL绘制一个圆形。

五、课后作业1. 学习Win32图形编程,了解其与SDL、OpenGL的异同。

2. 思考如何将图形学应用于实际项目中,例如游戏开发、图像处理等。

3. 探索其他图形库,如SFML、Allegro等,了解其特点和适用场景。

六、图形坐标系统与变换1. 教学目标:理解图形坐标系统的概念。

掌握坐标变换的原理和应用。

能够运用坐标变换对图形进行变换。

2. 教学内容:坐标系统的分类(笛卡尔坐标系、直角坐标系、极坐标系等)。

坐标变换的类型(平移、旋转、缩放、反射等)。

矩阵与坐标变换的关系。

变换在计算机图形学中的应用。

3. 教学过程:通过图形实例讲解不同坐标系统的特点。

讲解坐标变换的数学原理,并通过动画演示变换过程。

引导学生通过编程实践应用坐标变换。

七、图形界面设计1. 教学目标:学习图形界面设计的基本原则。

掌握常用的图形界面元素和布局方法。

计算机图形学课程设计

计算机图形学课程设计

计算机图形学课程设计报告班级:学号:姓名:成绩:电子与信息工程学院计算机系一.目的与要求计算机图形学课程设计是计算机科学与技术(计算机软件)专业学生修完《计算机图形学》课程后实践教学中重要的一环,其目的是巩固所学的计算机图形学知识,进一步熟悉图形生成算法,掌握真实感图形学技术的基本方法和技能。

并能熟练运用VC++语言(或C语言或JA V A语言)计算机图形学知识实现设计内容。

基本要求:●按照课程设计要求提交计算机图形学课程设计报告;●完成系统的设计与开发;●设计必须根据进度计划按期完成。

二.设计内容及安排1.课程设计报告的基本内容(1)设计目的与要求(2)软件功能模块图(3)软件各模块功能介绍(4)程序代码清单(部分)(5)程序生成界面图形(部分)(6)参考文献2.课程设计程序将完成的基本功能题目一:人机交互式图形系统(1)用VC++语言(或C语言或JA V A语言)设计出人机交互式图形系统。

(2)在所设计的交互式图形系统上实现画直线功能和各种二次曲线生成功能。

(3)实现各种自由曲线(抛物线,Hermit 曲线,二、三次Bezier曲线,二、三次B样条曲线)的绘制功能。

(4)填充功能(矩形和圆的填充)。

(5)图形的各种二维几何变换。

(6)具有线段、多边形的裁剪功能。

(7)初步实现真实感图形的显示(8)以上严格按照交互技术及用户接口设计要求实现。

题目二:纹理映射及光照处理(1)对一个简单几何模型建模(2)将图片的纹理贴附到物体表面(3)对设计出的图像进行明暗(光照)、阴影等处理(4)给出至少2个视角的图像题目三:场景设计(1)采用真实感图形学技术设计一个自然场景(2)模拟出水、云、山体、光线至少三种景物(3)实现场景的漫游以上三道题目任选其中一种。

3.课程设计安排计算机图形学课程设计共计1周内完成。

第l~2天进行软件功能及功能模块的详细设计,第3~6天完成图形系统的程序设计,第7天上交课程设计报告。

计算机图形学课程设计

计算机图形学课程设计

计算机图形学课程设计计算机图形学是计算机科学领域的一个重要分支,主要研究如何利用计算机生成、显示和操作图形图像的方法和技术。

在现代社会中,计算机图形学的应用已经相当广泛,包括动画制作、游戏开发、虚拟现实等领域。

因此,学习计算机图形学课程对于计算机相关专业的学生来说至关重要。

一、课程介绍计算机图形学课程主要包括基本概念、算法原理、图形学编程等内容。

学生将学习到图形学基础知识,掌握计算机图形学的基本原理和算法,培养图形图像处理的能力。

通过实际的编程项目,学生将能够将所学知识应用到实际项目中,提高自己的编程能力和创造力。

二、课程内容1. 图形学基础知识:包括图形学的定义、发展历史、基本概念和术语等;2. 图形学算法原理:学习常见的图形学算法,如光栅化、三维变换、光照模型等;3. 图形学编程实践:通过编程实践项目,实现简单的图形图像处理功能,加深对图形学原理的理解;4. 课程设计项目:进行一个综合性的课程设计项目,结合所学知识完成一个小型的图形学应用程序。

三、课程设计要求1. 熟悉图形学的基本知识和算法原理;2. 掌握图形学编程的基本技能,能够独立完成简单的图形学编程任务;3. 完成课程设计项目,提出合理的设计方案,实现自己的想法,并能够进行有效的展示和演示。

四、课程评估方式1. 平时成绩:包括上课表现、作业完成情况、参与讨论等;2. 期中考试:考察学生对于基本概念和算法原理的理解;3. 课程设计项目成绩:综合考察学生的综合能力和创造力;4. 期末综合考试:考察学生对于整个课程知识体系的掌握程度。

五、课程设计的意义和价值计算机图形学课程设计是对所学知识的一个综合应用和实践,通过设计和实现一个完整的图形学应用程序,学生将会提高自己的创造力和动手能力,培养解决实际问题的能力。

同时,课程设计项目也是对学生综合能力的一个考察和锻炼,能够提高学生的编程技能和团队协作能力,为将来从事相关行业打下坚实的基础。

综上所述,计算机图形学课程设计是一门非常重要的课程,通过学习这门课程,学生将能够掌握计算机图形学的基本原理和算法,提高自己的编程能力和创造力,为将来的职业发展奠定良好的基础。

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

《计算机图形学》实验报告题目: 3D真实感场景绘制姓名: 郭继杰学号: 2014214168班级: 地信141学院: 理学院指导老师: 解山娟日期: 2017年1月1日一、实验目的结合一学期所学计算机图形学知识,基于专业背景,使用OpenGL绘制简单的3D真实感图形场景。

二、实验要求应用光栅化算法、多边形裁剪计算以及消隐算法在场景绘制中,其中真实感场景绘制包括颜色模型、纹理模型、雾化模型、运动模型以及环境光、漫反射、镜面反射等光照模型设置。

三、实验小组及任务分工小组成员任务分工金城纹理贴图,颜色模型,雾化模型郭继杰运动模型,光照模型沈黎达材料收集,代码整合四、实验内容1、实验前期工作前期工作经过小组成员充分讨论,资料收集,最终确定小组实验模板为以下两幅场景。

目标就是实现一艘简单3D帆船模型以及一辆3D小车模型2、程序编译环境:Visual Studio 20123、光照模型建立过程光照模型建立流程图:3、1设置光照模型相应指数3、2打开光源光照模型设计过程有两点注意的就是:1、glShadeModel函数用于控制opengl中绘制指定两点间其她点颜色的过渡模式,参数一般为GL_SMOOTH、GL_FLAT,如果两点的颜色相同,使用两个参数效果相同,如果两点颜色不同,GL_SMOOTH会出现过渡效果,GL_FLAT 则只就是以指定的某一点的单一色绘制其她所有点。

glShadeModel(GL_FLAT) 着色模式glShadeModel(GL_SMOOTH)着色模式(可以瞧出GL_SMOOTH模式下颜色更加光滑)2、需要使用光照模型时必须启用,glEnable(GL_LIGHTING)(启用灯源)、glEnable(GL_LIGHT0)(启用光源),否则所有灯光效果都会无效。

效果对比如下图所示。

(未启用灯光) (启用灯光)(未启用灯光) (启用灯光)4、颜色模型建立过程1、设定多边形图形:OpenGL利用glBegin()函数画图形样式,里面的参数表示图形样式,这里以glBegin(GL_QUADS)为例,GL_QUADS表示绘制由四个顶点组成的一组单独的四边形。

2、设定颜色:OpenGL利用glColor3f(a,b,c)函数设置图形颜色,里面的参数表示设定颜色的颜色。

3、坐标设定:OpenGL利用glVertex3f(a,b,c)函数设置图形坐标,里面的参数表示坐标的位置。

以跑道颜色模型为例:(未使用颜色模型)(使用颜色模型)5、雾化模型建立过程雾就是生活中比较常见的现象,有了雾化模型,场景会比较逼真。

1、建立过程及参数设定如下:2、其中,设置雾气起始位置与结束位置可以使雾气浓度随运动模型变化。

3、效果对比(未使用雾化) (使用雾化)4、实验存在不足之处,由于本实验的场景绘制不就是特别接近真实感,所以雾化模型的效果不就是很好。

6.运动模型建立过程1、本次实验的运动模型主要由键盘按键响应发生。

2、设定键盘按键响应函数void specialKeyBoard(int key,int x,int y)在主函数入口设定设置当前窗口的特定键的回调函数glutSpecialFunc(specialKeyBoard);glTranslatef(0,0,0、1+delta_v);//表示将当前图形向x轴平移0,向y轴平移0,向z轴平移0、1+delta ,表示物体在这个坐标的时候开始绘制。

glutPostRedisplay();在图像绘制的所有操作之后,要加入 glutPostRedisplay()函数来重绘图像。

实现物体的移动glRotatef(1,0,1,0); //,旋转角度函数,表示小车往(0,1,0)向量方向逆时针旋转1°以上都就是控制小车运动的函数,通过键盘响应来触发。

(向前运动) (旋转)7.纹理贴图过程①载入位图图像:AUX_RGBImageRec *LoadBMP(CHAR *) //载入位图图象{FILE *; //文件句柄if (!) //确保文件名已提供{return NULL; //如果没提供,返回 NULL }(,"r"); //尝试打开文件if (File) //判断文件就是否存在?{fclose(File); //关闭句柄return auxDIBImageLoadA(); //载入位图并返回指针}return NULL; //如果载入失败,返回 NULL}②位图转化成纹理:int LoadGLTextures() //载入位图(调用上面的代码)并转换成纹理{int Status= FALSE; //状态指示器AUX_RGBImageRec *TextureImage[2]; //创建纹理的存储空间memset(TextureImage,0,sizeof(void *)*1);//将指针设为 NULL//载入位图,检查有无错误,如果位图没找到则退出if ((TextureImage[0]=LoadBMP("Data/wenli、bmp"))&&(TextureImage[1]=LoadBMP("Data/wenli2、bmp"))){Status= TRUE; //将Status设为TRUEglGenTextures(2, &texture[0]); //创建纹理for(int loop=0;loop<2;loop++){glBindTexture(GL_TEXTURE_2D,texture[loop]);//绑定纹理glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置滤波glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX,TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);//生成纹理}}for (int loop=0; loop<2; loop++){if (TextureImage[loop]!=NULL) //判断纹理就是否存在{if (TextureImage[loop]->data!=NULL) //纹理图像就是否存在{free(TextureImage[loop]->data); //释放纹理图像占用内存}free(TextureImage[loop]); //释放图像结构}}return Status; //返回 Status}③调用纹理glBindTexture(GL_TEXTURE_2D, texture[0]); //选择纹理glBegin(GL_QUADS); //开始绘制四边形glTexCoord2f(1、0f, 0、0f); glVertex3f( 0、0f, 1、5f, 0、0f); // 纹理与四边形的右下glTexCoord2f(1、0f, 1、0f); glVertex3f( 0、0f, 2、5f, 0、0f); // 纹理与四边形的右上glTexCoord2f(0、0f, 1、0f); glVertex3f( 0、0f, 2、5f, 1、0f); // 纹理与四边形的左上glTexCoord2f(0、0f, 0、0f); glVertex3f( 0、0f, 1、5f, 1、0f); // 纹理与四边形的左下glEnd();模型解读(1)创建纹理图像:OpenGL要求纹理的高度与宽度都必须就是2的n次方大小,只有满足这个条件,这个纹理图片才就是有效的。

一旦获取了像素值,我们就可以将这些数据传给OpenGL,让OpenGL生成一个纹理贴图:①glGenTextures(2, &texture[0]):创建纹理对象②glBindTexture(GL_TEXTURE_2D,texture[loop]):绑定纹理对象③glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data):将Pixels数组中的像素值传给当前绑定的纹理对象,于就是便创建了纹理。

glTexImage函数的参数分别就是纹理的类型,纹理的等级,每个像素的字节数,纹理图像的宽度与高度,边框大小,像素数据的格式,像素值的数据类型,像素数据。

(2)纹理滤镜:在纹理映射的过程中,如果图元的大小不等于纹理的大小,OpenGL便会对纹理进行缩放以适应图元的尺寸。

我们可以通过设置纹理滤镜来决定OpenGL对某个纹理采用的放大、缩小的算法。

调用glTexParameter来设置纹理滤镜。

如:glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置放大滤镜glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);//设置缩小滤镜(3)纹理坐标:要使用当前的纹理绘制图元,我们必须在绘制每个顶点之前为该顶点指定纹理坐标。

只需调用glTexCoord2d(s:Double;t:Double);函数即可。

其中,s、t就是对于2D纹理而言的s、t坐标。

对于任何纹理,无论纹理的真正大小如何,其顶端(左上角)的纹理坐标恒为(0,0),右下角的纹理坐标恒为(1,1)。

也就就是说,纹理坐标应就是一个介于0到1之间的一个小数。

纹理贴图前后对比效果见图5。

纹理贴图前纹理贴图后五、成果展示本次实验将两个模型进行改造,实现了一辆简单的小车以及一艘简单的帆船。

(小车模型)(帆船模型)六、心得体会计算机图形学本身就是一门理论与实践都比较复杂的学科,从最开始二维图形的实现,到最后三维真实感场景的实现,都不就是一个简单的过程,好的真实感场景实现需要多个模型的相互融合,在实验设计过程中,难免遇到困难,下面就是本次实验总结出来的感受。

1.glEnable( )启动函数,无论就是构造什么样的模型,都需要由这个函数来启动,如光照模型需要glEnable(GL_LIGHTING),纹理贴图需要glEnable(GL_TEXTURE_2D);没有启动函数的作用,效果都就是不可能就是实现的。

相关文档
最新文档