一、简答题 (每小题4分,共20分)
1、考虑两个不同的光栅系统,分辨率依次为A:640*480, B:1920*1080,每个像素的位平面数为8位,这些系统各需要多大的帧缓冲器(需列出计算式)?
2、如何判断点与多边形的内外关系?试分析其过程。
3、什么是走样与反走样?常用的反走样的方法有哪些?(至少列举二项)
4、什么叫齐次坐标?引入齐次坐标的优越性是什么?
5、请简述直线段裁剪算法:Cohan-Sutherland算法的原理。
二、选择题(每小题2分,共20分)
1、.电子束轰击荧光屏产生的亮点只能持续极短的时间,为了产生静态的不闪烁的图像,电子束必须周期性地反复扫描所要绘制的图形,这个过程称为( )。
A.启动 B.驱动 C.刷新 D.更新
2、计算机显示器一般使用( )颜色模型。
A. RGB B. CMY C. HSV D. HLS
3、点阵表示法枚举出图形中所有的点,简称为( );参数表示法包括了形状参数和属性参数等,简称为( )。
A.图像、图形 B.图形、图像 C.像素、图形 D.图像、图元
4、使用下列二维图形几何变换矩阵: T= 1 0 1 将产生变换的结果为( )
0 4 4
0 0 1
A. 图形整体放大4倍;
B. 图形沿X、Y轴方向各移动4个单位;
C. 图形沿Y轴正向平移4个单位,然后沿Y轴放大4倍。
D. 图形沿Y轴正向平移1个单位,然后沿Y轴放大4倍。
5、在图形系统中,数据手套、数据衣是( )设备。
A.输入 B.输出 C.输入输出 D.既不是输入也不是输出
6、()是构成屏幕的最小元素。
A.图像 B.图形 C.像素 D.片段(Fragment)
7、屏幕设备二维坐标系的原点,通常默认是在屏幕的( )。
A.左上角 B.左下角 C.右上角 D.右下角
8、为系统提供一张系统的当前属性值表,通过维护属性和其他参数的当前值表的来修改图形属性,这种系统称为(),例如:OpenGL。
A.函数系统 B.参数系统 C.线性系统 D.状态系统
9、在三维图形处理流水线中,投影变换是在()阶段中被处理的。
A.建模 B.几何处理 C.光栅化 D.片段(Fragment)处理
10、下列有关投影的叙述语句中,正确的论述为( )
A:透视投影能真实的反映物体的精确的尺寸和形状;
B:平行投影可分为正投影与斜投影;
C:透视投影变换中,一组平行于投影面的线的投影产生一个灭点;
D:平行投影与透视投影都能产生近大远小的真实效果。
三、填空题 (每空2分,共16分)
1、随着计算机图形学的发展,图形软件的标准也在发展,目前经过ISO批准的图形软件标准主要有GKS和PHIGS,此外,还有一些非官方的标准,它们在工业界被广泛应用,成为事实上的标准,如SGI公司的_(1)_和微软公司的_(2)_。
2、将三维物体变为二维图形的变换称为投影变换,其有两种基本方式:平行投影与透视投影,其中_(3)_的可见裁剪区域为一个四棱台。
3、用叉积法判断多边形凹凸性时,当沿着逆时针方向所有相邻边向量叉积结果符号相同时,为(4)多边形,反之为(5)多边形。
4、彩色打印机一般使用(6)颜色模型。
5、分辨率为1024*1024的显示器,若采用12位的颜色查找表,最多可同时显示(7)种不同颜色。
6、形体的定义和图形的输入输出都是在一定的坐标系下进行的,通常这些坐标系分为:建模坐标系,(8),观察坐标系,投影坐标系,规格化坐标,及设备坐标系等等。
四、计算与问答(每题12分,共24分)
1、用Bresenham画线算法进行线段扫描转换,请推导Bresenham算法在第一象限的递推公式,并写出从(5,5)到(17,10)所经过的所有像素点。
2、三维右手坐标系空间下,已知点A(2,2,1),先绕Z轴旋转45度,然后沿Z轴正向平移2个单位后得到的点A’ ,求点A’的坐标,并给出齐次坐标下的4×4变换矩阵。
五 、编程题(20分)
按照以下框架,完成一个绿色实心圆动画,实心圆由屏幕最左移动到最右,并按正弦曲线运动。假设画实心圆的函数已给出。
/*附:可能用到的OpengGL函数
glutPostRedisplay() ;glBegin();glEnd();glViewport( , , , ) ;glColor3f( , , );glMatrixMode(GL_PROJECTION) ; glMatrixMode(GL_MODELVIEW); glLoadIdentity() ;glClearColor( , , , ) ;gluOrtho2D( , , , );glClear(GL_COLOR_BUFFER_BIT );glPushMatrix();glPopMatrix();glFlush();glutSwapBuffers();glTranslatef( , , );glVertex2f( , );glRotatef( , , , ); */
#include <GL/glut.h>
#include <math.h>
(1)
void drawCircle(GLfloat x, GLfloat y ,GLfloat r) {……}//已实现
//以当前颜色,画一个圆心为x、y,半径为r的圆
void init()
{
(2)
}
static void idle(void)
{
(3)
}
static void display(void)
{
(4)
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(800,600);
glutInitWindowPosition(0,0);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow("animation");
init();
glutDisplayFunc(display);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}