Presentation is loading. Please wait.

Presentation is loading. Please wait.

河南理工大学 计算机学院 徐文鹏 教学博客http:// Opengl.cnblogs.com

Similar presentations


Presentation on theme: "河南理工大学 计算机学院 徐文鹏 教学博客http:// Opengl.cnblogs.com"— Presentation transcript:

1 河南理工大学 计算机学院 徐文鹏 wpxu@hpu.edu.cn 教学博客http:// Opengl.cnblogs.com
计算机图形学 河南理工大学 计算机学院 徐文鹏 教学博客 Opengl.cnblogs.com

2 问题的提出 组合场景 16:57

3 问题的提出 雪花的构造 16:57

4 问题的提出 构造三维场景 16:57

5 问题的提出 在计算机动画中,在相邻帧图像中,几个对象相对彼此 的位置进行移动 16:57

6 一般变换 所谓变换就是把点映射到其它点,把向量映射到其它向量 16:57

7 平移 把一个点移到新的位置 平移由一个向量d确定 三个自由度 P’= P + d 16:57

8 对象的平移 把一个对象上的所有点沿同一向量平移 对象 平移后的对象 16:57

9 平移的表示 平移变换:将p点从一个坐标位置移到另一个坐标位置的过程. 新点坐标? 16:57

10 平移的表示 向量表示: 16:57

11 旋转 16:57

12 将p点绕坐标原点转动某个角度(逆时针为正,顺时针为负)得到新的点p’的过程
旋转变换 将p点绕坐标原点转动某个角度(逆时针为正,顺时针为负)得到新的点p’的过程 16:57

13 旋转变换表示 向量表示: 16:57

14 旋转变换表示 向量表示: 顺时针旋转θ角? 16:57

15 齐次坐标 1. 平移变换: tx,ty称为平移参数 16:57

16 齐次坐标 2. 旋转变换: 逆时针旋转θ角 齐次坐标 16:57

17 齐次坐标 齐次坐标的作用 齐次坐标表示法是由n+1维向量表示一个n维向量。
如:n维向量(P1,P2, … ,Pn)表示为(hP1,hP2,hPn,h),其中h称为哑坐标。 普通坐标与齐次坐标的关系为“一对多” 由普通坐标h→齐次坐标 由齐次坐标÷h→普通坐标 如:普通坐标(2,3)→齐次坐标 (4,6,2), (6,9,3) 当h=1时产生的齐次坐标称为“规格化坐标”,因为前n个坐标就是普通坐标系下的n维坐标。 齐次坐标的作用 16:57

18 齐次坐标 齐次坐标是所有计算机图形系统的关键
将各种变换用阶数统一的矩阵来表示。提供了用矩阵运算把二维、三维甚至高维空间上的一个点从一个坐标系变换到另一坐标系的有效方法。 便于变换合成, 以利于硬件实现 几何意义? 16:57

19 齐次坐标 齐次坐标 (x,y)点对应的齐次坐标为 齐次坐标为三维空间的一条直线 16:57

20 放缩 沿每个坐标轴伸展或收缩(原点为不动点) 16:57

21 对p点相对于坐标原点沿x方向放缩Sx倍,沿y方向放缩Sy倍。其中Sx和Sy称为比例系数。
放缩变换 对p点相对于坐标原点沿x方向放缩Sx倍,沿y方向放缩Sy倍。其中Sx和Sy称为比例系数。 16:57

22 错切变换 用于产生弹性物体的变形处理。在游戏中用它扭曲整个场景,产生虚幻效果. 16:57

23 错切变换 (1)沿x方向错切 每一点的y坐标不变,x坐标平移一个y坐标的线性量. 16:57

24 错切变换 (2)沿y方向错切 每一点的x坐标不变,y坐标平移一个x坐标的线性量. 16:57

25 仿射变换 平移、比例、旋转、错切和反射等变换均是二维仿射变换的特例 仿射变换具有平行线不变性和有限点数目的不变性 16:57

26 二. 复合变换 基本变换 任何一复杂的几何变换都可以看作基本几何变换的组合形式。 复合变换具有形式: 16:57

27 二. 复合变换 1. 二维复合平移 两个连续平移是加性的 16:57

28 二. 复合变换 2. 二维复合比例 连续放缩变换是相乘的 3. 二维复合旋转 连续旋转变换是相加的 16:57

29 二. 复合变换 4. 相对任一参考点的二维几何变换 思路? 例. 相对点O’的旋转变换 相对某个参考点O’作二维几何变换,其变换过程为:
4. 相对任一参考点的二维几何变换 例. 相对点O’的旋转变换 思路? 相对某个参考点O’作二维几何变换,其变换过程为: (1) 平移 (2) 对原点进行几何变换 (3) 反平移 16:57

30 二. 复合变换 5. 相对任意方向的二维几何变换 例. 相对直线l的反射变换 相对任意方向作二维几何变换,其变换的过程是: (1) 旋转变换
5. 相对任意方向的二维几何变换 例. 相对直线l的反射变换 相对任意方向作二维几何变换,其变换的过程是: (1) 旋转变换 (2) 针对坐标轴进行二维几何变换; (3) 反向旋转 16:57

31 二. 复合变换 例. 将正方形ABCO各点沿图6-8所示的(0,0)→(1,1)方向进行拉伸,结果为如图所示的,写出其变换矩阵和变换过程。
需要验证下为好,拉伸是错切还是放大, 16:57

32 二. 复合变换 Example: 16:57

33 一.3D基本几何变换 三维基本几何变换都是相对于坐标原点和坐标轴进行的几何变换
假设三维形体变换前一点为p(x,y,z),变换后为p'(x',y',z')。 16:57

34 一.3D基本几何变换 1. 平移变换 16:57

35 一.3D基本几何变换 2. 旋转变换 16:57

36 一.3D基本几何变换 (1)绕z轴旋转 16:57

37 一.3D基本几何变换 (2)绕x轴旋转 16:57

38 一.3D基本几何变换 (3)绕y轴旋转 Flash演示 16:57

39 一.3D基本几何变换 3. 放缩变换 16:57

40 一.3D基本几何变换 例:对如图7-6所示的长方形体进行放缩变换,其中Sx=1/2,Sy=1/3,Sz=1/2,求变换后的长方形体各点坐标。
16:57

41 二.3D复合变换 三维复合变换是指图形作一次以上的基本变换,变换结果是基本变换矩阵相乘。 16:57

42 二.3D复合变换 1. 相对任一参考点的三维变换 相对于参考点F(xf,yf,zf)作比例、旋转、错切等变换的过程分为以下三步:
1. 相对任一参考点的三维变换 相对于参考点F(xf,yf,zf)作比例、旋转、错切等变换的过程分为以下三步: (1)将参考点F移至坐标原点 (2)针对原点进行三维几何变换 (3)进行反平移 16:57

43 二.3D复合变换 例:相对于F(xf,yf,zf)点进行放缩变换 16:57

44 二.3D复合变换 AB与Z轴重合 2. 绕任意轴的三维旋转变换 问题:如何求出TRAB? 向基本变换转化 16:57

45 二.3D复合变换 下一步? (1) 将A点平移到坐标原点 16:57

46 欲使OB绕x轴旋转至xoz坐标平面内,旋转角度应为 ,原因是 .
二.3D复合变换 欲使OB绕x轴旋转至xoz坐标平面内,旋转角度应为 ,原因是 16:57

47 (2) 将OB绕x轴逆时针旋转α角,则OB旋转到xoz平面上, a, b, c 已知
二.3D复合变换 (2) 将OB绕x轴逆时针旋转α角,则OB旋转到xoz平面上, a, b, c 已知 α=? 若绕z轴, α? 16:57

48 (3) 将OB绕y轴顺时针旋转β角,则OB旋转到z轴上
二.3D复合变换 (3) 将OB绕y轴顺时针旋转β角,则OB旋转到z轴上 β =? 16:57

49 二.3D复合变换 (4) 经以上三步变换后,AB轴与z'轴重合,此时绕AB轴的旋转转换为绕z轴的旋转。
(5) 最后,求TtA,TRx,TRy的逆变换,回到AB原来的位置。 16:57

50 二.3D复合变换 针对任意方向轴的变换可用五个步骤来完成: (1)平移:使任意方向轴起点与坐标原点重合
(2)旋转:使方向轴与某一坐标轴重合,变换可能不止一次 (3)针对该坐标轴完成所需变换 (4)逆旋转:使方向轴回到其原始方向 (5)逆平移:使方向轴回到其原始位置。 16:57

51 OpenGL旋转、平移、放缩 上载单位阵: glLoadIdentity(); 在右边相乘:
glRotatef(theta, vx, vy, vz); theta以角度为单位,(vx,vy,vz)定义旋转轴 glTranslatef(dx, dy, dz); glScalef(sx, sy, sz); 每个函数的参数还可以是d(double)类型 16:57

52 示例 固定点为(1.0, 2.0, 3.0), 绕z轴旋转30° !!在程序中最后指定的矩阵是最先被执行的操作
glMatrixMode(GL_MODEL_VIEW); glLoadIdentity(); glTranslated(1.0, 2.0, 3.0); glRotated(30.0,0.0,0.0,1.0); glTranslated(-1.0,-2.0,-3.0); !!在程序中最后指定的矩阵是最先被执行的操作 16:57

53 变换的应用 例如:应用空闲函数旋转立方体,鼠标函数改变旋转的方向 从一个画立方体的程序开始(cube.c) 立方体中心在原点
各方向与坐标轴平行 16:57

54 OpenGL中的矩阵 在OpenGL中矩阵是状态的一部分 有三种类型 用于操作的单组函数 选择所操作的对象
模型视图(GL_MODELVIEW) 投影(GL_PROJECTION) 纹理(GL_TEXTURE) 用于操作的单组函数 选择所操作的对象 glMatrixMode(GL_MODEL_VIEW); glMatixMode(GL_PROJECTION); 16:57

55 当前变换矩阵(CTM) 从概念上说,当前变换矩阵(CTM)就是一个4x4阶的齐次坐标矩阵,它是状态的一部分,被应用到经过流水线中的所有顶点
16:57

56 CTM运算 CTM可以被改变,改变的方法是上载一个新的 CTM或者右乘一个矩阵 上载单位阵:C ← I 上载任意矩阵:C ←M
上载一个旋转矩阵:C ←R 上载一个放缩矩阵:C ← S 右乘任意矩阵:C ←CM 右乘一个平移矩阵:C ←CT 右乘一个旋转矩阵:C ←CR 右乘一个放缩矩阵:C ←CS 16:57

57 绕固定点的旋转 从单位阵开始:C ← I 把固定点移到原点:C ← CT−1 旋转:C ← CR 把固定点移回到原处:C ← CT
结果:C = T−1RT 其中每个运算对应于程序中的一个函数调用 !!在程序中最后指定的运算是最先被执行的运算 16:57

58 在OpenGL中的CTM 在OpenGL的流水线中有一个模型视图矩阵和一个投影矩阵,这两个矩阵复合在一起构成CTM
可以通过首先设置正确的矩阵模式处理每个矩阵 16:57

59 任意矩阵 可以上载应用程序中定义的矩阵,或者使之与CTM相乘 glLoadMatrixf(m) glMultMatrixf(m)
矩阵m是有16个元素的一维数组,其按列定义了4x4矩阵 在glMultMatrixf(m)中m乘在已有乘法的右边 16:57

60 矩阵堆栈 许多情况中需要保存变换矩阵,待稍后再用 OpenGL为每种类型的矩阵维持一个堆栈 glPushMatrix()
遍历层次数据结构 当执行显示列表时避免状态改变 OpenGL为每种类型的矩阵维持一个堆栈 应用下述函数处理矩阵堆栈(也是由 glMatrixMode设置矩阵类型) glPushMatrix() glPopMatrix() 16:57

61 读入后台矩阵 OpenGL状态中有些信息是以矩阵形式保存的 可以利用查询函数读入矩阵(以及其它部分的 状态) 例如,对于CTM:
glGetIntegerv glGetFloatv glGetBooleanv glGetDoublev 例如,对于CTM: double m[16]; glGetDoublev(GL_MODELVIEW,m); 16:57


Download ppt "河南理工大学 计算机学院 徐文鹏 教学博客http:// Opengl.cnblogs.com"

Similar presentations


Ads by Google