三维图形编程 王继东 1
课程介绍 上课内容与要求 讲授内容主要是OpenGL相关概念及编程方法,应多进行实践练习。 成绩计算 总成绩:60% (期末成绩)+40%(平时成绩) 平时成绩:50%(上课成绩)+50%(作业成绩)。平时成绩以100分计, 联系电话:18900503238 2
参考书目 杨柏林编著. OpenGL编程精粹. 北京: 机械工业出版社, 2010 NeHe教程(nehe.gamedev.net) 3
第一讲 OpenGL介绍与3D图形学理论入门 4
本 讲 知 识 点 介 绍 1. OpenGL基础知识 2. 3D图形学理论入门 5
教学目标 了解OpenGL 的历史和特点 理解简单的3D图形学理论 6
重点与难点 重点: 1. OpenGL 的特点 2. 简单的3D图形学理论 难点: 1. 简单的3D图形学理论 7
1.1 什么是OpenGL OpenGL(即开放性图形库Open Graphics Library),是 一个三维的计算机图形和模型库,最初是美国SGI公司 为图形工作站开发的一种功能强大的三维图形机制 (或者说是一种图形标准)。 用户可以很方便地开发有多种特殊视觉(如光照,纹 理,透明,阴影)的三维图形。 与软硬件平台无关的三维图形软件包,可运行于多种 窗口系统之上。 包含图元生成、投影、光照、光栅化等图形显示过程 所需的功能。 8
1.1.1 OpenGL的历史 它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。 2011年8月9日在温哥华举行的SIGGRAPH 2011大会上发布了新的OpenGL 4.2标准细节,对于支持现有硬件的API加入了部分新的支持特性。 2012年8月7日,公布了桌面版OpenGL的最新版本4.3 。 在专业图形等领域成为众多开发者的首选,而且陆续衍生了OpenGL ES、OpenCL、WebGL等“同门师兄弟”。 9
1.1.2 OpenGL 的特点 跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的。 应用的广泛性 高质量和高性能 出色的编程特性 稳定性、独立性与易使用性等。 10
1.2 图形学理论入门 计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。 11
1.2.1 点 OPENGL使用右手坐标 12
1.2.1 点 OPENGL坐标系 世界坐标系:以屏幕中心为原点(0, 0, 0)。你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。 当前绘图坐标系:是绘制物体时的坐标系。程序初始化时,世界坐标系和当前绘图坐标系是重合的。 当对当前绘图坐标系进行平移、伸缩、旋转变换之后, 世界坐标系和当前绘图坐标系不再重合,用绘图函数绘图时,都是在当前绘图坐标系进行绘图,所有的函数参数也都是相对当前绘图坐标系来讲的。 空间两点的距离公式 13
1.2.2 向量 |a|=sqrt(x^2+y^2+z^2) 数学中,既有大小又有方向且遵循平行四边形法则的量叫做向量(vector),不同于物理学中的矢量,只有方向与大小,没有起始点(亦称自由向量)。 长度为0的向量叫做零向量,记作0。长度等于1个单位的向量,叫做单位向量。 向量的大小,也就是向量的长度(或称模),向量V的模记作|a|。 |a|=sqrt(x^2+y^2+z^2) 14
1.2.2 向量 a=(x,y) b=(x',y') 则a+b=(x+x',y+y') 向量的加法 向量的减法 a=(x,y) b=(x',y') 则a+b=(x+x',y+y') a=(x,y) b=(x',y') 则a-b=(x-x', y-y') 15
1.2.2 向量 数乘向量 点乘(dot product) 实数c和向量a的乘积是一个向量。 当c>0时,ca与a同方向; 点乘也叫向量的内积、数量积。 a·b=|a||b|cos<a,b> ( <a,b> 指向量a与向量b之间的夹角) 16
|c |=|a×b|=|a||b|sinθ 1.2.2 向量 叉乘 叉乘(cross product),也叫向量的外积、向量积; 两个向量a和b的叉积写作a×b,有时也被写成a∧b; 向量积可以被定义为: |c |=|a×b|=|a||b|sinθ 注:θ表示两向量之间的角夹角(0°≤ θ ≤180°),向量c垂直于向量a和向量b所定义的平面上,可以用右手定则判定。 将向量用坐标表示,若向量a=(a1,b1,c1),向量b=(a2,b2,c2) 则:a×b= (b1c2-b2c1,c1a2-a1c2,a1b2-a2b1) 17
1.2.3 矩阵 由m×n 个数 aij ( i = 1, 2, …, m ; j = 1, 2, …, n)有次序地排成 m 行(横排) n 列(竖排)的数表,称为一个 m 行 n 列的矩阵。 当m=n时, 称 A为n阶方阵。 元素全为 0 的矩阵称为零矩阵,记作O; 对角阵 单位矩阵是特殊的对角矩阵 18
1.2.4 三维变换 齐次坐标 齐次坐标的优点 所谓齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。 例如,二维点(x,y)的齐次坐标表示为(hx, hy, h)。由此可以看出,一个向量的齐次表示是不唯一的,齐次坐标的h取不同的值都表示的是同一个点,比如齐次坐标(8,4,2)、(4,2,1)表示的都是二维点(4,2)。 齐次坐标的优点 它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。。 可以表示无穷远的点。例如:n+1维的齐次坐标中如果h=0,实际上就表示了n维空间的一个无穷远点。 19
1.2.4 三维变换 一个变换通常用4x4矩阵表示. 对一个点或者向量进行变换等价于将一个矩阵乘以该点或向量的齐次坐标. 20
平移 利用平移矩阵,将点V=(x,y,z)T平移至V’=(x+Tx,y+Ty,z+Tz)T处,表示为V’=V+T 21
缩放 利用缩放矩阵,将点V=(x,y,z)T缩放(d1,d2,d3)倍 其中对角线上的元素表示对应坐标系分别放大(di>1)或者缩小了(di<1)的量 22
绕x轴旋转 当点绕x轴以逆时针方向(从x轴正方向向原点看)旋转角时,旋转矩阵为: y x z 23
绕y轴旋转 当点绕y轴以逆时针方向旋转角时,旋转矩阵为: 24
绕z轴旋转 当点绕z轴以逆时针方向旋转角时,旋转矩阵为: 25
1.2.5 投影 透视投影:投影射线汇聚于投影中心,或者说投影中心在有限远处的投影。 平行投影:平行投影可以看成投影中心在无限远处的投影。 透视投影不保持相关比例,但能够生成真实感视图。 平行投影保持物体的有关比例不变,这是三维绘图中产生比例图画的方法。 26
1.2.6 裁剪 平行投影的观察体 透视投影的观察体 27
1.2.7 光照 光照中的光源 点光源:光线从光源点向四面八方发散,发光的恒星(如太阳)、发光的灯泡一般使用该光源模型模拟,是最简单的光源。 无穷远光源:所有的光线都平行的从一个方向过来,当发光体(如太阳)离渲染的场景很远可以认为是无穷远时,一般使用该光源模型进行模拟。 方向光源:光线沿着一个方向在特定角度范围内逐渐发散开。现实世界中的车灯,手电筒一般使用该光源模型进行模拟。 环境光源:光线从各个地方以各个角度投射到场景中所有物体表面,找不到光源的确切位置。现实世界中不存在这样的光源,一般使用该光源模型来模拟点光源、无穷远光源、方向光源在物体表面经过许多次反射后的情况,环境光源照亮所有物体的所有面。 28
1.2.7 光照 物体表面的反射 漫反射:光线射到物体表面以后,反射光线的方向是任意方向的。 镜面反射:光线射到物体表面以后,反射光线根据照射表面位置的法线方向,发生方向唯一确定的镜面反射。 29
作业 书面: 1)理解齐次坐标 2)自行推导向量变换、坐标变换、投影变换 上机: 无 30
本讲结束 31