Presentation is loading. Please wait.

Presentation is loading. Please wait.

计算机图形学 《计算机图形学》 路 通 博士、教授 南京大学计算机科学与技术系课程

Similar presentations


Presentation on theme: "计算机图形学 《计算机图形学》 路 通 博士、教授 南京大学计算机科学与技术系课程"— Presentation transcript:

1 计算机图形学 《计算机图形学》 路 通 博士、教授 南京大学计算机科学与技术系课程
路 通 博士、教授 Department of Computer Science and Technology, NanJing Uiversity

2 第6讲 图形观察与几何变换 1 图形观察 2 几何变换 3 应用举例

3 1. 图形观察

4 图形观察 图形变换和观察是计算机图形学的基础内容之一
图形观察是通过指定一个图形中要显示的部分以及在显示器显示位置,并执行从世界坐标系到设备坐标系的图形变换及删除位于显示区域范围以外的图形部分而实现的 类似于用相机拍摄物体的过程: 将物体在某个位置摆放好 相机定位 确定相机方向、朝向 取景 成像 图形观察所要解决的问题:将某个物体的一部分或全部映射到某显示区域中(如显示器)

5 图形观察中涉及的坐标系 图形观察变换流程 物体建模:在模型坐标系对物体进行几何建模
物体的建模变换:物体平移、旋转、缩放等变换操作,构造世界坐标场景,得到世界坐标系描述 视点变换:在世界坐标系中对相机定位、定向,设置取景方式,从而得到观察坐标系 观察变换、投影变换:将世界坐标系中的几何模型变换到规范化设备坐标系中的二维几何描述 工作站变换:规范化设备坐标系到设备坐标系的变换

6 图形观察中涉及的坐标系 模型坐标系(Modeling Coordinate System):为方便地构造单个对象而定义的坐标系统。
根据用户需要,可自由定义其原点和方向 通过模型坐标系描述的物体,可以在将模型坐标系“放入”世界坐标系后,很方便地得到物体在世界坐标系中的描述 模型坐标系主要是为了方便用户对物体建模

7 图形观察中涉及的坐标系 世界坐标系(World Coordinate System):是现实世界的坐标系,坐标系方向不能改变。世界坐标系是某场景内物体,或单个物体各部件的统一参照系 用于计算图形场景中所有图形对象的空间定位和几何定义 明确某一物体的单元构成,或放入场景的位置 是物体和观察者之间位置、距离、视线等衡量的标准

8 图形观察中涉及的坐标系 观察坐标系(Viewing Coordinate System):相当于照相机坐标系,用来确定相机胶卷平面的位置和方向,从而得到期望观察到的视图 一般以视点为原点,通过指定一个垂直于相机的向上向量来定义 描述从观察者角度对整个世界坐标系内的对象进行重定位和描述 成像面坐标系(Imaging Coordinate System):在胶卷平面上的成像坐标系,是观察坐标系中的某个特定投影

9 图形观察中涉及的坐标系 规范化设备坐标系(Normalizing Device Coordinate System):独立于具体设备的中间、规范化的设备坐标系 NDC可以很容易地转换为具体设备(如各种显示器、打印机)的设备坐标系 其坐标范围为0..1 NDC能够使得图形软件在不同的设备之间移植;由规范化设备坐标系到各图形硬件实际坐标之间的映射由软件自动实现 设备坐标系(Device Coordinate System):每一个具体的显示设备有独立的设备坐标系 屏幕坐标系中的成像区域称为视图区(或视口,view port)。设备坐标为整数

10 窗口与视区 图形软件包允许指定图形中要显示的部分及在显示器显示的位置 世界坐标系中要显示的区域称窗口
窗口映射到显示器(设备)上的区域称为视区 窗口定义显示什么;视区定义在何处显示 标准的窗口和视区一般都是矩形 Y设备 视区 X设备 设备坐标系 ymax ymin xmax xmin 窗口 Y世界 X世界 世界坐标系 视区定义

11 二维观察的流程 在世界坐标系中构造图形或场景:使用建模坐标变换 在世界坐标平面中设置二维的观察坐标系,将世界坐标系下的描述变换到观察坐标系
在观察坐标系下定义视区窗口: 视区窗口通常定义成单位正方形,以保证观察和变换独立于输出设备 改变视区窗口的位置可以在输出设备的显示区的不同位置观察物体 也可以通过改变视区窗口的尺寸来改变显示对象的尺寸和位置 改变视区向上方向矢量可改变视线方向 将观察坐标系下的场景描述映射到规范坐标系的视区

12 二维观察的流程 在规范化坐标系下进行视区图形裁剪:裁剪掉视区外的图形部分,并将视区内图形转换到设备坐标系

13 OpenGL用于二维显示 //视口位置和尺寸(相对于程序窗口) glViewport (x, y, width, height);
100,1450 2000,1500 0,0 1800,150 //视口位置和尺寸(相对于程序窗口) glViewport (x, y, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //二维投影面,决定了二维显示坐标的范围 gluOrtho2D(xmin,xmax,ymin,ymax); 显示器屏幕 指定观察设备的关联方式 视口范围 指定观察方式 Opengl程序窗口 xmax,ymax 在世界坐标系下指定观察范围 二维投影面范围 xmin,ymin

14 2. 几何变换

15 二维几何变换 图形变换是图形显示过程中不可缺少的一个环节 通过图形变换可由简单图形生成复杂图形
变换是描述图形的有力工具,可改变和管理各种图形的显示。例如: 通过调整组成部分的方向和大小来实现设计和设施布局 动画则通过沿动画路径移动“照相机”或场景中的对象而产生 在方向、尺寸和形状方面的变化是用改变对象坐标描述的几何变换来完成 二维观察中涉及的各种变换需要用二维几何变换来实现

16 平移变换 平移是指:将物体沿直线路径从一个坐标位置到另一个坐标位置重定位
给原始坐标位置(x,y)加上平移距离tx和ty来实现到新位置(x1,y1)的移动: x1 =x+tx y1 =y+ty (tx,ty)称为平移向量或转换向量 平移的矩阵方程: P1 =P+T T=(tx,ty)T, P =(x,y)T, P1 =(x1,y1)T P P1 T

17 平移的特性 平移是不产生变形而移动物体的刚体变换,物体上的每个点移动相同的坐标 直线的平移是将平移方程加到线的每个端点上
多边形的平移是将平移向量加到每个顶点的坐标 曲线可用同样方法来平移 为了改变圆或椭圆的位置,可以平移中心坐标并在新中心位置重画图形 通过替代定义曲线的坐标位置,而后用平移过的坐标点来重构曲线路径来实现其它曲线的平移 T

18 旋转变换 二维旋转是将物体沿xy平面内的圆弧路径重定位
指定物体旋转的旋转点(或基准点)的位置(xr,yr)和旋转角θ(逆时针旋转时旋转角为正) 或:描述为绕通过基准点、垂直于xy平面的旋转轴旋转 当基准点为坐标原点时,变换方程: x1=xcosθ-ysinθ y1=xsinθ+ycosθ 方程的列向量矩阵为:P1=R·P 旋转矩阵为: 变换也可表示为行坐标向量矩阵: P1T=(R · P)T=PT·RT 旋转矩阵R的转置RT可通过交换行和列而得到; 旋转矩阵R的置换则可简单地改变sin项符号而得到

19 旋转变换的特性 点绕任意基准位置旋转的变换方程: x1=xr+(x- xr)cosθ-(y- yr)sinθ
y1=yr+(x- xr)sinθ+(y- yr)cosθ 这个通用旋转方程不同于绕原点旋转方程之处在于:包括一个加项(平移项)以及坐标值上的多重系数 旋转也是一种不变形地移动物体的刚体变换,物体上的所有点旋转相同的角度: 直线段旋转是将每个线端点 多边形的旋转则是将每个顶点旋转指定的旋转角 曲线的旋转则是旋转控制取样点 (xr,yr)

20 缩放变换 缩放变换改变物体的尺寸。该操作施加于多边形
通过将每个顶点坐标值(x,y)乘以缩放系数sx和sy,产生变换的坐标(x1,y1):x1=x·sx,y1=y·sy 缩放系数sx在x方向对物体缩放,sy在y方向缩放 相对于原点的缩放矩阵形式:P1=S·P 缩放矩阵: X Y P1 P2 相对原点的一致缩放 缩放系数sx和sy可赋予任何正数 小于1缩小物体的尺寸 大于1则放大物体 当sx和sy值相同时,产生一致缩放 sx和sy值不等时产生差值缩放 用缩放方程变换的物体既被缩放,又被重定位 当缩放系数值大于1时则将坐标位置远离原点

21 变换的矩阵表示 每个基本变换都可表示为普通矩阵形式: P1=M1·P+M2 坐标位置P1和P表示为列向量
利用这个方程产生先缩放再旋转后平移的变换顺序,必须每次一步地计算变换的坐标

22 变换的齐次坐标矩阵表示 在齐次坐标中所表示的位置允许将所有几何变换方程表示为矩阵乘法: 坐标可表示为三元素列向量,变换写成3×3矩阵
平移变换可表示为: P1=T(tx,ty)·P,T(tx,ty)为平移矩阵 平移矩阵的逆矩阵:用平移参数tx,ty的负值-tx,-ty来代替原值 平移矩阵 旋转矩阵 绕坐标原点的旋转变换可写为: P1=R(θ)·P,R(θ)是旋转矩阵; 当θ用-θ替换时就得到其逆矩阵

23 变换的齐次坐标矩阵表示 相对于坐标原点的缩放变换表示为: P1=S(sx,sy)·P,S(sx,sy)是缩放矩阵
用倒数1/sx和1/sy代替sx和sy就产生其逆矩阵 缩放矩阵

24 复合变换 矩阵的合并或复合:利用矩阵表示,通过计算单个变换矩阵的乘积,将任意顺序变换的矩阵建立为复合变换矩阵
对于坐标位置的列矩阵表示,以从右向左的次序进行矩阵乘而形成复合变换,来计算一系列变换的结果 即:每个随后的变换矩阵左乘前面的变换矩阵 复合平移:P1={T(txn,tyn) ·……·T(tx2,ty2) · T(tx1,ty1)}·P 复合旋转:P1={R(θn) ·…… · R(θ2) · R(θ1)}· P 复合缩放:P1={S(sxn,syn)·……· S(sx2,sy2) · S(sx1,sy1)}·P 复合变换:先缩放后平移再旋转: P1={R(θn) · T(txn,tyn) · S(sxn,syn)}·P 注意:矩阵乘法不满足交换率:M1•M2≠M2•M1,所以变换的结果和变换执行的顺序有关 只有在两个变换类型相同,或两者分别是一致缩放与旋转变换时,两者可以交换

25 复合变换的例子(1) 几何形状绕任意点(xr,yr)旋转θ,求变换矩阵 平移物体,使(xr,yr)与原点重合 平移后的物体绕原点旋转

26 复合变换的例子(2) 几何形状相对点(xf,yf)的比例变换(sx, sy),求变换矩阵 平移物体,使(xf,yf)与原点重合
平移后的物体缩放变换 平移物体使其基准点回到原来的(xf,yf)位置

27 复合变换的例子(3) 矩阵运算不满足交换律 不同的变换次序会产生不同的变换结果

28 其它变换:对称(反射)变换 反射 (对称)变换是产生物体的镜像的一种变换
相对反射(对称)轴的一维反射镜像是通过将物体绕反射(对称)轴旋转180度而生成的

29 任意对称(反射)变换 关于xy平面内任意线y=mx+b的反射可用平移-旋转-反射变换的组合来完成:
①平移反射轴使其经过原点;②将反射轴旋转到坐标轴之一上,且进行关于坐标轴反射;③利用逆旋转和平移变换将线置回原处 关于坐标轴或坐标原点的反射可处理为缩放系数为负值的缩放变换 反射矩阵的元素也可设置为±1以外的其它值:大于1的值将镜像移至远离反射轴;小于1的值将镜像接近反射轴

30 反射变换 对x轴的反射 对y轴的反射 对原点的反射 关于对角线y=x的反射 顺时针旋转45°; 对x轴反射; 再逆时针旋转45°

31 其它变换:错切变换 错切会使物体形状发生变化的变换,经过错切的物体好象是由已经相互滑动的内部夹层组成。常用错切变换有两种:改变x坐标值和改变y坐标值 相对x轴的x方向错切将坐标位置转换成:x1=x+shx·y,y1=y 坐标位置(x,y)水平地移动一个与它到x轴距离(y值)成shx比例的量;shx为负,坐标位置向左移动

32 仿射变换 Translation transform Rotation transform Scaling transform
Shearing transform Transform concatenation Rigid body transform Normal transform Affine transform: 平行线变换到平行线,但不保持长度和角度

33 三维坐标的平移变换 y y x x 性质: T-1 (t) = T(-t)

34 三维坐标的旋转变换 性质1:迹与旋转轴无关,都为 性质2:所有旋转矩阵为正交阵,多个旋转矩阵相乘仍为正交阵。

35 三维缩放变换 Example: Scaling in a certain direction
假设沿正交、右手系(OpenGl)的矢量fx , fy , fz进行比例变换,则首先构造矩阵 最后的变换为

36 三维坐标系下绕任意轴旋转 绕任意单位轴r旋转角度α是一个很有用的操作
思想: (1).由r构造一正交坐标系 (2).变换坐标系,使得r与x轴重合 (3).绕x轴旋转 (4).变换回去 y y y r s r M MT s s r x x x t Rx(α) z t z z t

37 3. 应用举例

38 顶点混合(Vertex Blending)
假设一个数字角色的手臂用前臂和后臂来模拟,我们要对手臂设置动画 若采用刚体变换设置动画,则关节处(肘)不像真实手臂。因为我们采用了两个分离的物体来模拟手臂,在关节处有重叠部分 解决方法:Vertex Blending (其它称呼:Skinning, Enveloping, Skeleton-subspace Deformation) 采用一个物体模拟,关节处应是柔性的

39 刚 体 simple skin 顶点混合 前臂2/3, 后臂1/3 folding (2/3,1/3) bones + + + +
(1/3,2/3) 刚 体 simple skin 顶点混合

40 顶点混合(Vertex Blending)
最简单方法:前臂和后臂仍单独设置动画,但关节处用一柔性的“skin”来连接 柔性部分的一部分顶点由前臂的矩阵来变换,另一部分由后臂的矩阵来变换。即:一个三角形的顶点可以由不同的矩阵来变换,而不是一个矩阵。这种基本技术有时也称为“Stitching”

41 顶点混合(Vertex Blending)
骨架驱动:整只手臂是 “柔性”的。所有的顶点由多个矩阵影响。整个多边形网格常称为骨架上的“skin”(外皮) vertex blending 例子

42 顶点混合的数学表示 p为原始顶点,u(t)为变换后的顶点,n为影响p的关节数目 Mi:把第i个关节骨架的初始坐标系变换到世界坐标系
Bi(t):第i个关节随时间变化的世界变换,通常是一系列矩阵的连乘 wi:第i个关节骨架作用于p的权因子 vertex blending 例子 顶点混合可在CPU上实现。如果是瓶颈,则该操作应在图形硬件上实现, 有些图形硬件支持顶点混合。也可以用可编程图形硬件(Vertex Shader)实现。 DirectX 允许两种流水线来实现Skinning: (1) Fixed function path (2) Vertex shader

43 Vertex Blending的一些其它问题
如果需要对皮肤模型进行精确的碰撞检测 顶点混合可能出现的问题:不应该的折叠、扭曲,自交

44 Motion capture 应用于:娱乐、军事、运动、医疗等

45

46 Motion capture


Download ppt "计算机图形学 《计算机图形学》 路 通 博士、教授 南京大学计算机科学与技术系课程"

Similar presentations


Ads by Google