计算机图形学实验指导书20xx

时间:2024.4.27

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

课程编号: 243005

课程名称:计算机图形学英文名称:

课程类型:

实验学时:

适用对象:

先修课程: Computer graphics 限选课 20 计算机专业本科学生 C、C++语言

一、实验说明

本实验课是实用图形编程技术的一个学习和实践。以VC++6.0作为编程工具,以MFC、OpenGL为基础,完成一些图形学方面的基本编程,为深入理解图形学原理提供重要的保证,并为今后的计算机图形学应用打下坚实的实践基础和编程积累,促进学生理解课程内容,为开发图形应用系统打下基础。

教材的下篇(第八章到第十三章)就是本实验课的详细说明和指导。

二、实验要求

通过上机实验使学生掌握计算机图形学基础知识的实际应用。主要实践基本图形的生成和计算、图形变换与输出、图形输入与交互技术、图形数据结构等。

要求学生具有阅读、编辑、调试VC++语言程序的能力。

三、评分标准

1、实验报告结构完整。

2、试验目的明确。

3、实验准备充分、代码正确。

4、结果正确、结论合理。

5、成绩统一按照优、良、中、差四个档次给出。

6、实验成绩的确定以最终上机检查的结果为准,实验报告及考勤供参考。

四、推荐的参考书

1、《VC++应用教程》郑阿奇主编,北京:人民邮电出版社,2008.4。

2、《VC++实用教程》周进主编,北京:人民邮电出版社,2008.5。

3、 《VC++面向对象与可视化程序设计》黄维通主编,北京:清华大学出版社,2000.5。

4、《VC++实践与提高》李于剑主编,北京:中国铁道出版社,2001.7。

目 录

实验一:熟悉和掌握VC++MFC程序开发环境 (2学时) 实验二:学习掌握GDI对象类(2学时)

实验三: Windows映射模式、绘图模式的设置(2学时) 实验四:鼠标绘直线(4学时)

实验五:鼠标绘园(2学时)

实验六:绘制梅花曲线(4学时)

实验七:OpenGL基础知识和实验框架的建立(2学时) 实验八:OpenGL中基本图形的绘制(4学时)

实验九:OpenGL中组合图形及光照和贴图(验证性实验,4学时) 实验十:摄像漫游与OpenGL的坐标变换(验证性实验,4学时)

实验一:熟悉和掌握VC++MFC程序开发环境 (验证性实验,2学时)

目的:

1、掌握用AppWizard的Project窗口MFC AppWizard[exe]选项创建SDI应用程序的方法

2、熟悉SDI在编程、功能等方面的知识。

内容:

1、熟悉VC++6.0开发环境,它的系统菜单、工具栏、项目工作区窗口、文档窗口、输出窗口等。

2、熟悉建立SDI程序的步骤和各步选项,了解各选项的意义。

3、熟悉程序的编译、联结、执行等的操作方法与过程。

4、熟悉MFC程序的组织结构,四个基本类(Application、Frame、Document、View)的相互关系和调用顺序。

5、完成教材中第8章第3节的实验内容,即绘制点、直线、矩形,简单曲线,文本。 要求:

1、学习教材第8章1、2、3节的内容。

2、借阅有关VC++MFC的书籍,学习理解 MFC AppWizard[exe]的知识。

3、采用Project的AppWizard的Project窗口MFC AppWizard[exe]选项创建SDI,按照AppWizard的6步提示,一步步生成SDI文件。

4、观察SDI的开发环境,编译生成exe文件。

5、观察Workspace窗口,分别观看Class窗口中的类,Resource窗口中的菜单、对话框、工具条等资源,File窗口中的的各种文件,四类文件之间的关系。

6、找到 ~View类中的OnDraw函数。

实验二:学习掌握GDI对象类(验证性实验,2学时)

目的:

1、 掌握用VC++编程的过程和方法,理解熟悉GDI对象类

2、 理解0nDraw成员函数的知识,为编制绘图系统打基础。

内容:

1、找到由AppWizard直接生成的OnDraw函数。构造Cpen对象来绘制直线。

2、使用CPen类成员函数CreatePen()创建一支蓝色画笔。

3、使用CPen类成员函数CreatePenIndirect()创建一支黑色画笔。

4、使用CBrush类成员函数CreateBrushIndirect来创建一个黑色的圆。

5、使用CBrush类第二种构造函数来创建一支黑色(系统缺省的画刷)并绘制一个不带任何阴影线的矩形区域。

6、使用CBrush类第三种构造函数来创建一支黑色,样式为CROSS的画刷并绘制一个具有阴影线的椭圆区域。

7、使用CFont类成员函数CreateFont来创建CFont对象并绘制文本。

要求:

1、学习教材第8章第4节的内容。

2、建立工程(名称自定,比如MyVC),工程具体创建步骤如下:

(1) 单击File\New菜单。

(2)从弹出的对话框中选择第二个选项卡Project,并在左侧列表框中选择MFC AppWizard(exe);在Project name 编辑框中输入项目名称“MyVC”;在Location目录中选择要存放项目的文件夹。用鼠标左键单击“OK”按钮进入下一步。

(3) 在应用程序向导的第一步中,选择“Single document”(单文档),然后用鼠标左键单击“Finish”接受所有其余的缺省设置。此时出现的对话框如图所示。

(4) 用鼠标左键单击“OK”按钮确认项目设置。

计算机图形学实验指导书20xx

3、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

4、运行结果应该与教材中的相关实例相符。

实验三: Windows映射模式、绘图模式的设置(验证性实验,2学时)

目的:

1、理解熟悉Windows映射模式。

2、理解熟悉绘图模式的设置的知识,为编制绘图系统打基础。

内容:

1、在不同的映射模式之间切换,以完成图形大小和位置的改变以及逻辑坐标系的变化。

2、练习建立逻辑坐标系的基本方法及设置窗口和视口坐标系X方向和Y方向幅度的基本方法。

3、通过以下两个函数: pDC->DPtoLP(&point);// point的值被转换成逻辑坐标值

pDC->LPtoDP(&point);// point的值被转换成设备坐标值

实现逻辑坐标到设备坐标的转换。

4、练习在不同映射模式下,逻辑坐标和设备坐标的区别。

5、练习绘图模式及其设置方法。

要求:

1、学习教材第8章第5节的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符。

实验四:鼠标绘直线(验证性实验,2学时)

目的:

掌握用VC++编程实现鼠标绘制各种基本图元。

内容:

1、用类向导ClassWizard添加鼠标事件即其响应函数OnLButtonDown。

2、绘图模式的设置。

3、用鼠标绘制直线。

要求:

1、学习教材第9章1节的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符。

实验五:鼠标绘园(验证性实验,2学时)

目的:

掌握用VC++编程实现鼠标绘制各种基本图元。

内容:

1、学习理解鼠标消息 WM_LBUTTONDOWN、WM_MOUSEMOVE 、WM_RBUTTONDOWN。

2、用类向导ClassWizard添加鼠标事件即其响应函数。

3、用鼠标绘制园。

4、将此程序改造成画直线的程序。(画线的方式:单击,起点,再单击是终点,可以循环画线。)

要求:

1、学习教材第9章2节的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符。

实验六:绘制梅花曲线(验证性实验,4学时)

目的:

1、掌握绘制复杂曲线的基本方法——直线段逼近曲线法。

2、理解用菜单调用函数实现图形动态绘制的方法,为编制绘图系统打基础。

内容:

1、练习绘制复杂曲线的基本方法——直线段逼近曲线法。该方法的基本思想如下:首先写出该曲线的参数方程,当自变量由小到大依次变化时,就会得到一系列曲线上点的坐标,即逼近点,最后依次将各逼近点顺序连接起来。要绘制的梅花曲线参数方程如下:

x?asin?cos2?

y?asin2?cos? (其中0???2?)

2、练习在CWnd派生类——对话框的区域内绘各种图的方法。

3、利用面向对象的思想改造此示例,建立梅花曲线类。

要求:

1、学习教材第9章3节的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符。

实验七:OpenGL基础知识和实验框架的建立(验证性实验,4学时) 目的:

1、建立Windows系统下的OpenGL实验框架。

2、学习理解OpenGL工作流程。

内容:

1、建立非控制台的Windows程序框架。

2、建立OpenGL框架。

3、建立OpenGL框架的类文件。

4、完善Windows框架。

5、理解程序间的相互关系。

要求:

1、学习教材第10章的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符。

4、编译第10章的框架代码,修改背景色、窗口标题。

实验八:OpenGL中基本图形的绘制(验证性实验,2学时) 目的:

1、使用OpenGL绘制基本图形。

2、使用类文件组织程序。

内容:

1、学习OpenGL库函数命名方式。

2、学习OpenGL构图形式。

3、学习有关OpenGL的坐标变换。

4、显示OpenGL立体图形。

5、建立物体类文件。

要求:

1、学习教材第11章的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符,如图11.5.2所示。

实验九:OpenGL中组合图形及光照和贴图(验证性实验,2学时) 目的:

1、使用OpenGL绘制组合图形。

2、使用OpenGL的光照和贴图。

内容:

1、学习OpenGL绘制组合图形的方式。

2、加深对组合图形的理解,特别是对基本图形的缩放、移动、旋转的理解。

3、学习光照的使用,如何创建光源、启动光照。

4、学习有关OpenGL贴图的知识。

要求:

1、学习教材第12章的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符,如图12.1.1所示。

实验十:摄像漫游与OpenGL的坐标变换(验证性实验,2学时) 目的:

1、使用OpenGL中摄像漫游的方法。

2、学习OpenGL中的变换所对应的图形学理论。

内容:

1、学习OpenGL中 glulookAt(?)观察函数的使用。

2、理解glulookAt(视点,目标点,视点方向)函数中各参数的意义及控制方法。 要求:

1、学习教材第13章的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符,如图13.2.2所示。

4、 分别找到OpenGL中的变换所对应的图形学理论。


第二篇:计算机图形学投影变换


计算机图形学实验报告

实验三 三维图形的投影变换

生业导、姓班教名 级 师 绩

电子与信息工程系

2010 年 11月 6日

一、实验目的:

绘制三维物体的轴测投影图和一点透视图 ,在程序中给定控制多面体的顶点坐标及点线信息。视点固定在z轴某点上,输入物体的旋转角度及平移量。正轴测投影图和一点透视图。

二、题目:

三维图象的基本变换

三、设计思想:

因为电脑显示的是2维持坐标图象,所以在设计时要将三维的图象坐标转换成电脑能显示的二维持坐标图,然后根据图象的基本变换矩阵计算出变换后的坐标点,最后绘制出图象变换效果。

四、原程序:

CPoint dian22[8];//六面体的8个2维坐标点

CPoint dian[8]; float coordinate2[8][3];

float coordinate3[8][3] 六面体的8个3维坐标点

Void draw6angle()//绘制一个六面方体。

dc.MoveTo(0,0);//yuan dian zuo biao dian(400,400)

dc.LineTo(400,0);//x //绘制一x轴,Y,Z轴

dc.MoveTo(0,0); dc.LineTo(0,400);//y dc.MoveTo(50,50);//z dc.LineTo(-200,-200); dc.MoveTo(dian[0]);//0-1 dc.LineTo(dian[1]); dc.MoveTo(dian[0]);//0-3 dc.LineTo(dian[3]); dc.MoveTo(dian[0]);//0-7 dc.LineTo(dian[7]);

} dc.MoveTo(dian[4]);//4-3 dc.LineTo(dian[3]); dc.MoveTo(dian[4]);//4-5 dc.LineTo(dian[5]); dc.MoveTo(dian[4]);//4-7 dc.LineTo(dian[7]); dc.MoveTo(dian[6]);//6-5 dc.LineTo(dian[5]); dc.MoveTo(dian[6]);//6-7 dc.LineTo(dian[7]); dc.MoveTo(dian[6]);//6-1 dc.LineTo(dian[1]); dc.MoveTo(dian[2]);//2-1 dc.LineTo(dian[1]); dc.MoveTo(dian[2]);//2-3 dc.LineTo(dian[3]); dc.MoveTo(dian[2]);//2-5 dc.LineTo(dian[5])}

void CCBod_3DView::switch_point()//将三维坐标点转换成电脑上能表示的二维坐标点

{ float canshu=0.7071;

for(int i=0;i<8;i++)

{ dian[i].x=float (coordinate3[i][0]+float((-coordinate3[i][2]*canshu))); dian[i].y=float (coordinate3[i][1]+float((-coordinate3[i][2]*canshu))); } }

void CCBod_3DView::OnMoveOnz() //图象在Z轴上的移动。

{

// TODO: Add your command handler code here for(int i=0;i<8;i++)

{

coordinate3[i][2]=coordinate3[i][2]+50; }

this->Invalidate();

}

void CCBod_3DView::OnSpinz() //Z轴上旋转

{ // TODO: Add your command handler code here

{ coordinate3[i][0]=float(coordinate3[i][0]*b)+float(coordinate3[i][1]*(-a)); coordinate3[i][1]=float(coordinate3[i][0]*a)+coordinate3[i][1]*b; } float b=cos(0.23); float a=sin(0.23); for(int i=0;i<8;i++)

OnLarge();

this->Invalidate(); }

void CCBod_3DView::OnDUICHeng() //关于X对称 {// TODO: Add your command handler code here

for(int i=0;i<8;i++) {coordinate3[i][2]= -coordinate3[i][2]; } this->Invalidate(); }

void CCBod_3DView::OnZhengzhouce() //轴测投影图 {// TODO: Add your command handler code here

if(flage==false) { flage=true; }

else

{ flage=false;

}

float dian3[8][3];

for(int i=0;i<8;i++)

{

dian3[i][0]=coordinate3[i][0];

dian3[i][1]=coordinate3[i][1];

dian3[i][2]=coordinate3[i][2];

}

float a,b,c;

float angle_a=3.1415/4;

float angle_b=3.1415/6;

for(int j=0;j<8;j++)

{

a=dian3[j][0];

b=dian3[j][1];

c=dian3[j][2];

dian3[j][0]=float ( a*cos(angle_a) -b*sin(angle_a) );

dian3[j][1]=0;

dian3[j][2]= float( -sin(angle_b)*( a*sin(angle_a)+b*cos(angle_a) + c*cos(angle_b) ); }

float canshu=0.7071;

for(int i2=0;i2<8;i2++)

{ dian22[i2].x=float (dian3[i2][0]+float((-dian3[i2][2]*canshu))); dian22[i2].y=float (dian3[i2][1]+float((-dian3[i2][2]*canshu))); }

this->Invalidate();

} )

void CCBod_3DView::OnONEView() //一点透视图象 {

}

五、运行结果:

1.初始化界面。

计算机图形学投影变换

// TODO: Add your command handler code her this->Invalidate(); if(m_toushi==false) { m_toushi=true; }else { m_toushi=false;}

2.沿Z轴旋转的效果

计算机图形学投影变换

3放大效果

计算机图形学投影变换

4 旋转效果

计算机图形学投影变换

5对称

计算机图形学投影变换

6.轴侧投影图

计算机图形学投影变换

7.一点透视

计算机图形学投影变换

更多相关推荐:
计算机图形学实验报告

福建农林大学计算机与信息学院课程名称姓名系专业年级学号指导教师职称实验报告计算机图形学洪世玉计算机计算机科学与技术10级102260010072李小林20xx年11月19日实验项目列表福建农林大学计算机与信息学...

计算机图形学实验(全)

实验1直线的绘制实验目的1通过实验进一步理解和掌握DDA和Bresenham算法2掌握以上算法生成直线段的基本过程3通过编程会在TC环境下完成用DDA或中点算法实现直线段的绘制实验环境计算机TurboC或其他C...

计算机图形学实验报告及代码

第1章概述一教学目标通过本章的学习使学生能够了解计算机图形学的基本概念研究内容当前的发展概况本门课程的特点和应用二教学要求1了解计算机图形学的概念和研究内容2了解本门课程的发展概况三教学内容提要1计算机图形学的...

计算机图形学实验报告

计算机图形学实验报告河南理工大学测绘学院计算机图形学实验报告学号姓名成绩评语交报告日期20xx年6月25日计算机图形学实验报告实验项目一图形学光栅化算法验证实验实验日期20xx年6月5日一实验目的1加强对直线圆...

计算机图形学实验报告

实验报告实验课程:计算机图形学学生姓名:XXXX学号:XXXX专业班级:软件20##年12月25日目录i.实验一矩阵变换ii.实验二图形绘制iii.实验三曲线的生成算法实现iv.实验四二维基本图形生成的算法v.…

计算机图形学实验报告

班级10计科姓名敖智挺学号20xx30457117实验一直线生成与二次曲线拟合实验内容应用Bresenham画线算法实现一程序完成直线生成实验目的了解掌握VC下D图元的扫描转换原理及VC实现掌握图元属性原理及V...

计算机图形学实验报告

计算机图形学实验报告学号20xx2115姓名班级计算机2班指导老师何太军20xx619实验一Windows图形程序设计基础1实验目的1学习理解Win32应用程序设计的基本知识SDK编程2掌握Win32应用程序的...

计算机图形学上机实验-利用C语言图形函数绘图

信息与计算科学专业基础课ComputerGraphicsReportOfcourseexperiment课程实计算机图形学验报告实验题目利用C语言图形函数绘图班级姓名学号指导教师日期西安理工大学理学院应用数学系...

计算机图形学实验报告

华北电力大学科技学院实验报告实验名称课程名称计算机图形学学生姓名号成绩指导教师实验日期专业班级软件学华北电力大学科技学院实验报告第页共页华北电力大学科技学院实验报告第页共页华北电力大学科技学院实验报告第页共页华...

计算机图形学实验03_光照模型

计算机图形学实验报告03北方工业大学计算机图形学课程实验报告题目实验三光照模型学院计算机学院专业数字媒体技术指导教师学生班级学生学号学生姓名教师评定1计算机图形学实验报告03学号班级姓名实验报告3光照模型一实验...

计算机图形学实验报告一

实验一直线圆椭圆的生成算法一实验目的与内容目的利用实验使我对所学的图形生成算法加深印象并且练习书写规范的实验报告格式1了解VC编程环境中常用控件命令和绘图函数掌握处理图形的基本方法2实现直线生成算法数值微分法中...

计算机图形学实验报告2

学号计算机图形学实验报告实验二图形几何变换过程的设计学专指成生业导姓班教名级师绩电子与信息工程系20xx年4月12日天津城市建设学院设计性实验任务书班姓名学号课程名称计算机图形学设计题目图形几何变换过程的设计完...

计算机图形学实验报告(45篇)