计算机图形学主讲人:陈学工(tel:07318836763 email:csucxg@)
教材和参考书 教材– 计算机图形学,倪明田等,北京大学出版社,2000 年。
参考书– 1、OpenGL编程指南(第七版),Dave Shreiner 等(李军等译),机械工业出版社,2010年。 – 2、计算机图形学(第三版),Donald Hearn,电 子工业出版社,2004年。 – 3、计算机图形学基础,唐泽圣等,清华大学出版 社,2001年。2
本课程的学习内容 1、图形软件包 2、用VC++编写OpenGL程序 3、图形变换 4、图元绘制 5、颜色和光照 6、混合、反走样和雾化 7、显示列表、位图和图像 8、纹理映射 9、复杂图形绘制3
一、图形软件包 1、Direct 3D和DirectX– DirectX是微软公司的多媒体应用软件包, Direct 3D是其中的一部分。DirectX支持图形、 音响、应用程序安装和设备管理等。 – Direct 3D至少支持游戏或其他应用中的12种 3D图形效果处理。
一、图形软件包 2、Heidi– Heidi主要应用于CAD和CAM技术中,如 AutoCAD、3D Studio以及3DS MAX。 – Heidi是专业性强的软件包,在CAD和CAM 领域应用比较广泛,在其它领域如多媒体或 游戏软件中应用较少。
一、图形软件包 3、OpenGL– OpenGL是以SGI公司为首,联合IBM、Intel 等8家公司共同制定的3D图形标准。 – OpenGL与硬件无关、独立于操作系统、支 持网络运行。
二、用VC++编写OpenGL程序 1、OpenGL函数库– 基本库 基本库是OpenGL的核心函数库。所有OpenGL操作都可用 这些函数来实现。可以在平台之间移植。这些函数以“gl” 为前缀。
– 实用库 实用库建立在基本库的基础之上,目的是为了减轻使用者 的编程负担。这些函数以“glu”为前缀。
– 辅助库 提供窗口管理函数、事件处理函数和简单模型制作函数。 这些函数以“aux”为前缀。
– Windows专用函数7
二、用VC++编写OpenGL程序 2、帧缓存– 在OpenGL中,帧缓存由颜色缓存、深度缓 存、模板缓存和累积缓存组成。 颜色缓存:用于存储每个像素点的颜色,包括左 前、(左后、右前、右后)和辅助颜色缓存。 深度缓存:用于存储每个像素点的深度值。 模板缓存:用于将作图限制在屏幕中的某些部分。 累积缓存:在RGBA模式中,用于将一系列图像 累加成一幅图像。
3、建立OpenGL控制台应用程序(.NET)8
三、图形变换 1、投影– void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); 函数功能:用一个正射投影矩阵右乘当前投影矩 阵。 输入参数:裁剪面left,right,bottom,top,zNear,zFar。 输出参数:无 返回值:无
– void gl
Ortho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);9
三、图形变换– 正射投影
top left view direction bottom right near
far
三、图形变换– 正射投影矩阵
三、图形变换– void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); 函数功能:设置一个透视投影矩阵。 输入参数:视域的角度fovy,视域宽与高的比率, 视点到近和远裁剪面的距离zNear和zFar。 输出参数:无 返回值:无
三、图形变换– void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); 函数功能:用一个透视投影矩阵右乘当前投影矩 阵。 输入参数:裁剪面left,right,bottom,top,到近和远 裁剪面的距离zNear和zFar。 输出参数:无 返回值:无
三、图形变换– 透视投影(glFrustum)
left bottom view point
top right near
far
三、图形变换– 透视投影(glFrustum)矩阵
三、图形变换 2、视区变换– void glViewport(GLint x, GLint y, GLint width, GLint height); 函数功能:在窗口中定义一个视区。 输入参数:视区左下角坐标(x,y),视区的宽width, 视区的高height。 输出参数:无 返回值:无
三、图形变换 3、裁剪变换– void glClipPlane(GLenum plane,const GLdouble *equation); 函数功能:定义附加裁剪平面。 输入参数: 参数plane表示裁剪平面索引号 GL_CLIP_PLANEi (i取0到到 GL_MAX_CLIP_PLANES-1 之间的整数), 参数 equation表示三维平面方程Ax+By+Cz+D=0的系 数A,B,C和D构成的数组。 输出参数:无 返回值:无17
三、图形变换 4、几何变换– void glRotate{f,d}(TYPE angle, TYPE x, TYPE y, TYPE z); 函数功能:对局部坐标系进行旋转。 输入参数:旋转角度angle,旋转轴方向矢量(x,y,z)。 输出参数:无 返回值:无
三、图形变换– void glTranslate{f,d}(TYPE x, TYPE y, TYPE z); 函数功能:对局部坐标系进行平移。 输入参数:在坐标轴方向的平移量x,y和z。 输出参数:无 返回值:无 函数功能:对局部坐标系进行缩放。 输入参数:在坐标轴方向的缩放量x,y和z。 输出参数:无 返回值:无19
– void glScale{f,d}(TYPE x, TYPE y, TYPE z);
四、图元绘制 1、图元定义– void glBegin(GLenun mode); 函数功能:定义图元,图元顶点序列开始。 输入:图元类型 输出:无 返回值:无 函数功能:定义图元,图元顶点序列结束。 输入:无 输出:无 返回值:无20
– void glEnd(void);
四、图元绘制 2、画点– void glPointSize(GLfloat size); 函数功能:定义顶点大小。 输入:顶点大小size,size必须大于0.0,缺省
为1.0。 输出:无 返回值:无 函数功能:定义顶点。 输入:顶点坐标。 输出:无 返回值:无21
– void glVertex{2,3,4}{sifd}{v}(TYPE coords);