当前位置:文档之家› 计算机图形学期末实验报告

计算机图形学期末实验报告

计算机图形学期末实验报告
计算机图形学期末实验报告

附件1:封面格式

得分:

计算机图形学期末考试答卷

姓名:

学号:

一、目标及任务

目标:

1、熟悉OpenGL编程

2、学会平面网格的绘制

3、掌握Opengl的光照和动画实现

任务一:

1、绘制如上图的一个绿色平面网格。网格x的世界坐标取值范围为[-16,16],

y的世界坐标取值范围为[-16,16]。z取值始终为0。

2、该题所绘制的平面网格,用于

模拟地面,需将其整合到后面提高题中的场景中。

任务二:

1.构造三个球体对象,要求启用光照,对象的色彩可以自行发挥想象。

2.三个球体对象,最大的球体A,中间大球体B,最小的球体C。球体A静止不动,

球体B绕球体A旋转,球体C绕球体B旋转,同时也绕球体A旋转(球体C有点类似月球,

它绕地球旋转,同时也绕太阳旋转)。

二、开发环境

操作系统版本:win7

集成开发环境:visua C++ 6.0

三、总的技术思路、技术流程框架图及源代码

任务一:

主要用到的函数:

1、void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);

该函数定义一个视图矩阵,并与当前矩阵相乘。

第一组eyex, eyey,eyez 相机在世界坐标的位置

第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置

第三组upx,upy,upz 相机向上的方向在世界坐标中的方向

2、void glLineStipple( GLint factor, GLushort pattern );

参数pattern:是由1或0组成的16位序列,从这个模式的低位开始,一个一个像素

地进行处理,如果模型中对应的位是1,就绘制这个像素,否则不绘制。

factor:为重复因子,它与1和0的连续子序列相乘,如果模式中出现3个1,并且factor

是2,那么他们就扩展为6个连续的1.

3、glOrtho就是一个正射投影函数。它创建一个平行视景体。实际上这个函数的操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left,bottom,-near),右上角点是(right,top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left,bottom,-far),右上角点是(right,top,-far)。所有的near和far值同时为正或同时为负。如果没有其他变换,正射投影的方向平行于Z轴,且视点朝向Z负轴。这意味着物体在视点前面时far和near都为负值,物体在视点后面时far和near都为正值。

主要用到的技术:

1、正射投影

正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体,如图所示。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。

2、模型视图变换

由于模型和视图的变换都通过矩阵运算来实现,在进行变换前,应先设置当前操作的矩阵为“模型视图矩阵”。设置的方法是以GL_MODELVIEW为参数调用glMatrixMode 函数。在代码中,视图变换必须出现在模型变换之前,但可以在绘图之前的任何时候执行投影变换和视口变换。

display()程序中绘图函数潜在的重复性强调了:在指定的视图变换之前,应该使glLoadIdentity()函数把当前矩阵设置为单位矩阵。

在载入单位矩阵之后,使用gluLookAt()函数指定视图变换。如果程序没有调用gluLookAt(),那么照相机会设定为一个默认的位置和方向。在默认的情况下,照相机位于原点,指向Z轴负方向,朝上向量为(0,1,0)。

一般而言,display()函数包括:视图变换+ 模型变换+ 绘制图形的函数(如glutWireCube())。display()会在窗口被移动或者原来先遮住这个窗口的东西被一开时,被重复调用,并经过适当变换,保证绘制的图形是按照希望的方式进行绘制。

在调用glFrustum()设置投影变换之前,在reshape()函数中有一些准备工作:视口变换+ 投影变换+ 模型视图变换。由于投影变换,视口变换共同决定了场景是如何映射到计算机的屏幕上的,而且它们都与屏幕的宽度,高度密切相关,因此应该放在reshape()中。reshape()会在窗口初次创建,移动或改变时被调用。

OpenGL中矩阵坐标之间的关系:物理坐标*模型视图矩阵*投影矩阵*透视除法*规范化设备坐标——〉窗口坐标

源代码:

#include

void myDisplay(){

glClear(GL_COLOR_BUFFER_BIT);//刷新背景

glMatrixMode(GL_MODELVIEW);//对模型视景矩阵操作

glLoadIdentity(); //加载单位矩阵

gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0);//定义视图矩阵设置照相机位置

for(int i = -16; i < 16; i++){

for (int j = -16; j < 16; j++)

{

glBegin(GL_LINE_LOOP);//绘制线段

glVertex3f(i,j,0);

glVertex3f(i,j+1,0);

glVertex3f(i+1,j+1,0);

glVertex3f(i+1,j,0);

glEnd();

}

}

glFlush();

}

void init(){

glColor3f(1.0, 0.0, 1.0);//网格颜色

glLineStipple(3, 0xcccc);//定义点画模式

glMatrixMode(GL_PROJECTION);//投影矩阵

glLoadIdentity(); //加载单位矩阵

glOrtho(-24, 24, -24, 24, -24, 24);//设置修改空间范围}

void main(int argc, char ** argv){

glutInit(&argc, argv);

glutInitWindowPosition(0, 0);//初始位置

glutInitWindowSize(800, 800);

glutCreateWindow("lines");

glutDisplayFunc(myDisplay);

glEnable(GL_LINE_STIPPLE);//启用直线点画功能

init();

glutMainLoop();//循环绘图

}

运行效果图:

任务二:

主要技术:

1、动画的实现:动画的实现是通过不断修改旋转变换的角度来实现的。并且利用双缓冲技术,在存储器(很有可能是显存)中开辟两块区域,一块作为发送到显示器的数据,一块作为绘画的区域,在适当的时候交换它们,只要在绘制完成时简单的调用glutS函数把绘制好的信息用于屏幕显示就可以了。在每次调用显示回调函数之前改变角度参数的值,使天体看起来像在旋转。其中,angle1为地球绕太阳旋转的角度,angle2为月亮绕地球旋转的角度,月亮绕地球旋转速度是地球绕太阳旋转速度的12倍,设置angle1每次增加20.0f度,angle2每次增加2.0f度。

2、深度测试:深度测试决定了是否绘制较远的象素点(或较近的象素点),通常选用较近的,而较远优先能实现透视的效果。深度测试只需要调用函数:glEnable(GL_DEPTH_TEST);就可以打开深度测试功能。另外,在创建窗口时指定其具有深度缓冲区,深度缓存的位数是衡量深度缓存精度的参数。深度缓存位数越高,则精确度越高,在每次渲染场景时,消除深度缓冲区即可。

3、光照:简单的光照效果的,我们通过光照的层次,很容易的认为它是一个三维的物体

眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛。人类对于光线强弱的变化的反应,比对于颜色变化的反应来得灵敏。因此对于人类而言,光线很大程度上表现了物体的立体感。OpenGL在处理光照时采用这样一种近似:把光照系统分为三部分,分别是光源、材质和光照环境。光源就是光的来源,可以是前面所说的太阳或者电灯等。材质是指接受光照的各种物体的表面,由于物体如何反射光线只由物体表面决定(OpenGL中没有考虑光的折射),材质特点就决定了物体反射光线的特点。光照环境是指一些额外的参数,它们将影响最终的光照画面,比如一些光线经过多次反射后,已经无法分清它究竟是由哪个光源发出,这时,指定一个“环境亮度”参数,可以使最后形成的画面更接近于真实情况。对于光源发出的光线,可以分别设置其经过镜面反射和漫反射后的光线强度。对于被光线照射的材质,也可以分别设置光线经过镜面反射和漫反射后的光线强度。这些因素综合起来,就形成了最终的光照效果。根据光的反射定律,由光的入射方向和入射点的法线就可以得到光的出射方向。因此,对于指定的物体,在指定了光源后,即可计算出光的反射方向,进而计算出光照效果的画面。本作业中使用了2个光源,一个在太阳中心light0,照亮地球和月亮;另一个光源light1只照亮太阳,在画太阳之前打开,画完之后使用函数glDisable(GL_LIGHT1);关闭light1。

4、表面材质:材质与光源相似,也需要设置众多的属性。不同的是,光源是通过glLight*函数来设置的,而材质则是通过glMaterial*函数来设置的。glMaterial*函数有三个参数。第一个参数表示指定哪一面的属性。可以是GL_FRONT、GL_BACK或者

GL_FRONT_AND_BACK。分别表示设置“正面”“背面”的材质,或者两面同时设置。第二、第三个参数与glLight*函数的第二、三个参数作用类似。本作业中只用到了材质的发射光颜色,太阳、地球、月亮分别为红色、蓝色和黄色,如设置太阳

glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,sun_emission);

技术流程图:

源代码:

#include

#include

void Initial()

{

GLfloat light0_diffuse[]={1.0f,0.5f,0.0f,1.0f};//light0中漫反射光分量

GLfloat light0_position[]={10.0f,20.0f,-150.0f,1.0f};//light0的坐标位置

GLfloat light0_direction[]={0.0f,0.0f,-1.0f};//light0的聚光灯方向角

glLightfv(GL_LIGHT0,GL_DIFFUSE,light0_diffuse);//light0在太阳中心

glLightfv(GL_LIGHT0,GL_POSITION,light0_position);

glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,light0_direction);

glEnable(GL_DEPTH_TEST);// 启用深度测试

glEnable(GL_LIGHTING);// 启用光源

glEnable(GL_LIGHT0);// 使用0号光照

glEnable(GL_COLOR_MATERIAL);//启用颜色材质模式

glFrontFace(GL_CCW);// 指定逆时针绕法表示多边形正面

}

void ChangeSize(int w, int h)

{

if(h==0)h=1;

glViewport(0,0,w,h);// 设置视区尺寸

glMatrixMode(GL_PROJECTION);//指定当前操作投影矩阵堆栈

glLoadIdentity();//重置投影矩阵

gluPerspective(35.0,(float)w/(float)h,1.0,500.0);//指定透视投影的观察空间

glMatrixMode(GL_MODELVIEW);//投影矩阵

glLoadIdentity(); //加载单位矩阵

}

void Display(void)

{

static float angle1=0.0f,angle2=0.0f;

//angle1地球绕太阳旋转的角度,angle2月亮绕地球旋转的角度

GLfloat sun_emission[]={0.6f,0.0f,0.0f,1.0f};//太阳颜色

GLfloat earth_emission[]={0.0f,0.0f,0.8f,1.0f};//地球颜色

GLfloat moon_emission[]={0.98f,0.625f,0.12f,1.0f};//月亮颜色

GLfloat light1_diffuse[]={0.5f,0.8f,0.0f,1.0f};//光源light1中漫反射光分量

GLfloat light1_position[]={50.0f,100.0f,100.0f,1.0f};//光源light1的坐标位置

GLfloat light1_direction[]={0.0f,0.0f,-1.0f};//光源light1的聚光灯方向角

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色和深度缓冲区

glMatrixMode(GL_MODELVIEW);//指定当前操作模型视图矩阵堆栈

glLoadIdentity();//重置模型视图矩阵

glTranslatef(0.0f,0.0f,-150.0f);//将图形沿z轴负向移动150.0f

//绘制太阳

glEnable(GL_LIGHT1);

glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);

glLightfv(GL_LIGHT1,GL_POSITION,light1_position);

glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,light1_direction);

glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,sun_emission);

glutSolidSphere(12.0f,30,30);//绘制太阳

glDisable(GL_LIGHT1);

//绘制地球

glPushMatrix();//保存当前的矩阵视图模型

glRotatef(angle1,0.0f,10.0f,1.0f);//旋转一定角度

glTranslatef(40.0f,0.0f,0.0f);//绕x轴正向移动40.0f

glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,earth_emission);

glutSolidSphere(6.0f,20,20);//绘制地球

//绘制月亮

glRotatef(angle2,0.0f,1.0f,0.0f);

glTranslatef(15.0f,0.0f,0.0f);//绕x轴方向移动15.0f

glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,moon_emission);

glutSolidSphere(3.0f,20,20);//绘制月亮

glPopMatrix();//恢复矩阵视图模型

angle1+=2.0f;//增加旋转步长,产生动画效果

if(angle1==360.0f)

angle1=0.0f;

angle2+=20.0f;

if(angle2==360.0f)

angle2=0.0f;

glutS();//双缓冲下使用该函数交换两个缓冲区的内容

}

void TimerFunc(int x)

{

glutPostRedisplay();//重绘图像

glutTimerFunc(100,TimerFunc,1);//定时

}

int main(int argc, char* argv[])

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

//设置图形显示模式为双缓冲,深度缓冲,建立RGB模式窗口

glutInitWindowSize(640,480);

glutInitWindowPosition(400,200);

glutCreateWindow("太阳地球月亮");

glutReshapeFunc(ChangeSize);

glutDisplayFunc(Display);

glutTimerFunc(500,TimerFunc,1);

Initial();

glutMainLoop();

return 0;

}

运行效果图:

四、心得

在本学期的计算机图形学学习中,不仅让我学习到了很多图形学知识,期末的作业更培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。学习计算机图形学不能停留在学习它的程序语言,而是利用学到的知识编写C语言程序来验证自己的想法,深入理解图形生成的原理,解决实际问题。而且计算机图形学是依附在C 语言编程基础之上的,我们对图形生成算法的理解要通过C程序才能体现出来。通过本学期对计算机图形学这门课的学习,使我们巩固了一些关于C语言的知识,理解了我们计算机图形学的理论知识,这对我们将来到社会工作将会有莫大的帮助。同时它让我知道计算机图形的强大和瑰丽之处,虽然我们学的都是基本的生成算法,但是通过老师展示的几个计算机图形学高级程序,我们才了解到计算机图形学可以做出非常华丽的视觉效果,而且只要你努力,任何东西都不会太难。

最后,还是很庆幸能学到计算机图形学这样的一门课程,在学习本课程的同时,已经涉及了很多的学科,让我们更有能力成为全方位、多特色的新世纪人才。使我们的编程能力、思维能力都获得了提高。

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

计算机图形学实验一

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++。 2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。 3.实现生成直线的DDA算法、中点算法和Bresenham算法。 4.实现圆弧生成的中点算法。 5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。 6.实现一般连通区域的基于扫描线的种子填充算法。 7.将生成算法以菜单或按钮形式集成到用户界面上。 8.直线与圆的坐标参数可以用鼠标或键盘输入。 6. 可以实现任何情形的直线和圆的生成。 实验报告 1.用户界面的设计思想和框图。 2.各种实现算法的算法思想。 3.算法验证例子。 4.上交源程序。 直线生成程序设计的步骤如下: 为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。 图1-1 基本图形生成的程序运行界面 2.创建工程名称为“基本图形的生成”单文档应用程序框架 (1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。 (2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。 (3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。 (4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。

计算机图形学基础期末考试试题

一、填空题 1.将多边形外部一点A与某一点B用线段连接,若此线段与多边形边界相交的次数为??????????,则点B在多边形外部。若此线段与多边形边界相交的次数为??????????,则点B在多边形内部。 2.生成直线的四点要求是_______________________,____________________________,____________________________________,速度要快。 3.由5个控制顶点Pi(i=0,1,…4)所决定的3次B样条曲线,由??????????段3次B样条曲线段光滑连接而成。 4.用于减少或克服在“光栅图形显示器上绘制直线、多边形等连续图形时,由离散量表示连续量引起的失真”的技术叫??????????。 5.图形的数学表示法一般有??????????,??????????,??????????。 1.一个交互性的计算机图形系统应具有、、、、 输入等五方面的功能。 2.阴极射线管从结构上可以分为、和。 3.常用的图形绘制设备有和,其中支持矢量格式。 4.PHIGS和GKS将各种图形输入设备从逻辑上分为六种:定位设备、笔划设 备、、、和。 5.通常可以采用和处理线宽。 6.齐次坐标表示就是用维向量表示n维向量。 7.平行投影根据可以分为投影和投影。 8.一个交互式计算机图形处理系统包括图形软件和_____________,图形软件又分为 _____________、_____________和三部分。 9.构成图形的要素包括和,在计算机中通常用采用两种方法来表示 图形,他们是和。 10.荫罩式彩色显像管的结构包括、、和。 11.目前常用的PC图形显示子系统主要由3个部件组成:、和一 个ROM BIOS芯片。 12.在交互输入过程中,图形系统中有_____________、、和其组 合形式等几种输入(控制)模式。 13.填充一个特定区域,其属性选择包括、和。 14.计算机中表示带有颜色及形状信息的图和形常用和参数法,其中用参数法描 述的图形称为,用描述的图形称为。 15.在显示技术中,我们常常采用提高总的光强等级。 16.常用的交互式绘图技术有、、和。

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

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

计算机图形学实验内容汇总

计算机图形学实验 肖加清

实验一图形学实验基础 一、实验目的 (1)掌握VC++绘图的一般步骤; (2)掌握OpenGL软件包的安装方法; (3)掌握OpenGL绘图的一般步骤; (4)掌握OpenGL的主要功能与基本语法。 二、实验内容 1、VC++绘图实验 (1)实验内容:以下是绘制金刚石图案。已给出VC++参考程序,但里面有部分错误,请改正,实现以下图案。 N=3 N=4

N=5 N=10 N=30

N=50 (2)参考程序 //自定义的一个类 //此代码可以放在视图类的实现文件(.cpp) 里class CP2 { public: CP2(); virtual ~CP2(); CP2(double,double); double x; double y; }; CP2::CP2() { this->x=0.0; this->y=0.0; } CP2::~CP2() { } CP2::CP2(double x0,double y0) { this->x=x0; this->y=y0; }

//视图类的一个成员函数,这个成员函数可以放在OnDraw函数里调用。 //在视图类的头文件(.h)里定义此函数 void Diamond(); //在视图类的实现文件(.cpp)里实现此函数 void CTestView::Diamond() { CP2 *P; int N; double R; R=300; N=10; P=new CP2[N]; CClientDC dc(this); CRect Rect; GetClientRect(&Rect); double theta; theta=2*PI/N; for(int i=0;i #include #include #include //定义输出窗口的大小 #define WINDOW_HEIGHT 300

计算机图形学期末考试试卷D卷

计算机图形学期末考试 试卷D卷 文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-

计算机图形学期末考试试卷(D 卷 ) 一、 填空题(每空1分,共10分) 1. 图形的表示方法有两种: 和 。 2. 目前常用的两个事实图形软件标准是OpenGL 和 。 3. 多边形有两种表示方法: 和点阵表示法。 4. 二维图形基本几何变换包括平移、 、 等变换。 5. 投影可以分为 投影和 投影。 6. 描述一个物体需要描述其几何信息和 。 7. 在Z 缓冲器消隐算法中Z 缓冲器每个单元存储的信息是每一个像素点 的 。 二、 判断题(每小题1分,共10分,对的画√,错的画×) 1. 由三个顶点可以决定一段二次B 样条曲线,若三顶点共线时则所得到的 曲线褪化为一条直线段。( ) 2. DDA (微分方程法)是Bresenham 算法的改进。( ) 3. 插值得到的函数严格经过所给定的数据点,逼近是在某种意义上的最佳 近似。( ) 4. 齐次坐标提供了坐标系变换的有效方法,但仍然无法表示无穷远的点。 ( ) 5. 若相对于某点进行比例、旋转变换,首先需要将坐标原点平移至该点, 在新的坐标系下做比例或者旋转变换,然后将原点平移回去。( ) 6. Phong 算法的计算量要比Gouraud 算法小得多。 ( ) 7. 将某二维图形整体放大2倍,其变换矩阵可写为?? ?? ? ?????200010001。( ) 8. 在种子填充算法中所提到的八连通区域算法同时可填充四连通区域。 ( ) 9. 边缘填充算法中是将扫描线与多边形交点左方的所有像素取补。( )

安徽中医学院 计算机图形学试卷

安徽中医学院2010~2011学年第二学期《计算机图形学》课程 期末考试试卷 命题教师: 沈同平 试卷编号:H0602 审核人: 王世好 适用专业 计算机科学与技术 考试班级 08医软 考生姓名 学号 班级 一、选择题(每小题1分,共20分) 1.计算机图形学与计算机图像处理的关系是( ) A 、计算机图形学是基础,计算机图像处理是其发展 B 、不同的学科,研究对象和数学基础不同,但它们之间也有可转换部分 C 、同一学科在不同场合的不同称呼而已 D 、完全不同的学科,两者毫不相干 2.下列不属于计算机图形学的应用的是( ) A 、计算机辅助绘图及设计 B 、事务管理中的交互式绘图 C 、科学计算可视化 D 、人工智能 3.下列不属于计算机图形软件国际标准的是( ) A 、GKS B 、PHIGS C 、国标码 D 、 IGES 4.计算机图形显示器一般使用什么颜色模型 ( ) A 、 RG B B 、 CMY C 、 HSV D 、 HLS 5.分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存 ( ) A 、512K B B 、1MB C 、2MB D 、3MB ; 6.触摸屏是( )设备. A 、输入 B 、输出 C 、输入输出 D 、既不是输入也不是输出 7.下述用数值微分法(DDA)画斜率的绝对值小于1的直线的C 语言子程序中哪一 行有错 ( ) Void drawLineWithDDA (int x1, int y1, int x2, int y2, int color) { A 、int x, y; B 、float k = (float)(y2-y1)/(x2-x1); C 、for(x=x1,y=y1;x<=x2;x++) { drawPixel(x,y,color);

计算机图形学实验报告

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握DDA直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。 二、【实验内容】 1.利用DDA的算法原理,编程实现对直线的扫描转换。 2.加强对DDA算法的理解和掌握。 三、【测试数据及其结果】 四、【实验源代码】 #include

#include #include #include GLsizei winWidth=500; GLsizei winHeight=500; void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } void DDALine(int x0,int y0,int x1,int y1) { glColor3f(1.0,0.0,0.0); int dx,dy,epsl,k; float 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/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glV ertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre; y+=yIncre; } } void Display(void) { glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush(); }

计算机图形学期末考试题库

一、单项选择题 1. 计算机图形显示器一般使用什么颜色模型?(B) A)RGB;B) CMY;C) H SV ;D) HLS 2. 哪一个不是国际标准化组织( ISO)批准的图形标准?(D) A)GKS;B) PHIGS;C) C GM ;D) DXF 3.下述用数值微分法(DDA画斜率的绝对值小于1的直线的C语言子程序中哪一行有错? (A) Void drawLineWithDDA(int x1, int y1, int x2, int y2, int color) { A) int x, y; B ) float k = (float)(y2-y1)(x2-x1); C ) for(x=x1,y=y1;x<=x2;x++) { drawPixel(x,y,color); } D ) y+=k; } } 4. 下述绕坐标原点旋转a 角的坐标变换矩阵中哪一项是错误的?(B) | A B | | C D | A) cos a; B)sin a; C)sin a; D)cos a 5. 下述哪一条边不是非均匀有理B样条(NURBS的优点?(D) B)对于间距不等的数据点,用NURBS以合的曲线比用均匀B样条拟合的曲线更光滑 C)NURB醍供的权控制方法比用控制点更能有效的控制曲线的形状 D)使用NURB呦以提高对曲面的显示效率 A) NURBSL均匀B样条能表示更多的曲面

6. 透视投影中主灭点最多可以有几个?(D) A)0; B)1; C)2; D)3 7. 在用扫描线法进行点与多边形之间的包含性检测时,下述哪一个操作不正确?(D) A)当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数0次 B)当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数2次 C)当射线与多边形交于某顶点时且该点的两个邻边在射线的两侧时,计数1次 D)当射线与多边形的某边重合时,计数1次 &在简单光反射模型中,由物体表面上点反射到视点的光强下述哪几项之和?(C)(1)环境光的反射光强;(2)理想漫反射光强;(3)镜面反射光强;(4)物体间的反射光强。 A(1)和(2) B)(1)和(3) C)(1)(2)和(3) D)(1)(2 )(3 )和(4 ) 9. 下面关于NURBS的论述,哪个是错误的? ( B) A. 可通过控制顶点和权因子来改变形状; B. 仅具有仿射不变性,但不具有透射不变性; C. 非有理B样条、有理及非有理Bezier曲线、曲面是NURBS的特例; D. 可表示标准解析形状和自由曲线、曲面; 10. 下述关于Bezier 曲线P1(t), P2(t)t [0,1]的论述,哪个是错误的?() A. P1(1)= P2(0) = P,在P处P1(1), P2(0)的切矢量方向相同,大小相等, 则 P1(t), P2(t)在P处具有G1连续;

计算机图形学实验三报告

计算机科学与通信工程学院 实验报告 课程计算机图形学 实验题目二维图形变换 学生姓名 学号 专业班级 指导教师 日期

成绩评定表

二维图形变换 1. 实验内容 完成对北极星图案的缩放、平移、旋转、对称等二维变换。 提示:首先要建好图示的北极星图案的数据模型(顶点表、边表)。另外,可重复调用“清屏”和“暂停”等函数,使整个变换过程具有动态效果。 2. 实验环境 软硬件运行环境:Windows XP 开发工具:visual studio 2008 3. 问题分析

4. 算法设计 程序框架: //DiamondView.h class CDiamondView : public CView { …… public: //参数输入和提示对话框 void Polaris();//北极星 …… }; //DiamondView.cpp void CDiamondView::OnMenuDiamond() { IsCutting = FALSE; if(dlgDiamond.DoModal()==IDOK) DrawDiamond(dlgDiamond.m_nVertex,dlgDiamond.

m_nRadius,100);//调用绘制金刚石的函数 } //北极星 void CDiamondView::Polaris() {......} 5. 源代码 //北极星 void hzbjx(CDC* pDC,long x[18],long y[18]) { CPen newPen1,*oldPen; newPen1.CreatePen(PS_SOLID,2,RGB(255,0,0)); oldPen = pDC->SelectObject(&newPen1); POINT vertex1[11]={{x[1],y[1]},{x[2],y[2]},{x[3],y[3]},{x[4],y[4]},{x[5],y[5]},{x[3],y[3]},{x[1],y[1]}, {x[6],y[6]},{x[3],y[3]},{x[7],y[7]},{x[5],y[5]}}; pDC->Polyline(vertex1, 11); newPen1.DeleteObject(); newPen1.CreatePen(PS_SOLID, 2, RGB(0,255,0)); oldPen = pDC->SelectObject(&newPen1); POINT vertex2[5]={{x[6],y[6]},{x[8],y[8]},{x[9],y[9]},{x[3],y[3]},{x[8],y[8]}}; pDC->Polyline(vertex2, 5); POINT vertex3[5]={{x[4],y[4]},{x[10],y[10]},{x[11],y[11]},{x[3],y[3]},{x[10],y[10]}}; pDC->Polyline(vertex3, 5);

最新计算机图形学期末考试试卷

最新计算机图形学期末考试试卷 一、判断题(本大题共 10 小题,每小题 1 分,共 10 分) 1. 计算机图形生成的基本单位是线段. ( F ) 2. 构成图形的要素除了点、线、面、体等几何要素外,还应该包括灰度、色彩、线型、 线宽等非几何要素. ( N ) 3. 在齐次坐标系中,若用矩阵来表示各种运算,则比例和旋转变换是矩阵F 乘法运算, 而平移变换是矩阵加法运算. ( F ) 4. Z-Buffer 消隐算法有利于硬件实现,并且不需要排序. ( N ) 5. 二次Bezier 曲线和二次B 样条曲线都通过控制多边形的首末端点. ( F ) 6. 一个向量的齐次坐标的表示形式是唯一的. ( F ) 7. 计算机图形技术是随着图形硬件设备的发展而发展起来的. ( N ) 8. Phong 算法的计算量要比Gouraud 算法小得多. ( F ) 9. 将某二维图形整体放大2倍,其变换矩阵可写为. ( F ) 10. 图形软件标准是为提高图形软件的易用性而提出的. ( F ) 二、填空题(本大题共 10 空,每空 1 分,共 10 分) 1. 在多边形填充过程中,常采用、 左闭右开 和 下闭上开 的原则 对边界像素进行处理. 2. 基本几何变换指 平移 、 比例 和 旋转 三种变换. 3. 屏幕上最小的发光单元叫作 像素 ,它的多少叫做 分辨率 . 4. ISO 批准的第一个图形软件标准是 GKS ,进入20世纪90年代后,存 在的事实上的图形软件标准主要是 OpenGL 和 Direct x . ?? ?? ? ?????200010001

5.图形的表示方法有两种:参数法和点阵法. 6.多边形的表示方法有顶点表示法和点阵表示法两种. 7.计算机三维模型的描述有线框模型、表面模型和实体 模型. 8.颜色包含3个要素:色调、饱和度和亮度 . 三、简答题(本大题共5 小题,每小题5 分,共25 分) 1.计算机图形学研究的主要内容是什么? 2.什么是齐次坐标?齐次空间点 P(X、Y、W) 对应的笛卡尔坐标是什么? 3.帧缓存的容量与什么有关?假定一个光栅扫描系统,分辨率800×600,要求可显示颜色256种,请问帧缓存的容量需要多少字节? 4.什么是走样?什么是反走样?常用的反走样技术有哪些? 5.简单光照模型的反射光由哪几部分组成,光照计算时有哪两种明暗处理技术?

计算机图形学期末考试试卷

计算机图形学期末考试试卷(C卷) 一、判断题(本大题共 10 小题,每小题 1 分,共 10 分) 1.计算机图形生成的基本单位是线段。 ( F ) 2.构成图形的要素除了点、线、面、体等几何要素外,还应该包括 灰度、色彩、线型、线宽等非几何要素。 ( N ) 3.在齐次坐标系中,若用矩阵来表示各种运算,则比例和旋转变换 是矩阵F乘法运算,而平移变换是矩阵加法运算。 ( F ) 4.Z-Buffer消隐算法有利于硬件实现,并且不需要排序。 ( N ) 5.二次Bezier曲线和二次B样条曲线都通过控制多边形的首末端 点。 ( F ) 6.一个向量的齐次坐标的表示形式是唯一的。 ( F ) 7.计算机图形技术是随着图形硬件设备的发展而发展起来的。 ( N ) 8.Phong算法的计算量要比Gouraud算法小得多。

( F ) 9. 将某二维图形整体放大2倍,其变换矩阵可写为。 ( F ) 10. 图形软件标准是为提高图形软件的易用性而提出的。 ( F ) 二、填空题(本大题共 10 空,每空 1 分, 共 10 分) 1. 在多边形填充过程中,常采用、 左闭右开 和 下闭上开 的原则对边界像素进行处理。 2. 基本几何变换指 平移 、 比例 和 旋转 三种变换。 3. 屏幕上最小的发光单元叫作 像素 ,它的多少叫做 分辨率 。 ??????????200010001

4.ISO批准的第一个图形软件标准是GKS ,进入20 世纪90年代后,存在的事实上的图形软件标准主要是 OpenGL 和Direct x。 5.图形的表示方法有两种:参数法和点阵 法。 6.多边形的表示方法有顶点表示法和点阵表 示法两种。 7.计算机三维模型的描述有线框模型、表面模 型和实体模型。 8.颜色包含3个要素:色调、饱和度和 亮度。 三、简答题(本大题共 5 小题,每小题 5 分,共 25 分) 1.计算机图形学研究的主要内容是什么 2.什么是齐次坐标齐次空间点 P(X、Y、W) 对应的笛卡尔坐标

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号:20112497 班级:计算机科学与技术11-2班实验地点:逸夫楼507 实验时间:2014.03

实验1直线的生成 1实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析 实验数据的能力; 编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的 直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记 录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编 制成表格,并绘制折线图比较两种算法的性能。 2实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One(自制平台)。 本实验提供名为 Experiment_Frame_One的平台,该平台提供基本 绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham 算法,并进行分析。 ?平台界面:如错误!未找到引用源。所示 ?设置:通过view->setting菜单进入,如错误!未找到引 用源。所示 ?输入:通过view->input…菜单进入.如错误!未找到引用 源。所示 ?实现算法: ◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) Mid_Bresenham法:void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

3实验结果 3.1程序流程图 1)DDA算法流程图:开始 定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增 量xIncre,y增量yIncre ↓ 输入两点坐标x1,y1,x0,y0 ↓ dx=x1-x0,dy=y1-y0; _________↓_________ ↓↓ 若|dx|>|dy| 反之 epsl=|dx| epsl=|dy| ↓________...________↓ ↓ xIncre=dx/epsl; yIncre=dy/epsl ↓ 填充(强制整形)(x+0.5,y+0.5); ↓←←←← 横坐标x+xIncre; 纵坐标y+yIncre; ↓↑ 若k<=epsl →→→k++ ↓ 结束 2)Mid_Bresenham算法流程图开始 ↓ 定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y ↓ 输入x0,y0,x1,y1 ______↓______ ↓↓ 若x0>x1 反之 x=x1;x1=x0;x0=x; x=x0;

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float 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/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

2015年计算机图形学期末复习题(学生版)

期末复习题 一.填空题 1.X扫描线算法中,每次用一条扫描线进行填充,对一条扫描线填充的过程可分为4个步骤:求交、排序、交点配对、区域填色。 2.一组型值点来指定曲线曲面的形状时,形状完全通过给定的型值点列,用该方法得到的曲线曲面称为曲线曲面的拟和,而用控制点列来指定曲线曲面 的形状时,得到的曲线曲面不一定通过控制点列,该方法称为曲线曲面 的逼近。 3.在中点画线算法中(假设直线的斜率00,下一个点取_____________,d的增量表达式为_____________;若d<0,下一个点取_____________,d的增量表达式为_____________。 4.种子填充算法的填充区域可以分为_________连通区域和____________连通区域。 5、在生成圆弧的正负法中,设圆的方程为 F(x,y)=X2+Y2-R2=0;假设求得 Pi 的 坐标为(xi,yi);则若F(xi,yi)<0,下一个点取_____________;若 F(xi,yi)>0, 下一个点取_____________。 6、在Cohen-Sutherland线段裁剪算法中,假设线段P1P2的编码分别为 CODE1、 CODE2,则若_____________成立,表示线段 P1P2 是显然可见线段;若 _____________成立,表示线段P1P2是显然不可见线段。 7.常用的直线扫描转换算法有:_____________,_______________, _______________。 8.曲线和曲面的基本表示方法有两种:______________,______________。参数表 示,非参数表示。 9.反走样的目的是_______________________________________________。

计算机图形学期末考试试卷D卷

计算机图形学期末考试试卷(D 卷) 一、 填空题(每空1分,共10分) 1. 图形的表示方法有两种: 和 。 2. 目前常用的两个事实图形软件标准是OpenGL 和 。 3. 多边形有两种表示方法: 和点阵表示法。 4. 二维图形基本几何变换包括平移、 、 等变换。 5. 投影可以分为 投影和 投影。 6. 描述一个物体需要描述其几何信息和 。 7. 在Z 缓冲器消隐算法中Z 缓冲器每个单元存储的信息是每一个像素点的 。 二、 判断题(每小题1分,共10分,对的画√,错的画×) 1. 由三个顶点可以决定一段二次B 样条曲线,若三顶点共线时则所得到的曲线褪化为一条直线段。( ) 2. DDA (微分方程法)是Bresenham 算法的改进。( ) 3. 插值得到的函数严格经过所给定的数据点,逼近是在某种意义上的最佳近似。( ) 4. 齐次坐标提供了坐标系变换的有效方法,但仍然无法表示无穷远的点。( ) 5. 若相对于某点进行比例、旋转变换,首先需要将坐标原点平移至该点,在新的坐标系下做比例或者旋转变换,然后将原点平移回去。( ) 6. Phong 算法的计算量要比Gouraud 算法小得多。 ( ) 7. 将某二维图形整体放大2倍,其变换矩阵可写为???? ??????200010001。( ) 8. 在种子填充算法中所提到的八连通区域算法同时可填充四连通区域。( ) 9. 边缘填充算法中是将扫描线与多边形交点左方的所有像素取补。( ) 10. 计算机图形技术是随着图形硬件设备的发展而发展起来的。( ) 三、 选择题(每小题1分,共10分) 1.在图形变换中引入齐次坐标的目的是 。 A )便于实现缩放变换 B) 统一表示几种基本变换,便于计算 C )便于实现错切变换 D )无特殊目的,一直沿用而已 2. 透视投影中主灭点最多可以有几个? A ) 0 B )1 C )2 D )3 3. 在简单光照模型中,由物体表面上的点反射到视点的光强是下述哪几项之和? ①环境光的反射光强 ②理想漫反射光强 ③镜面反射光强 ④物体间的反射光强。

计算机图形学实验一_画直线

大学实验报告 学院:计算机科学与技术专业:计算机科学与技术班级:计科131

如果 d<0,则M在理想直线下方,选右上方P1点; 如果 d=0,则M在理想直线上,选P1/ P2点。 由于d是xi和yi的线性函数,可采用增量计算提高运算效率。 1.如由pi点确定在是正右方P2点(d>0).,则新的中点M仅在x方向加1,新的d值为: d new=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c 而 d old=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c d new=d old+a= d old-dy 2.如由pi点确定是右上方P1点(d<0),则新的中点M在x和y方向都增加1,新的d值为 d new=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c 而 d old=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c d new=d old+a+b= d old-dy+dx 在每一步中,根据前一次第二迭中计算出的d值的符号,在正右方和右上方的两个点中进行选择。d的初始值: d0=F(x0+1,y0+0.5)=F(x0,y0)+a+b/2=a+b/2=-dy+dx/2 F(x0,y0)=0,(x0,y0)在直线上。 为了消除d的分数,重新定义 F(x,y)=2(ax+by+c) 则每一步需要计算的d new 是简单的整数加法 dy=y1-y0,dx=x1-x0 d0=-2dy+dx d new=d old-2*dy,当 d old>=0 d new=d old-2(dy-dx),当d old<0 Bresenham画线算法 算法原理: 与DDA算法 相似,Bresenham 画线算法也要在 每列象素中找到 与理想直线最逼 近的象素点。 根据直线的 斜率来确定变量 在x或y方向递 增一个单位。另 一个方向y或x

计算机图形学期末考试试卷

计算机图形学期末考试试卷(C 卷) 一、判断题(本大题共 10 小题,每小题 1 分,共 10 分) 1. 计算机图形生成的基本单位是线段。 ( F ) 2. 构成图形的要素除了点、线、面、体等几何要素外,还应该包括灰度、色彩、线型、 线宽等非几何要素。 ( N ) 3. 在齐次坐标系中,若用矩阵来表示各种运算,则比例和旋转变换是矩阵F 乘法运算, 而平移变换是矩阵加法运算。 ( F ) 4. Z-Buffer 消隐算法有利于硬件实现,并且不需要排序。 ( N ) 5. 二次Bezier 曲线和二次B 样条曲线都通过控制多边形的首末端点。 ( F ) 6. 一个向量的齐次坐标的表示形式是唯一的。 ( F ) 7. 计算机图形技术是随着图形硬件设备的发展而发展起来的。 ( N ) 8. Phong 算法的计算量要比Gouraud 算法小得多。 ( F ) 9. 将某二维图形整体放大2倍,其变换矩阵可写为。 ( F ) 10. 图形软件标准是为提高图形软件的易用性而提出的。 ( F ) 二、填空题(本大题共 10 空,每空 1 分,共 10 分) 1. 在多边形填充过程中,常采用、 左闭右开 和 下闭上开 的原则 对边界像素进行处理。 2. 基本几何变换指 平移 、 比例 和 旋转 三种变换。 3. 屏幕上最小的发光单元叫作 像素 ,它的多少叫做 分辨率 。 4. ISO 批准的第一个图形软件标准是 GKS ,进入20世纪90年代后,存 在的事实上的图形软件标准主要是 OpenGL 和 Direct x 。 ??????????200010001

5.图形的表示方法有两种:参数法和点阵法。 6.多边形的表示方法有顶点表示法和点阵表示法两种。 7.计算机三维模型的描述有线框模型、表面模型和实体 模型。 8.颜色包含3个要素:色调、饱和度和亮度。 三、简答题(本大题共5 小题,每小题5 分,共25 分) 1.计算机图形学研究的主要内容是什么? 2.什么是齐次坐标?齐次空间点 P(X、Y、W) 对应的笛卡尔坐标是什么? 3.帧缓存的容量与什么有关?假定一个光栅扫描系统,分辨率800×600,要求可显示颜色256种,请问帧缓存的容量需要多少字节? 4.什么是走样?什么是反走样?常用的反走样技术有哪些? 5.简单光照模型的反射光由哪几部分组成,光照计算时有哪两种明暗处理技术?

计算机图形学实验报告

计算机图形学 实验报告 学号:20072115 姓名: 班级:计算机 2班 指导老师:何太军 2010.6.19

实验一、Windows 图形程序设计基础 1、实验目的 1)学习理解Win32 应用程序设计的基本知识(SDK 编程); 2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。 4)学习MFC 类库的概念与结构; 5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框); 6)学习使用MFC 的图形编程。 2、实验内容 1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。(可选任务) 2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示"Hello,This is my first SDI Application"。(必选任务) 3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。 3、实验过程

1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档; 2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,This is my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制; 3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。 4、实验结果 正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。成功地完成了实验。 结果截图: 5、实验体会 通过实验一,了解了如用使用基本的SDI编程函数绘制简单的图

相关主题
文本预览
相关文档 最新文档