1、什么叫走样?什么叫反走样技术?
答:各种光栅化算法,如非水平亦非垂直的直线或多边形边界进行扫描转换时,或多或少会产生锯齿或阶梯状,我们把这种用离散量表示连续量引起的失真称为走样,走样是数字化发展的必然产物,所谓反走样技术,就是减缓或者消除走样效果的技术。
2、考虑三个不同的光栅系统,分辨率依次为,640*480,1280*1024,2560*2048, 欲存储每个像素12位,这些系统各需要多大的帧缓冲器(字节数)?
答:640*480需要的帧缓存为640*480*12/8=450KB, 1280*1024需要的帧缓存为1280*1024*12/8=1920KB, 2560*2048
需
要
的
帧
缓
存
为
2560*2048*12/8=7680KB。
3、当光驱照射到非透明体表面上时,产生光的反射效果,其反射光仅由哪三部分组成?
答:由漫反射光,环境光和镜面反射光三部分组成。 4、举3个例子说明计算机图形学的应用。 答:①事务管理中的交互绘图
应用图形学最多的领域之一是绘制事务管理中的各种图形。通过从简明的形式呈现出数据的模型和趋势以增加对复杂现象的理解,并促使决策的制定。 ②地理信息系统
地理信息系统是建立在地理图形基础上的信息管理系统。利用计算机图形生成技术可以绘制地理的、地质的以及其它自然现象的高精度勘探、测量图形。 ③计算机动画
用图形学的方法产生动画片,其形象逼真、生动,轻而易举地解决了人工绘图时难以解决的问题,大大提高了工作效率。
5、计算机生成图形的方法有哪些?
答:计算机生成图形的方法有两种:矢量法和描点法。 ①矢量法:在显示屏上先给定一系列坐标点,然后控制电子束在屏幕上按一定的顺序扫描,逐个“点亮”临近两点间的短矢量,从而得到一条近似的曲线。尽管显示器产生的只是一些短直线的线段,但当直线段很短时,连成的曲线看起来还是光滑的。
②描点法:把显示屏幕分成有限个可发亮的离散点,每个离散点叫做一个像素,屏幕上由像素点组成的阵列称为光栅,曲线的绘制过程就是将该曲线在光栅上经过的那些像素点串接起来,使它们发亮,所显示的每一曲线都是由一定大小的像素点组成的。当像素点具有多种颜色或多种灰度等级时,就可以显示彩色图形或具有不同灰度的图形。 6、什么是虚拟现实技术和可视化技术?
答:虚拟现实技术:利用计算机生成一种模拟环境,通过多种传感器和设备使用户“投入”到该环境中,实现用户和该环境直接进行交互的技术。例如模拟飞机驾驶舱。 可视化技术:通过对空间数据场构造中间几何因素,或用图形绘制技术在屏幕上产生二维图像。例如分子模型构造。 7、阴极射线管由哪些部分组成?它们的功能分别是什么? 答:CRT由四部分组成:电子枪、聚焦系统、偏转系统和荧光屏,这四部分都在真空管内。电子枪由灯丝、阴极和控制栅极组成。灯丝加热阴极,阴极表面向外发射自由电子,控制栅控制自由电子是否向荧光屏发出,若允许电子通过,形成的电子流在到达屏幕的途中,被聚焦系统(电子透镜)聚焦成很窄的电子束,由偏转系统产生电子束的偏转电场(或磁场),使电子束左右、上下偏转,从而控制荧光屏上光点上下、左右运动,使得在指定时刻在屏幕指定位置上产生亮点。
8、对于分辨率为1024*1024的光栅系统,若每一像素用8位和12位二进制来表示存储信息,各需多大光栅存储容量以及显存? 解:
1)每一像素用8位二进制来表示存储信息,所需容量为1024*1024*1=220(Byte)=1MB
2)若每一像素用12位二进制表示存储信息,所需容量为:1024*1024*1.5=1.5*220(Byte) =1.5MB (由于显示卡的
显存是按2的指数次倍增长的,因此所需显存为2M) 9、对于19英寸显示器,若X和Y两方向的分辨率相等,即1024*1024,那么每个像素点的直径是多少? 解:
19*25.410242=0.33(mm)或
1910242=0.013(英
寸)
10、对于分辨率为1024×768的光栅系统,若调色板设置为真彩色32位,此时需要显示一个三维图形,各需要多大光栅存储容量以及显存?
答:调色板为真彩色32位,即意味着像素值的位长为32,所需容量为1024*768*32/8*3=9MB 因此所需要的显存为16M
11、如果线段端点坐标值不是整数,采用DDA算法产生的直线和将端点坐标值先取整后再用Bressenham算法产生的直线是否完全相同?为什么?能否扩充整数Bressenham算法使之能够处理当线段端点坐标值不是整数的情况。 答:不相同。因为DDA算法总是选择△x或者△y中的较大者作为步进的方向,不失一般性,假设选择x方向,
则x方向每前进一个像素点,y方向前进的像素点个数应该在[0, 1]区间,但是由于采用了(向上或者向下或者四舍五入)取整运算,必然会导致某些像素点偏在了真实直线的一侧。而Bressenham算法每一步都会根据实际直线与网格的距离来决定下一个像素点的选择,因此所选像素点更加贴近于真实的直线。可以扩充整数Bressenham算法使之能够处理当线段端点坐标值不是整数的情况。
12、消隐的意义是什么? 答:消隐的主要意义是为了得到一个确定的、立体感强的投射图。
13、请简述自身阴影的生成方式。答:自身阴影生成方式如下: (1)首先将视点置于光源位置,以光线照射方向作为观察方向,对在光照模型下的物体实施消隐算法,判别出在光照模型下的物体的“隐藏面”,并在数据文件中加以标识;(2)然后按实际的视点位置和观察方向,对物体实施消隐算法,生成真正消隐后的立体图形;(3)检索数据文件,核查消隐后生成的图形中,是否包含有在光照模型下的“隐藏面”。如有,则加以阴影符号标识这些面。 14请简述计算机图形学所涉及到的纹理概念。
答:在计算机图形学中物体的表面细节称为纹理,包括颜色纹理与几何纹理。颜色纹理主要是指光滑表面上附加花纹和图案,如墙面上的拼花图案、木制家具表面、塑料地板等。几何纹理主要指景物表面在微观上呈现出的起伏不平。例如混凝土墙面。柑橘表皮等。颜色纹理可用纹理映射来描述,几何纹理可用一个扰动函数来描述。 15、什么叫几何造型?
答:几何造型是一种技术,它能将物体的形状及其属性(如颜色、纹理等)存储在计算机内,形成该物体的三维几何模型,利用这个模型对原物体进行确切的数学描述或是对原物体某种状态进行真实模拟。几何造型是用计算机及其图形工具表示、描述物体的形状,设计几何形体,模拟物体动态过程的一门综合技术。它是集成CAD/CAM的基础,主要包括曲面造型、实体造型和特征造型三个分支。 16、几何造型有哪3种模型?各有什么特点? 答:(1)线框模型
线框模型表示的主体,不能充分反映出与计算机内部关于线数据和形状特征数据的关系;采用线框模型,在计算体积、重量等质量参数时,就无法利用隐线消去法,此外,这种模型很难表示圆筒或球之类的曲面立体。
由于线框模型的数据结构简单,具有计算机处理速度快的优点,因此用途还是很广的,特别是当未使用高性能计算机时,就能充分发挥其处理速度快的优点。主体的线框模型在计算机生成后,利用投影法就可很容易得到立体的三视图,在制图领域中有很广泛的应用。 (2) 表面模型
表面模型是在线框模型的基础上,增加了有关生成立体各表面的数据而构成的模型。表面的定义就是一些指定某表面由哪些棱线按何种顺序组成的信息。这种模型通常用于构造复杂的曲面物体,构形时常常利用线框功能,先构造一线框图,然后用扫描或旋转等手段变成曲面,当然也可以用系统提供的许多曲面图素来建立各种曲面模型。 表面模型由于比线框模型更高级、更优越,以及更易于在微机上实现等特点,在工程领域中有广泛的应用,特别是进行类似汽车外形设计这种有复杂表面设计工作的领域。 (3) 实体模型
实体模型是3种模型中最重要的,也是出现最晚的。实体模型的优点可以概括为:完整定义了立体图形,能区分内外部;能提供清晰的剖面图;能准确计算质量特性和有限元网格;方便机械运动的模拟。
17、用八叉树表示空间实体具有哪些主要优点? 答;(1)可以用统一而简单的形体(即立方体)表示空间任意形状的实体,数据结构简单;
(2)易于实现物体之间的集合运算,易于计算物体的性质,如物体的体积、质量、转动惯量等。 18、传统动画和计算机动画有什么不同?
答:传统动画采用手工方法制作,精度差且效率低;而计算机动画立体感强,可以改变视角、视距、视野及景深,具有明暗光线变化和阴影,使物体产生不同灰度和颜色渐变以及逼真的光照,可以产生纹理质感,且这些特点与效果是手工动画难以实现或不可能实现的。 19、什么叫关键帧动画和算法动画?
答:关键帧动画是通过一组关键帧或关键参数值而得到中间动画帧序列
(1)形状插值:从关键帧本身而得到中间动画帧 (2)关键参数插值:通过插值物体模型关键参数数值来获得中间动画。
算法动画由算法实现,一般适用于三维情形。
(1)运动学算法:由运动学方程确定物体的运动轨迹和速率。
(2)动力学算法:由力学方程确定物体运动形式。 (3)反向运动学算法:已知链接物末端位置和状态,反求运动方程以确定运动形式。
(4)反向动力学算法:已知链接物末端位置和状态,反求动力学方程以确定运动形式。
(5)随机运动算法:在某些场合下加进运动控制随机因素。 20、从物体的物理属性角度出发,可以将动画划分为哪些类型?
答:按照动画物体自身物理属性的不同,三维动画也可以分为:刚体动画、软体动画、关节动画以及粒子动画等。
编程题:
1、编写一个正方形;并在其中用不同颜色画15个正方形,每一个都比前一个小,
2、画一个五颜六色的图(画一个五颜六色的圆、条形图) 3、根据DDA(或者逐点比较法)画直线算法,编写一程序求(X,Y)到(a,b)的直线。 1、# include
{ void cb_line(int x1, int y1,int x2,int y2); int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode, \
cb_line(100,100,200,320); getch( );closegraph( ); }
void cb_line(int x1, int y1,int x2,int y2) {
int dx, dy, n, k, i, f; int x, y;
n=abs(x2-x1)+abs(y2-y1);
if (x2>=x1) {k=y2>=y1? 1:4;x=x1; y= y1;} else {k=y2>=y1? 2:3;x=x1;y=y1;} putpixel(x,y,1);
dx=abs(x2-x1); dy=abs(y2-y1); for(i=0,f=0;i
case 1:putpixel (x++,y,1);f-=dy;break; case 2:putpixel (x,y++,1);f-=dx;break; case 3:putpixel (x--,y,1);f-=dy;break; case 4:putpixel (x,y--,1);f-=dx;break;
}
else switch(k){
case 1:putpixel (x,y++,1);f+=dx;break; case 2:putpixel (x--,y,1);f+=dy;break; case 3:putpixel (x,y--,1);f+=dx;break; case 4:putpixel (x++,y,1);f+=dy;break;
} }
2、 # include
void cb_line(int x1, int y1,int x2,int y2) {
int dx, dy, n, k, i, f; int x, y;
n=abs(x2-x1)+abs(y2-y1);
if (x2>=x1) {k=y2>=y1? 1:4;x=x1; y= y1;} else {k=y2>=y1? 2:3;x=x1;y=y1;} putpixel(x,y,1);
dx=abs(x2-x1); dy=abs(y2-y1); for(i=0,f=0;i
case 1:putpixel (x++,y,1);f-=dy;break; case 2:putpixel (x,y++,1);f-=dx;break; case 3:putpixel (x--,y,1);f-=dy;break; case 4:putpixel (x,y--,1);f-=dx;break;
}
else switch(k){
case 1:putpixel (x,y++,1);f+=dx;break; case 2:putpixel (x--,y,1);f+=dy;break; case 3:putpixel (x,y--,1);f+=dx;break; case 4:putpixel (x++,y,1);f+=dy;break;
}
} main( ) {
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode, \
cb_line(100,100,200,300); getch( ); closegraph( ); }