图形学课程设计报告书
计算机图形学报告
计算机图形学课程设计报告一.课程设计背景:近年来,随着时代的发展,计算机技术得以迅速的普及与深入的趋势,而计算机图形学正是其中一门重要的学科以技术。
计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。
是计算机科学的一个分支领域,主要关注数字合成与操作视觉的图形内容。
虽然这个词通常被认为是指三维图形,事实上同时包括了二维图形以及图像处理。
这个科学广义的分类,可分为以下几类:∙几何:研究面的表示和处理的方法。
∙动画:研究移动的表示和操作方法。
∙图像拟真/渲染:研究模拟光线传递效果的算法。
∙图像:研究图像的获取或是编辑。
简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。
图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。
从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。
二.课程设计目的:本课程主要内容包括计算机图形学的研究内容、发展与应用,图形输入输出设备,图形显示原理,图形软件标准,基本图形生成算法,图形几何变换与裁剪,自由曲线和曲面,三维实体造型,分形几何造型,分形艺术,隐藏面消除,光照模型,颜色模型,光线跟踪,纹理细节模拟,常用的计算机动画技术和软件等。
在本学期期末时按课程要求进行课程设计,提高学生对计算机图形学知识的了解与运用技巧,加深学生对其算法原理理解及运用。
同时通过此次课程设计提高动手实践能力与学习分析能力这就是本次的课程设计的目的。
三.课程设计的要求及运行环境:设计要求:1. 学生应独立自主完成本次课程设计;2. 在设计过程中必须理解所需画图算法的原理;3. 设计界面应该美观实用;4. 在设计时应该准时到及保持机房环境干净。
计算机图形学课程设计实习报告
5.单击“下一步”按钮。
6.在“应用程序类型中”,选择“单文档”类型。
7.单击“完成”,创建了一项空的工程-绘图应用程序主框架。
实验内容2:应用程序编译运行
运行版本有两类:Debug、Release,生成Debug解决方案步骤如下:
1.生成解决方案
点击“生成-〉生成解决方案”,生成了Debug版的可运行程序。
在新插入的菜单项的“Caption”中输入“绘图”。
3.输入ID
输入“打开”菜单项,输入“直线”菜单项,在“直线”菜单项下输入“DDA”菜单,“DDA”菜单的ID为ID_LINE_DDA。
ID
Caption
功能
ID_LINE_DDA
DDA
用DDA发绘制直线
4.调出类视图窗口
单击菜单“视图-〉类视图”,
运行结果:
实验内容3:设置菜单项并生成消息响应函数
1.弹出菜单设计器
单击“解决方案管理器”窗口中的资源文件Sample.rc,弹出资源视图,
2.插入一项菜单
双击“资源视图”中的“Menu”展开文件夹,双击“IDR_MAINFRAME”,弹出菜单设计器。右健单击菜单设计器的“帮助”,选择“新插入”,插入一项菜单。
实验内容4:SetPixel绘图
五、回答如下问题:
解释以下每条命令的含义
CClientDC *pdc=newCClientDC(this);//定义一个指针类型的CClientDC对象,客户区设备上下文用于客//户区的输出,与特定窗口关联
CPen pen;//定义一个画笔对象
pen.CreatePen(PS_DOT,1,RGB(255,0,0));//赋予pen对象以风格
计算机图形学的课程设计
计算机图形学课程设计设计题目:画三次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样条曲线。
图形学课程设计报告书-精品
课程设计报告学生姓名:刘名凤学号:0809290102 学院:理学院班级: 信计081题目: 奥运五环指导教师:常志文职称: 教授邓冠男职称助教 2011 年 5 月 31 日目录目录 .................................................................................................................. - 2 -一、选题背景 .......................................................................................................... - 1 -1.1奥运五环设计的问题 ........................................................................ - 1 -1.2 奥运五环设计指导思想 .................................................................... - 1 -二、算法设计 .......................................................................................................... - 1 -2.1 设计原理 ............................................................................................ - 1 -2.2 算法设计的方案 ................................................................................ - 2 -2.2.1圆环求交算法 .................................................................................... - 2 -2.2.2 三维旋转变换算法 ........................................................................... - 2 -三、程序及功能说明 .............................................................................................. - 2 -3.1 程序说明 ............................................................................................ - 2 -四、结果分析 .......................................................................................................... - 5 -4.1、显示结果 ............................................................................................ - 5 -五、总结 .................................................................................................................. - 6 -六、课程设计心得体会 .......................................................................................... - 7 -参考文献 .................................................................................................................. - 8 -源程序 (1)一、选题背景1.1奥运五环设计的问题计算机图形学是计算机科学最活跃的分支之一,它伴随着计算机技术的发展而发展。
计算机图形学-期末课程设计
图形学课程设计报告题目:系别:班级:学号:姓名:指导老师:目录诚信说明......................................................................................................... 错误!未定义书签。
目录 .. (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的画图软件和图片处理软件的发展也日新月异,因此产生了制作一个类似的画图软件;而且通过制作该程序还能更好的学习图形学编程知识。
图形学课程设计报告册
2011 ~ 2012学年度第 2学期赣南师范学院数学与计算机科学学院课程设计报告册课程设计名称:计算机图形学实用技术专业:计算机科学与技术班级:学号:姓名:指导老师:章银娥课程设计报告中文摘要本文通过阐明多边形变换的原理及方法,设置变换矩阵,演示了多边形的二维几何图形的平移、缩放、错切等基本变换与包括二种变换组合的几何变换过程,该演示过程本程序中采用文档视图结构实现,创建一个单文档视图,添加绘图的菜单资源和工具栏,并设置鼠标左键响应绘制坐标,鼠标单击各个菜单或工具栏时即可演示二维几何图形的各种变化。
关键字:多边形变换矩阵绘制坐标目录绪论 (4)(一)需求分析 (4)1.1功能需求 (4)1.2性能需求 (4)1.3可靠性和可用性 (4)1.4接口需求 (4)1.5约束 (4)1.6逆向需求 (4)1.7将来可能提出的要求 (4)(二)关键算法的理论介绍和程序实现步骤 (4)2.1比例变换 (4)2.2绕任意一点旋转变换 (5)2.3错切变换 (5)2.4平移变换 (6)(三)具体实现 (6)3.1.1多边形定义代码 (6)3.1.2多边形实现代码 (6)3.2比例变换 (8)3.3错切变换 (8)3.4组合变换中的旋转变换 (9)3.5平移变换 (9)(四)运行调试与分析讨论 (13)(五)设计体会与小结 (14)(六)参考文献 (14)绪论通过图形旧点集*变换矩阵=图形新点集的原理,计算机图形学能够很好的解决二维图形的变换及组合变换。
本文主要研究的是如何根据已知条件求出变换矩阵。
一旦变换矩阵求出即可完成二维图形的各种变换。
正文该程序通过MFC APPWizard.exe通过一个工程区间很好编写代码和菜单。
实现了绘制多边形以及对他实现各种组合变换的功能。
改进:编写能够支持圆形,椭圆等非多边形的组合变换以及多边形在三维区间内的组合变换。
程序具有对比的功能更好。
(五)设计体会与小结课程设计评分表。
图形学课程设计带报告
图形学课程设计带报告一、教学目标本课程的教学目标是使学生掌握图形学的基本概念、原理和技能,能够运用图形学知识解决实际问题。
具体目标如下:知识目标:学生能够理解图形学的基本概念,如点、线、面、图等,掌握图形的表示方法和运算规律。
技能目标:学生能够熟练使用图形学相关软件,如Photoshop、Illustrator等,进行图形的创建、编辑和变换。
情感态度价值观目标:培养学生对图形学的兴趣和热情,提高学生审美能力和创新意识。
二、教学内容根据课程目标,教学内容主要包括以下几个方面:1.图形学基本概念:点、线、面、图等的基本概念和性质。
2.图形表示方法:坐标系、向量、矩阵等表示方法。
3.图形运算规律:图形的变换、组合、裁剪等运算规律。
4.图形软件使用:Photoshop、Illustrator等图形软件的基本操作和技巧。
5.图形创作实践:进行图形创作,培养学生的审美能力和创新意识。
三、教学方法为了达到课程目标,采用多种教学方法相结合的方式进行教学:1.讲授法:讲解图形学的基本概念、原理和技能。
2.案例分析法:分析经典图形创作案例,引导学生进行思考和讨论。
3.实验法:让学生动手实践,使用图形软件进行图形创作。
4.小组讨论法:分组进行讨论,促进学生之间的交流和合作。
四、教学资源为了支持教学内容和教学方法的实施,准备以下教学资源:1.教材:选择合适的图形学教材,为学生提供系统的学习资料。
2.参考书:提供相关的参考书籍,丰富学生的知识储备。
3.多媒体资料:制作PPT、视频等多媒体资料,生动形象地展示图形学知识。
4.实验设备:准备图形软件、计算机等实验设备,保证学生能够进行实践操作。
五、教学评估为了全面、客观地评估学生的学习成果,本课程采用以下评估方式:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性。
2.作业:布置适量的作业,评估学生的理解和应用能力。
3.考试:进行期中和期末考试,评估学生对课程知识的掌握程度。
计算机图形学设计报告
计算机图形学设计报告专业班级: .NET113 学号: 201107082000 姓名:吉祥草指导老师:杜俊俐中原工学院软件学院2013年6月18日目录项目一:图形转换的绘制(C#) (1)项目二:画图工具(JAVA) (6)项目三:红绿灯绘制(JAVA) (9)项目四:五子棋游戏(JAVA) (13)项目一名称:图形转换的绘制一、设计目的1、练习2D图形的绘制技术;2、练习2D图形的几何变换技术3、练习2D图形的填充技术二、设计内容编程实现五星红旗的绘制三、设计方案与实现1、设计中的基本绘图功能及绘图函数,设计的总体安排用C#语言编写的程序,首先用自己学的专业语言来编写2D图形的绘制以及转换的技术。
2、图形数据及确定开始为转变的图形总体是有无数个空心圆组成的,每个圆圆心是同一点,但每个圆有不同的半径。
圆的边缘设置是白色的,除了边缘就是绿色的。
它们的边缘间的距离相等。
转变后的图形是无数个空心正方形和一个实心的绿色圆组成。
正方形边缘的间距也是等长的。
3、设计流程(1)为便于确定复杂图形之位置,先找出中心点,将它视为圆心,先设置一个半径为150长的绿色实心圆,然后画白色的圆,其中半色空心圆,半径要依次累加相同的数字。
(2)转变后的图形也用相同方法,圆心,绿色实心圆的半径都相同。
不过不是设置白色的圆,而是白色的正方形,边长也要依次累加相同的数字。
四、设计结果转换前的图形转换后的图形(抓图)五、设计总结陈述在程序设计和调试中遇到的主要问题及解决过程,对所用的知识深入理解的作用,设计语言等相应功能的掌握和程序设计能力的提高以及经验和体会,分析并提出改进设想等。
在设计过程中,我们所学的C#知识基础是很重要的,基础弄通,即使不会框架,也可以有一份事情做。
同时在做此程序时,也发现了很多的问题,比如说知识的健忘,在做的时候竟然不知道该怎么编程。
这就在提醒我们要时时刻刻得学习,不要对自己在学习上的松懈。
并且C#相关的知识虽然有点杂,有点多,但多学有益,让你永远不会松懈,这使我能更上一层楼。
图形学课程设计
图形学课程设计一、课程目标本节图形学课程设计旨在通过系统化的教学活动,实现以下知识、技能及情感态度价值观目标:1. 知识目标:- 学生能掌握基础的几何图形及其分类,包括三角形、四边形、圆等。
- 学生能理解图形的对称性、相似性及全等性质,并能够描述其特征。
- 学生能运用所学的图形知识解释生活中的相关现象。
2. 技能目标:- 学生能够准确地绘制和构造不同类型的几何图形。
- 学生能够通过实际操作,探究和验证几何图形的性质和定理。
- 学生能够运用图形知识解决实际问题,如计算面积、周长等。
3. 情感态度价值观目标:- 培养学生对几何图形美的鉴赏能力,激发对图形学的学习兴趣。
- 培养学生的空间想象力和逻辑思维能力,增强解决问题的自信心。
- 培养学生的合作精神,通过小组讨论和实践,让学生体会团队合作的重要性。
课程性质:本课程为初中年级的图形学入门课程,旨在通过实践操作和理论结合的方式,帮助学生建立起对图形学的基本认识和理解。
学生特点:初中年级的学生正处于形象思维向抽象思维过渡的阶段,他们好奇心强,喜欢探索和动手实践。
教学要求:教师应注重启发式教学,引导学生通过观察、实践、总结等环节,主动发现图形学中的规律,从而提高他们的空间想象力和逻辑思维能力。
同时,教师需关注学生个体差异,提供个性化的指导和支持,确保每位学生都能在课程中取得进步。
通过具体的学习成果分解,为后续教学设计和评估提供明确的方向。
二、教学内容本节图形学课程内容根据课程目标,结合教材章节,科学系统地组织如下:1. 几何图形的基本概念:- 三角形、四边形、圆的定义及分类。
- 图形的对称轴、对称中心、旋转对称。
2. 几何图形的性质与定理:- 三角形的内角和、外角性质、全等条件。
- 四边形的对角线性质、平行四边形、矩形、菱形的特殊性质。
- 圆的周长、面积、圆周角定理。
3. 几何图形的测量与应用:- 计算几何图形的面积和周长。
- 实际生活中几何图形的应用案例分析。
计算机图形学课程设计报告简单图形的绘制
《计算机图形学》课程设计报告学生:学号:学院:班级:题目: 简单图形的绘制职称2015年7月1日目录目录 (I)一、选题背景 (1)二、算法设计 (2)2.1 绘制直线、圆、椭圆、抛物线 (2)2.1.1 绘制直线 (2)2.1.2 绘制圆 (2)2.1.3 绘制椭圆 (2)2.1.4 绘制抛物线 (2)2.2 三维几何变换 (2)三、程序及功能说明 (5)3.1 绘制直线、圆、椭圆、抛物线 (5)3.1.1 绘制直线 (5)3.1.2 绘制圆 (5)3.1.3 绘制椭圆 (6)3.1.4 绘制抛物线 (6)3.2 图形的平移 (6)3.3 图形的旋转 (7)3.4 图形的缩放 (7)四、结果分析 (8)4.1 绘制直线、圆、椭圆、抛物线 (8)4.1.1 直线 (8)4.1.2 圆 (8)4.1.3 椭圆 (9)4.1.4 抛物线 (9)4.2 图形的平移 (9)4.3 图形的旋转 (10)4.4 图形的缩放 (12)五、总结 (11)六、课程设计心得体会 (15)参考文献 (16)源程序 (17)一、选题背景二、算法设计2.1 绘制直线、圆、椭圆、抛物线2.1.1 绘制直线通过两个点的坐标来绘制直线。
计算机图形学中二维图形在显示输出之前需要扫描转换,生成直线的算法一般有DDA 算法和中点算法。
2.1.2 绘制圆通过运用圆的参数方程cos ;sin x a r y b r θθ=+=+来绘制圆的图形,其中[0,2]θπ∈,(a,b )为圆心,r 为半径,运用参数方程,只需要确定半径的长度和圆心的位置,即可绘制出圆。
2.1.3 绘制椭圆通过运用椭圆的参数方程cos ;sin x a y b θθ==来绘制椭圆的图形,其中[0,2]θπ∈,是已知的变量,a ,b 分别为长半轴,短半轴,当确定a 和b 后,通过参数方程即可得到这个椭圆的方程。
2.1.4 绘制抛物线根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。
计算机图形学课程设计报告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为例。
计算机图形学课程设计报告
计算机图形学课程设计报告设计课题:专业班级:学号:学生:指导教师:设计时间:中南林业科技大学涉外学院理工系计算机图形学课程设计任务书指导教师:廖宁教研室主任:2018年12月06 日注:本表下发学生一份,指导教师一份,栏目不够时请另附页。
课程设计任务书装订于设计计算说明书〔或论文〕封面之后,目录页之前。
目录一.设计目的……………………………………………………………二.设计要求……………………………………………………………1.构建根底类……………………………………………………2.构建直线类……………………………………………………3.构建变换类……………………………………………………4.构建填充类……………………………………………………5.构建光照类……………………………………………………三.开发环境…………………………………………………………四.详细设计五.源程序六.程序运行效果图七.总结设计目的▪培养对图形建模、变换、投影、消隐、光照原理的理解和应用。
▪培养图形类的编程能力。
▪培养计算机图形学应用软件开发的能力。
设计要求深入研究计算机图形学的生成原理,设计算法实现具体的类。
1.构建根底类实现CP2类绘制二维点;实现CP3类绘制三维点;实现CRGB 类处理RGB颜色;实现CVector类处理矢量。
2.构建直线类实现CLine类绘制任意斜率的直线、实现CALine类绘制任意斜率的反走样直线、实现CCLine类绘制任意斜率的颜色渐变直线、实现CACLine类绘制任意斜率的反走样颜色渐变直线。
3.构建变换类实现CTransForm完成二维和三维图形变换。
4.构建填充类实现CFill类使用有效边表算法填充多边形、实现CZBuffer类进展深度缓冲消隐,并使用Gouraud和Phong明暗处理填充图形面片。
5.构建光照类实现CLight类设置点光源、实现CMaterial类设置物体材质、实现CLighting类对物体实施光照。
计算机图形学课程设计报告
源程序 // Yzg20166989View.cpp : implementation of the
CYzg20166989View class //
#include "stdafx.h" #include "Yzg20166989.h"
#include "math.h"
#include "Yzg20166989Doc.h" #include "Yzg20166989View.h"
设计目的 培养对图形建模、变换、投影、消隐、光照原理的理解和应用。 培养图形类的编程能力。 培养计算机图形学应用软件开发的能力。
设计要求 深入研究计算机图形学的生成原理,设计算法实现具体的类。 1.构建基础类 实现 CP2 类绘制二维点;实现 CP3 类绘制三维点;实现 CRGB 类处理 RGB 颜色;实现 CVector 类处理矢量。 2.构建直线类 实现 CLine 类绘制任意斜率的直线、实现 CALine 类绘制任意 斜率的反走样直线、实现 CCLine 类绘制任意斜率的颜色渐变直线、 实现 CACLine 类绘制任意斜率的反走样颜色渐变直线。 3.构建变换类 实现 CTransForm 完成二维和三维图形变换。 4.构建填充类 实现 CFill 类使用有效边表算法填充多边形、实现 CZBuffer 类进行深度缓冲消隐,并使用 Gouraud 和 Phong 明暗处理填充图形 面片。 5.构建光照类
CYzg20166989View::CYzg20166989View()
{ // TODO: add construction code here
}
CYzg20166989View::~CYzg20166989View() { }
图形学课设报告
武汉工业学院《计算机图形学》课程设计题目:绘制三次Bezier曲线,三次B样条曲线和Cantor图指导老师:刘文涛姓名:庞璐学号:070505129院(系):计算机与信息工程系专业:软件工程完成日期: 2010年1 月4 日一.课题题目介绍设计任务9:1)给定下图所示的四个控制点:P0=(228,456),P1=(294,247),P2=(452,123),P3=(705,197)。
分别绘制三次Bezier曲线和三次B样条曲线。
2)使用VC编程,在窗口中一次绘制n=0~5的所有Cantor图。
二.整体功能及设计1)主模块:Bezier,B样条,cantor集算法的实现。
2)响应模块:a.Bezier,B样条,cantor集的鼠标响应;b.Bezier,B样条,cantor集的菜单和提示对话框响应。
c. Bezier,B样条,cantor集的快捷按钮响应。
3)附加功能模块:曲线颜色的选择。
算法描述:Bezier曲线功能描述:点击相应菜单,弹出提示对话框,继而可以实现鼠标取点,绘出Bezier 曲线和B样条曲线;选择cantor集菜单在弹出的对话框中输入n的值,随即绘出cantor集图形。
三.编程实现1.属性和方法的定义:class CMy070505129View : public CView{protected: // create from serialization onlyCMy070505129View();DECLARE_DYNCREATE(CMy070505129View)// Attributesbool mousestate;//鼠标状态标志CPoint cp[4];//顶点int i;//控制多边形顶点int m;//判断函数int MaxX,MaxY;//屏幕x和y的最大坐标int n;//递归深度COLORREF ccolor;//设置颜色值public:CMy070505129Doc* GetDocument();// Operationsvoid DrawBezier();//Bezier函数void DrawByangtiao();//B样条函数void Cantor(double,double,double,double,int);//cantor函数2.头文件:#include "stdafx.h"#include "070505129.h"#include "070505129Doc.h"#include "070505129View.h"#include "Bezier.h"#include "Byangtiao.h"#include "Cantor.h"#define ROUND(x) int(x+0.5)//四舍五入3.方法实现:CMy070505129View::CMy070505129View(){//部分数据初始化mousestate=false;i=0;cp[0].x=0;cp[0].y=0;cp[1].x=0;cp[1].y=0;cp[2].x=0;cp[2].y=0;cp[3].x=0;cp[3].y=0;}void CMy070505129View::DrawBezier()//Bezier函数{CClientDC dc(this);//设备上下文double t=0.0;//Bezier算法实现while(t<1.0){doubleptx=((-(t*t*t))+3*t*t-3*t+1)*(double)cp[0].x+(3*t*t*t-6*t*t+3*t)*(double)cp[1].x+(( -(3*t*t*t))+3*t*t)*(double)cp[2].x+t*t*t*(double)cp[3].x;doublepty=((-(t*t*t))+3*t*t-3*t+1)*(double)cp[0].y+(3*t*t*t-6*t*t+3*t)*(double)cp[1].y+(( -(3*t*t*t))+3*t*t)*(double)cp[2].y+t*t*t*(double)cp[3].y;dc.SetPixel((int)(ptx+0.5),(int)(pty+0.5),ccolor);//ccolor为颜色变量t+=1/10000.0;//步长}}void CMy070505129View::DrawByangtiao()//B样条函数{CClientDC dc(this);//设备上下文double t=0.0,x,y;//局部变量t为步长,x,y为每次曲线相应的点dc.MoveTo(cp[0]);//绘制四个控制点组成的四条线for(int i=1;i<4;i++){dc.LineTo(cp[i]);}//B样条算法实现while(t<1.0){double F0=(-(t*t*t)+3*t*t-3*t+1)/6.0;double F1=(3*t*t*t-6*t*t+4)/6.0;double F2=(-3*(t*t*t)+3*t*t+3*t+1)/6.0;double F3=t*t*t/6.0;x=cp[0].x*F0+cp[1].x*F1+cp[2].x*F2+cp[3].x*F3;y=cp[0].y*F0+cp[1].y*F1+cp[2].y*F2+cp[3].y*F3;dc.SetPixel((int)(x+0.5),(int)(y+0.5),ccolor);//ccolor为颜色变量t+=1/1000.0;//步长}}void CMy070505129View::Cantor(double ax,double ay,double bx,double by,int x)//cantor函数{double cx,dx,cy,dy;//cantor中间点座标CClientDC dc(this);//设备上下文if(x==0){dc.MoveTo(ROUND(ax),ROUND(ay+MaxY/2));dc.LineTo(ROUND(bx),ROUND(by+MaxY/2));return;}//递归cx=ax+(bx-ax)/3;cy = ay ;Cantor(ax,ay,cx,cy,x-1);dx=ax+2*(bx-ax)/3;dy = by ;Cantor(dx,dy,bx,by,x-1);}void CMy070505129View::OnBezier()//菜单响应函数{// TODO: Add your command handler code heremousestate=true;//重新设制鼠标状态CBezier bezier;//定义对话框类对象bezier.DoModal();//响应m=1;//标记值,双击时调用相应的函数Invalidate();}void CMy070505129View::OnByangtiao()//菜单响应函数{// TODO: Add your command handler code heremousestate=true;//重新设制鼠标状态CByangtiao Byangtiao;//定义对话框类对象Byangtiao.DoModal();//响应m=2;//标记值,双击时调用相应的函数Invalidate();}void CMy070505129View::OnLButtonDown(UINT nFlags, CPoint point)//单击获取控制点函数{if(mousestate){//获取x坐标cp[i].x=point.x;//获取y坐标cp[i].y=point.y;//存四个控制点放入cp[4]if(i<4)i++;elsemousestate=false;}CView::OnLButtonDown(nFlags, point);}void CMy070505129View::OnBUTTONBezier()//Bezier快捷按钮函数{//重新绘制Invalidate();//重新设制鼠标状态mousestate=true;//标记值,双击时调用相应的函数m=1;}void CMy070505129View::OnBUTTONByangtiao()//B样条快捷按钮函数{// TODO: Add your command handler code hereInvalidate();//重新绘制mousestate=true;//重新设制鼠标状态m=2;//标记值,双击时调用相应的函数}void CMy070505129View::OnLButtonDblClk(UINT nFlags, CPoint point) //双击{// TODO: Add your message handler code here and/or call default//鼠标状态mousestate=false;//调用画Bezier函数if(m==1)DrawBezier();//调用画B样条函数if(m==2)DrawByangtiao();CView::OnLButtonDblClk(nFlags, point);}void CMy070505129View::Oncantor()//Cantor集菜单响应函数{// TODO: Add your command handler code here//定义对话框类对象CCantor cantor;//设备上下文CClientDC dc(this);//响应cantor.DoModal();n=cantor.m_n;//立即重绘屏幕RedrawWindow();//获取屏幕最大x,y值CRect Rect;GetClientRect(&Rect);MaxX=Rect.right;MaxY=Rect.bottom;//调用Cantor算法实现函数Cantor(0,0,MaxX,0,n);}void CMy070505129View::OnMENUITEMcolor()//颜色菜单响应函数{// TODO: Add your command handler code here//定义对颜色对话框类对象CColorDialog color;color.m_cc.rgbResult=ccolor;color.DoModal();//得到用户选择的颜色ccolor=color.GetColor();}四.使用说明点击相应菜单,弹出提示对话框,单击”ok”键,使用鼠标单击四下取点,双击绘出Bezier曲线或B样条曲线;或者单击选择单击图形按钮随即单击鼠标四下,双击绘出Bezier曲线或B样条曲线。
计算机图形学课程设计
}
returnNULL;
}
intLoadGLTextures()
{
intstatus=false;
AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void*)*1);
if(TextureImage[0]=LoadBMP("sand.bmp"))
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}
if(TextureImage[0])
{
if(TextureImage[0]->data)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
计算机图形学课程设计
计算机图形学课程设计计算机图形学是计算机科学领域的一个重要分支,主要研究如何利用计算机生成、显示和操作图形图像的方法和技术。
在现代社会中,计算机图形学的应用已经相当广泛,包括动画制作、游戏开发、虚拟现实等领域。
因此,学习计算机图形学课程对于计算机相关专业的学生来说至关重要。
一、课程介绍计算机图形学课程主要包括基本概念、算法原理、图形学编程等内容。
学生将学习到图形学基础知识,掌握计算机图形学的基本原理和算法,培养图形图像处理的能力。
通过实际的编程项目,学生将能够将所学知识应用到实际项目中,提高自己的编程能力和创造力。
二、课程内容1. 图形学基础知识:包括图形学的定义、发展历史、基本概念和术语等;2. 图形学算法原理:学习常见的图形学算法,如光栅化、三维变换、光照模型等;3. 图形学编程实践:通过编程实践项目,实现简单的图形图像处理功能,加深对图形学原理的理解;4. 课程设计项目:进行一个综合性的课程设计项目,结合所学知识完成一个小型的图形学应用程序。
三、课程设计要求1. 熟悉图形学的基本知识和算法原理;2. 掌握图形学编程的基本技能,能够独立完成简单的图形学编程任务;3. 完成课程设计项目,提出合理的设计方案,实现自己的想法,并能够进行有效的展示和演示。
四、课程评估方式1. 平时成绩:包括上课表现、作业完成情况、参与讨论等;2. 期中考试:考察学生对于基本概念和算法原理的理解;3. 课程设计项目成绩:综合考察学生的综合能力和创造力;4. 期末综合考试:考察学生对于整个课程知识体系的掌握程度。
五、课程设计的意义和价值计算机图形学课程设计是对所学知识的一个综合应用和实践,通过设计和实现一个完整的图形学应用程序,学生将会提高自己的创造力和动手能力,培养解决实际问题的能力。
同时,课程设计项目也是对学生综合能力的一个考察和锻炼,能够提高学生的编程技能和团队协作能力,为将来从事相关行业打下坚实的基础。
综上所述,计算机图形学课程设计是一门非常重要的课程,通过学习这门课程,学生将能够掌握计算机图形学的基本原理和算法,提高自己的编程能力和创造力,为将来的职业发展奠定良好的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告学生姓名:学号:学院:班级:题目:指导教师:职称:职称2011 年 5 月 31 日目录目录 .................................................................................................................. - 2 -一、选题背景 .......................................................................................................... - 1 -1.1奥运五环设计的问题 ........................................................................ - 1 -1.2 奥运五环设计指导思想 .................................................................... - 1 -二、算法设计 .......................................................................................................... - 1 -2.1 设计原理 ............................................................................................ - 1 -2.2 算法设计的方案 ................................................................................ - 2 -2.2.1圆环求交算法 .................................................................................... - 2 -2.2.2 三维旋转变换算法 ........................................................................... - 2 -三、程序及功能说明 .............................................................................................. - 2 -3.1 程序说明 ............................................................................................ - 2 -四、结果分析 .......................................................................................................... - 5 -4.1、显示结果 ............................................................................................ - 5 -五、总结 .................................................................................................................. - 6 -六、课程设计心得体会 .......................................................................................... - 7 -参考文献 .................................................................................................................. - 8 -源程序 (1)一、选题背景1.1奥运五环设计的问题计算机图形学是计算机科学最活跃的分支之一,它伴随着计算机技术的发展而发展。
它研究的对象是能够在人的的视觉系统中形成视觉印象的客观对象的图形。
它包括人眼所观察到的自然界的景物,用照相机等装置所获得的图片,用绘图工具绘制的工程图,各种人工美术绘画和用数学方法描述的图形等。
利用图形学知识设计奥运五环会遇到许多问题,如五个圆环的生成,颜色的填充,光照明模型的形成,如何使图形具有三维立体感,在图形形成的过程中怎样使其具有动态画面,怎样在五环后加入背景,还有怎样使用VC++中的高级图形工具OPENGL。
为此在此设计中需要掌握OPENGL中的各种绘图功能,并能达到熟练运用。
掌握图形生成算法,颜色模型形成,简单光照明模型的形成与应用。
1.2奥运五环设计指导思想奥运五环代表五大洲。
黄色是亚洲,黑色是非洲,蓝色是欧洲,红色是美洲,绿色是大洋洲。
五环环环相扣,象征着五大洲人民的团结,共振奥运精神!朴素的白色背景寓意着和平。
计算机图形学利用VC++中的高级图形工具OpenGL,绘制各种三维动态图形,利用填充图形填充各种图形及颜色。
图形学中所要表示、处理和生成的物体,不仅包括客观存在的物体,还包括构造出来的虚拟物体。
还可依据光照明模型,绘制算法具体计算对应屏幕上各像素的物体表面的颜色,并最终显示图形。
可利用这些图形学知识实现奥运五环。
二、算法设计2.1设计原理圆环与圆环求教算法,颜色的交互指定与颜色插值中的Gouraud着色方法,反混淆算法以及制作动画时需要的图像融合,三维坐标系中旋转变换,光照明模型方程,漫反射和镜面反射原理等,生成具有动态旋转功能,带有五种颜色的五个相交环,并在光照下具有真实感的图形。
2.2 算法设计的方案 2.2.1圆环求交算法将圆环面看成中心在大圆上的一族圆,从而将球面圆环面求交的问题转化为球面与一族圆的求交问题.该算法不需要跟踪交线.首先利用点圆最近距离的理论,直接判断是否无交、相切于一点、交于一个圆或交于两个圆等简单的情况;其他情况下,通过求解关于圆环面大圆的参数的一元四次方程的根,然后对该参数区间[0,2π]进行划分,并通过简单的符号判断来确定有交的参数子区间,在这些有交的子区间上直接给出所有交曲线段的参数表示形式.2.2.2 三维旋转变换算法如果要绕空间任意轴10P P 旋转θ角,可按照如下步骤为实现: (1) 以0P 为原点O ,10P P 为O z 轴建立新的坐标系z y x O ; (2) 求出从坐标系O xyz 到坐标系z y x O 的变换M; (3) 将图形对象变换到坐标系z y x O 中; (4) 在新坐标系z y x O 中;(5) 将图形对象变换回原坐标系xyz O 中,变换为M 1-。
这样绕10P P 旋转θ角的变换为:1-M M )(θz R三、程序及功能说明3.1 程序说明1.枚举个元素 enum {BLACK = 0, RED, GREEN, YELLOW, BLUE,MAGENTA, CYAN, WHITE };2. 定义各种类型 typedef short Point[2]; GLenum directRender;unsigned char rgb_colors[RINGS][3]; int mapped_colors[RINGS];float dests[RINGS][3];float offsets[RINGS][3];float angs[RINGS];float rotAxis[RINGS][3];int iters[RINGS];GLuint theTorus;3. 画出球,环面求交void FillTorus(float rc, int numc, float rt, int numt){int i, j, k;float s, t;float x, y, z;float pi, twopi;pi = M_PI;twopi = 2 * pi;for (i = 0; i < numc; i++) {glBegin(GL_QUAD_STRIP);/*开始画球*/for (j = 0; j <= numt; j++) {for (k = 1; k >= 0; k--) {s = (float)((i + k) % numc + 0.5f);t = (float)(j % numt);x = cosf(t * twopi / numt) * cosf(s * twopi / numc);y = sinf(t * twopi / numt) * cosf(s * twopi / numc);z = sinf(s * twopi / numc);glNormal3f(x, y, z);/*定义法线方向*/x = (rt + rc * cosf(s * twopi / numc)) * cosf(t * twopi / numt);y = (rt + rc * cosf(s * twopi / numc)) * sinf(t * twopi / numt);z = rc * sinf(s * twopi / numc);glVertex3f(x, y, z);/*设置顶点坐标*/}}glEnd();/*绘制结束*/}}4.对绘制图形进行旋转变换void CALLBACK DrawScene(void){int i;glPushMatrix();/*保存移动或旋转变换后的位置和角度*/glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);for (i = 0; i < RINGS; i++) {glColor3ubv(rgb_colors[i]);glPushMatrix();/*保存当前位置*/glTranslatef(dests[i][0] + offsets[i][0],dests[i][1] + offsets[i][1],dests[i][2] + offsets[i][2]);glRotatef(angs[i], rotAxis[i][0], rotAxis[i][1], rotAxis[i][2]);/*绘制场景*/glCallList(theTorus);glPopMatrix();/*回复刚刚保存的位置和角度*/}glPopMatrix();auxSwapBuffers();/*交换两个颜色缓冲区的内容*/}5.初始化圆环,定义光源,设置光照模型void Init(void)/*创建一个存储圆环的显示列表并初始化状态*/{int i;float top_y = 1.0f;float bottom_y = 0.0f;float top_z = 0.15f;float bottom_z = 0.69f;float spacing = 2.5f;static float lmodel_ambient[] = {0.0f, 0.0f, 0.0f, 0.0f};…….srand(time(NULL));ReInit();/*重新初始化*/for (i = 0; i < RINGS; i++) {rgb_colors[i][0] = rgb_colors[i][1] = rgb_colors[i][2] = 0;}rgb_colors[BLUERING][2] = 255;…..mapped_colors[BLUERING] = BLUE;………dests[BLUERING][0] = -spacing;…….glClearColor(0.5, 0.5, 0.5, 0.0);glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);/*定义光源*/ glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);/*定义光源漫射光*/ glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);glLightfv(GL_LIGHT0, GL_POSITION, light0_position);glEnable(GL_LIGHT0);/*是光源有效*/glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_local); glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glEnable(GL_LIGHTING);glMaterialfv(GL_FRONT, GL_AMBIENT, bevel_mat_ambient);/*定义环境光反射率*/glMaterialfv(GL_FRONT, GL_SHININESS, bevel_mat_shininess);/*定义高光指数*/glMaterialfv(GL_FRONT, GL_SPECULAR, bevel_mat_specular);/*定义镜面反射率*/glMaterialfv(GL_FRONT, GL_DIFFUSE, bevel_mat_diffuse);/*定义漫射光反射率*/glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);glEnable(GL_COLOR_MATERIAL);glShadeModel(GL_SMOOTH);}6.设置视点void CALLBACK Reshape(int width, int height){glViewport(0, 0, width, height);glMatrixMode(GL_PROJECTION);gluPerspective(45, 1.33, 0.1, 100.0);gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);glMatrixMode(GL_MODELVIEW);}四、结果分析4.1、显示结果分析:程序能显示一个动态的三维实体,立体感比较真实,从不同的视觉角度都能观察到动态的旋转变换的五个不同颜色的环。