相机投影模型
三维计算机图形学的基本问题之一就是三维观察问题:即如何把三维场景投影到要显示的二维图像。大多数经典的解决投影变换方法有两种:正交投影变换和透视投影变化。

正交投影变换用一个长方体来取景,并把场景投影到这个长方体的前面。这个投影不会有透视收缩效果(远些的物体在图像平面上要小一些),因为它保证平行线在变换后仍然保持平行,也就使得物体之间的相对距离在变换后保持不变。简单的说, 正交投影变换忽略物体远近时的大小缩放变化,将物体以原比例投影到截面(如显示屏幕)上,实现这样效果的照相机叫做正交投影照相机,也称正交照相机。

透视投影变换跟正交投影一样,也是把一个空间体(指的是以投影中心为顶点的透视四棱锥)投影到一个二维图像平面上。然而,它却有透视收缩效果:远些的物体在图像平面上的投影比近处相同大小的物体的投影要小一些。跟正交投影不同的是,透视投影并不保持距离和角度的相对大小不变,所以平行线的投影并不一定是平行的了。换言之,透视投影变换能够实现一个物体在玩家近距离比较大,远距离比较小,那么实现这样的效果的照相机就叫做远景照相机。远景照相机常用来开发3D游戏,它的工作原理是通过,根据照相机和物体之间的距离缩放投影的比例(也就是截面的大小)。透视投影跟人的眼睛或相机镜头产生三维世界的图像的原理还是很接近的。下面我们讲解下视椎,如下图:

图中,眼睛所在的位置就是camera所在的位置,viewport就是图中,所有截面的标记区域,显示屏幕也是一个viewport的截面。视锥是一个类似于金字塔形状,它有两个切割面。物体或物体的某些部分外如果被遮挡,就不会被渲染,这就是透视照相机的工作原理。

ThreeJs中的相机类

在ThreeJS中一共有三个关于相机的JS文件,Camera.js、OrthographicCamera.js、PerspectiveCamera.js,分别是抽象相机基类、正交投影相机、透视相机(远景相机)。抽象相机基类Camera是一个使用投影矩阵的相机类,并以此为基础定义两个相机模型。OrthographicCamera实现了正交投影,PerspectiveCamera实现了透视投影,这两个投影模型都很经典并且应用广泛。

抽象相机基类
摄像机的抽象基类。当你建立一个新的自定义相机时应该始终继承这个基类。

Camera是默认定义是在3D空间中的,其初始位置也是根据3D空间的位置定义的。他的坐标系由指向特定方位的单位向量组成,即3D坐标系单位向量。想象一个3D的坐标系,也就是我们高中时候常常使用的立体几何中的坐标系,Camera也是这样的,3D的照相机都是在立体的三维坐标系中建立的。通过 Direction Vector(方向向量)能够让我们告诉WebGL,如何设置Camera的方位,而 position vector(位置向量)则定义了Camera 在3D世界中的位置。

在3D照相机中另个一重要的属性就是 View Frustum(视锥)。在上面的图片中,可以看到一个椎体在视点(图中眼睛的位置)被截去了顶端,这个就是视椎。所有在这个 Frustum(截头锥体)里面的东西都会被显示在屏幕上。这个截头锥体切分出来的被6个切面(clipping planes),分别在ThreeJs中分别命名为:near, far, left, right, top and bottom。在上面的图片中的所看到截头锥体只是整个椎体的一侧。对于近切面它有一个特殊的作用:你可以把它想象成一个取景器取到的图画的表面,这样我们就可以把3D空间转换为2D平面,展示在玩家面前,这个过程在ThreeJs中称为 Projection (投影)。实现这些特定的效果,我们就需要改变照相机的和属性,其实就是改变视锥的属性。

正交/投影相机
正交投影相机的基础是正交投影矩阵。
第三人称摄像机perspectiveCamera
第三人称相机是继承了抽象相机基类而创建的一种特殊相机,第三视角相机的目标是当物体移动时跟随它并保持一定的距离。如果物体移动到摄像机边界后,将造成摄像机剧烈移动。让摄像机跟随一个物体,如玩家控制角色,你需要定义一下如下参数:
1、跟随位置,摄像机跟随的目标物体的位置
2、跟随的方向,摄像机沿哪个方向移动来跟随物体
3、跟随速度
4、跟随距离,摄像机与物体的距离

正交投影变换与透视投影相关推荐

  1. 深入探索正交投影变换

    -潘宏 -2009.4.20 -本人水平有限,疏忽错误在所难免,还请各位数学高手.编程高手不吝赐教 -email: popyy@netease.com 之前我们在<深入探索透视投影变换>以 ...

  2. 【计算机图形学基础】投影矩阵

      最近在重温计算机图形学的基础知识,期望能做到温故知新,加深对其的理解,以便能从容应对工作中各种情况.   小弟水平有限,若有不正确之处,欢迎大家批评指正. 相关文章链接: [计算机图形学基础]线性 ...

  3. 3D投影变换(含透视投影Perspective Projection)

    透视投影变换将场景(世界空间)中的三维点投影到图像(图像/屏幕空间)中的二维点. 假设我们正在绘制一个仅由三维线段组成的模型,任务是将三维位置(在标准坐标系中表示为(x,y,z))坐标映射到图像中的坐 ...

  4. 相机标定(三)—— 正交投影和透视投影变换

    正交投影和透视投影变换 1. 概述 2. 视锥体 3. 透视投影的目的 4. 透视投影的理解和推导 4.1 透视基本原理 4.2 一点透视 4.3 多点透视 4.4 生成透视投影图的方法 5. 图像处 ...

  5. 相机标定(二)—— 投影变换相关基础概述

    本节主要介绍MVP(Model-View-Projection-模型视图投影)相关概念,来说明三维空间中的物体是如何映射到二维屏幕上的.其中包括: View/Camera Transformation ...

  6. 【3】现代计算机图形学(正交投影,透视投影,MVP变换)

    导读 本节主要总结MVP变换(Model-View-Projection),来说明三维空间中的物体是如何映射到二维屏幕上的. 知识点 View/Camera Transformation(视图/相机变 ...

  7. Opengl投影变换理解

    坐标到达观察空间之后,我们需要将其投影到裁剪坐标.裁剪坐标会被处理至-1.0到1.0的范围内,并判断哪些顶点将会出现在屏幕上. 而[-1.0,1.0]构成的正方体又叫规则观察体(Canonical V ...

  8. 计算机图形学笔记(观测变换、模型变换、视图变换、投影变换、视口变换)

    计算机图形学笔记(观测变换.模型变换.视图变换.投影变换.视口变换) 目录 计算机图形学笔记(观测变换.模型变换.视图变换.投影变换.视口变换) 一.简介 1.模型变换(Model transform ...

  9. 三维图形几何变换与投影变换

    一.实验目的 1)掌握4*4矩阵乘法运算的编程实现 2)掌握平移,比例,旋转三种基本三维几何变换矩阵生成 3)掌握正交投影图的生成和绘制方法 二.实验要求 1)三维坐标系的原点位于屏幕中心,X轴水平向 ...

最新文章

  1. Android 线程死锁的案例
  2. iOS 5中的strong和weak关键字
  3. 数据结构与算法 —— 二叉树
  4. 编程通用知识 文件流
  5. Qt图形测绘窗口部件介绍
  6. Scala 深入浅出实战经典 第91讲:Akka第一个案例动手实战架构设计
  7. Android 常用的adb命令
  8. matlab如何创建callback函数_MATLAB作图实例:46:显示复杂的三维对象
  9. 正则表达式批量重命名
  10. 写滚动字幕html5源码,[转载]滚动字幕的源代码
  11. STM32 USB Mass Storage 例程调试笔记
  12. lisp调用布置天正的图块_为啥天正电气图块插到原建筑条件图里显示特别小,高手指点下哈!...
  13. 【实验】基于朴素贝叶斯的新闻分类
  14. 《犯罪心理学》读书笔记(part10)--犯罪心理的性别差异(上)
  15. dis ospf peer 输出
  16. 最新获得淘宝app商品详情原数据 的API
  17. windows防火墙自动开启的原因
  18. 程序员应该选择干前端还是干后端呢?
  19. 编写有效的测试用例及如何进行用例评审
  20. java调用oracle过程,JAVA调用ORACLE存储过程报错

热门文章

  1. Mysql数据库表结构导出工具介绍
  2. 今日学习之Javascript
  3. 通过 磁带机 备份 恢复数据 --201308
  4. 基于winform(C#)的飞鸟小游戏
  5. hive 压缩格式汇总
  6. FAST-LIO2代码解析(三)
  7. Maxcompute 小记1
  8. 写出宏定义 输出一年有多少秒
  9. 网站广告1像素1元,超有创意的百万像素网站
  10. 状态空间方程转换传递函数