C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

投影变换

投影变换分类

    把三维物体变为二维图形表示的过程称为投影变换

投影变换的分类情况如下表所示:




世界坐标与观察坐标

    物体在空间的表示是用世界坐标来表示,但是当人们去观察物体时,坐标系就转化为观察坐标系。这就需要在两个坐标系之间进行转换,可以通过平移、旋转实现从世界坐标到观察坐标的变换。

平移后,用单位矢量法得到旋转矩阵:

  1. Zv 轴向为观察平面的法向 VPN,其单位矢量n=VPN/|VPN|=(nx,ny,nz)

  2. Xv 轴向为观察方向PREF,其单位矢量u=PREF/|PREF|=(ux,uy,uz)

  3. Yv轴向的单位矢量v=u×n=(vxvyvz

因此世界坐标到观察坐标到变换矩阵为:


 正平行投影(三视图)

    投影方向垂直于投影平面的投影称为正平行投影,我们通常所说的三视图均属于正平行投影。三视图的生成就是把 x y z 坐标系的形体投影到 z =0的平面,变换到 u v w 坐标系。一般还需将三个视图在一个平面上画出,这时就得到下面的变换公式,其中( a b )为 u v 坐标系下的值, tx ty tz 均如图中所示。
   1)主视图

   2)俯视图

   3)侧视图

三视图

斜平行投影

    投影方向不垂直于投影平面的平行投影被称为斜平行投影,现在让我们来推导斜平行投影的变换矩阵。下图中的Z=0的坐标平面为观察平面,点( x y )为点( x y z )在观察平面上的正平行投影坐标,点( x´ y ´ )为斜投影坐标。( x y )与( x´ y ´ )的距离为 L



透视投影

    透视投影的视线(投影线)是从视点(观察点)出发,视线是不平行的。不平行于投影平面的视线汇聚的一点称为灭点,在坐标轴上的灭点叫做主灭点。主灭点数和投影平面切割坐标轴的数量相对应。按照主灭点的个数,透视投影可分为一点透视、二点透视和三点透视。



下面我们来推导简单的一点透视的投影公式。

从上图

P 点在观察平面上的投影我们可以得到描述 P ´点的参数方程:

用齐次坐标表示为:




http://jpkc.swjtu.edu.cn/C15/imagination/jisuanjituxing/Chapter6/CG_Txt_6_018.htm

posted on 2006-06-13 14:33 梦在天涯 阅读(2430) 评论(0)  编辑 收藏 引用 所属分类: DirectX


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1667398
  • 排名 - 5

最新评论

阅读排行榜