1 概述

在计算机三维图像中,投影可以看作是一种将三维坐标变换为二维坐标的方法,常用到的有正交投影和透视投影。正交投影多用于三维健模,透视投影则由于和人的视觉系统相似,多用于在二维平面中对三维世界的呈现。

透视投影(Perspective Projection)是为了获得接近真实三维物体的视觉效果而在二维的纸或者画布平面上绘图或者渲染的一种方法,也称为透视图[1] 。它具有消失感、距离感、相同大小的形体呈现出有规律的变化等一系列的透视特性,能逼真地反映形体的空间形象。透视投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。

2 透视投影的原理

基本的透视投影模型由视点E和视平面P两部分构成(要求E不在平面P上)。视点可以认为是观察者的位置,也是观察三维世界的角度。视平面就是渲染三维对象透视图的二维平面。如图1所示。对于世界中的任一点X,构造一条起点为E并经过X点的射线R,R与平面P的交点Xp即是X点的透视投影结果。三维世界的物体可以看作是由点集合 { Xi} 构成的,这样依次构造起点为E,并经过点Xi的射线Ri,这些射线与视平面P的交点集合便是三维世界在当前视点的透视图,如图2所示。

图1  透视投影的基本模型[2]

 _

图2  透视图成像原理[6]

基本透视投影模型对视点E的位置和视平面P的大小都没有限制,只要视点不在视平面上即可。P无限大只适用于理论分析,实际情况总是限定P为一定大小的矩形平面,透视结果位于P之外的透视结果将被裁减。可以想象视平面为透明的玻璃窗,视点为玻璃窗前的观察者,观察者透过玻璃窗看到的外部世界,便等同于外部世界在玻璃窗上的透视投影(总感觉不是很恰当,但想不出更好的比喻了)。

当限定P的大小后,视点E的可视区间(或叫视景体)退化为一棱椎体,如图3所示。该棱椎体仍然是一个无限区域,其中视点E为棱椎体的顶点,视平面P为棱椎体的横截面。实际应用中,往往取位于两个横截面中间的棱台为可视区域(如图4所示),完全位于棱台之外的物体将被剔除,位于棱台边界的物体将被裁减。该棱台也被称为视椎体,它是计算机图形学中经常用到的一个投影模型。

图3  有限视平面的可视区间[3]

图4  透视投影的视椎体模型[3]

3 透视投影的标准模型

设视点E位于原点,视平面P垂直于Z轴,且四边分别平行于x轴和y轴,如图5所示,我们将该模型称为透视投影的标准模型,其中视椎体的近截面离视点的距离为n,远截面离视点的距离为f,且一般取近截面为视平面。下面推导透视投影标准模型的变换方程。

图5   透视投影的标准模型[4]

设位于视椎体内的任意一点X (x, y, z) 在视平面的透视投影为Xp (xp, yp, zp),从点X和Xp做z轴的垂线,并分别在X-Z平面和Y-Z平面投影,图6是在X-Z平面上的投影结果。

图6  透视投影的相似三角形[6]

根据三角形相似原理 , 可得 :

xp/n = x/z, yp/n = y/z

解上式得 :

xp = x*n/z, yp = y*n/z, zp = n.

上式便是透视投影的变换公式,非常简单,不是吗?需要说明的是,由于透视点始终位于视平面,所以zp恒等于n,实际计算的时候可以不考虑zp。另外还可以从照相机模型来考虑透视投影。将视点E想象为一个虚拟的照相机,视平面想象为胶片,那么图5 也是一个标准的照相机模型。

PS:上述讨论都是基于矩形视平面来考虑的,其实我们可以取视平面为任意形状,比如圆形,此时视景体变为一个圆锥体,当然现在好像还没有圆形的显示装置。另外,我还曾考虑将视平面取为凹面或凸面,此时的投影结果应该是哈哈镜效果吧(纯属想象,没有验证)。还可以想象将视平面放在E的另外一面,这时的投影图像是倒置的,但是不是更接近人的视觉成像模型?另外还可以考虑有两个甚至更多视点的透视投影,总之充分发挥你的相像,或许能得到意想不到的结果。

4 透视投影的一般模型

令世界坐标系的x轴指向屏幕的右方,y轴指向屏幕的上方,z轴指向屏幕外(右手坐标系)。我们在讨论标准模型的时候,曾假设E的坐标为原点,其实视点E除了有位置属性外,还有姿态属性,通常用[L U D]表示(D3D中用的是[R U D]表示),其中L表示视点的左向(Left),U表示上方(Up),D表示朝向(Direction)。在标准模型中,有L=[-1,0,0]T , U=[0,1,0]T , D=[0,0,-1]T 。

透视投影的一般模型研究视点E在任意位置,任意姿态下透视图的生成算法。思路很简单,先将一般模型变换为标准模型,然后使用标准模型的透视投影公式便能计算透视结果。下面研究一般模型变换为标准模型的数学公式。

设一般模型中的点X,其对应在标准模型中的点为Y,那么当视点位于E,姿态为R时,X和Y有如下关系:

X = E+RY

反过来有:

Y = R-1 (X-E)

通常取R为正交阵,即R-1 =RT ,故有

Y = RT (X-E)

把上式改写成齐次矩阵(Homogeneous matrix )的形式有:

式中Hview 便是透视投影从一般模型到标准模型的变换矩阵。

透视投影的原理和实现相关推荐

  1. 透视投影的原理和实现-转载

    原帖地址http://blog.csdn.net/wong_judy/article/details/6283019 透视投影的原理和实现 by Goncely 摘  要 :透视投影是3D渲染的基本概 ...

  2. OpenGL透视投影原理与实现

    透视投影的原理和实现 by Goncely 转自:https://blog.csdn.net/wong_judy/article/details/6283019#t2 摘  要 :透视投影是3D渲染的 ...

  3. openGL--透视投影的原理和实现

    https://blog.csdn.net/wong_judy/article/details/6283019#t2 透视投影的原理和实现 by Goncely 摘  要 :透视投影是3D渲染的基本概 ...

  4. osg-3D世界到屏幕

    标题 前面记录了3D世界如何绘制,今天讨论一下3D世界怎么呈现到屏幕? 1.(模型视图矩阵)model-view matirx 模型矩阵: 用于描述物体在3D世界中的位置,原理是:把模型上所有的顶点从 ...

  5. 视频中的3D人体姿态估计(3D human pose estimation in vide)--------Facebook research: VideoPose3D

    视频中的3D人体姿态估计(3D human pose estimation in video) 解读Facebook AI Research in CVPR2019: <3D human pos ...

  6. DirectX 12 3D 游戏开发与实战第五章内容

    渲染流水线 学习目标: 了解用于在2D图像中表现出场景立体感和空间深度感等真实效果的关键因素 探索如何用Direct3D表示3D对象 学习如何建立虚拟摄像机 理解渲染流水线,根据给定的3D场景的几何描 ...

  7. WebGL简易教程(五):图形变换(模型、视图、投影变换)

    文章目录 1. 概述 2. 详论 1) 模型变换 (1) 平移变换 (2) 缩放变换 (3) 旋转变换 (4) 组合变换 2) 视图变换 (1) 原理 (2) 推导 3) 投影变换 (1) 透视投影 ...

  8. CDR2022首发全新版本性能介绍

    Coreldraw 2022(软件套装全称:CorelDRAW Graphics Suite 2022,简称CDR 2022)官方正式版已经发布(含windows及Mac版).Coreldraw 20 ...

  9. CDR2021新增的功能你知道吗

    Coreldraw 2021新功能简介 ⻚⾯泊坞窗/检查器 CorelDRAW 2021 中新的⻚⾯泊坞窗/检查器简化了多⻚⾯⽂档的⼯作⽅式.它会列出⼀个设计中的所有⻚⾯,您可以轻松管理⻚⾯并快速导航 ...

  10. Understanding 3D Projections(理解3D投影)

    摘  要 :透视投影是3D渲染的基本概念,也是3D程序设计的基础.掌握透视投影的原理对于深入理解其他3D渲染管线具有重要作用.本文详细介绍了透视投影的原理和算法实现,包括透视投影的标准模型.一般模型和 ...

最新文章

  1. 11月份西部数码.wang域名注册量及市场份额统计报告
  2. 【ZZ】编程能力层次模型
  3. 你应该知道的 MongoDB 最佳实践
  4. C++ 如何一次在堆上申请4G的内存?如何设计一个类只能在堆或者栈上创建对象?
  5. “睡服”面试官系列第十一篇之module加载实现(建议收藏学习)
  6. hue集成mysql报错_CDH5.7Hue使用sqoop导出mysql数据报错
  7. Flash,EEPROM差别
  8. win10下出现.net framework 3.5错误代码0x800F081F的问题
  9. 今日分享-ios蓝牙
  10. 使用Spring Environment遇到的问题, 如读取到配置不是自己实际想要的
  11. 如何u盘安装Linux系统CentOS7.2
  12. 一个设计低通巴特沃斯数字滤波器的实例
  13. a+aa+aaa+aaaa+aaaaa.....
  14. 色温(光源,环境,季节)
  15. 灰流丽能无效融合么_游戏王:史上最强融合卡片,不可阻挡,无法逆转!
  16. 无法跟这台计算机识别,跟这台计算机连接的前一个usb设备工作不正常,windows 无法识别它。 这是怎么回事急!!...
  17. 腾讯位置服务JSAPI GL实现文本标记的碰撞避让
  18. 一个汉族朋友学习维吾尔语言文字的心得
  19. LibriSpeech数据集--学习笔记
  20. Java输入输出流详解

热门文章

  1. 计算机英语教学设计,英语教学设计doc范文精选
  2. java牛顿法求方程根_牛顿迭代法 求方程根
  3. UVa11137 - Ingenuous Cubrency
  4. Java使用Spire.pdf提取PDF中想要的图片
  5. Safari浏览器显示网页不全问题解决方法
  6. register int 与 int 的区别
  7. C#指定图片添加文字
  8. 累计分布函数与互补累计分布函数
  9. 微信小程序入门--注册账号
  10. 1 如何制定购车计划