先看一下名词;
在矩阵数学中,也有一个名词叫投影矩阵,其定义为:
    若矩阵A既是对称矩阵,又是幂等矩阵,则称A为投影矩阵。

这里说的是3D世界中的投影矩阵;其作用是帮助把3D物体显示在2维计算机平面。

什么是投影
    计算机显示器是一个二维表面,所以如果你想显示三维图像,你需要一种方法把3D几何体转换成一种可作为二维图像渲染的形式。这就是投影做的。
    最简单情形,把3D对象投影到2D表面的方法是简单的把每个坐标点的z坐标丢弃。这过于简单,并且在大多数情况下不是有用。

在OpenGL或者DirectX中,在3D摄像机空间中的点需要映射到视锥体近裁剪面上(也就是投影面)才能在屏幕上看到。

投影公式将变换你的几何体到一个新的空间体中,称为规范视域体(canonical view volume),规范视域体的精确坐标可能在不同的图形API之间互不相同,作为讨论,把它认为是从(-1, -1, 0)延伸至(1, 1, 1)的盒子,这也是Direct3D中使用的。
    一旦所有顶点被映射到规范视域体,只有它们的x和y坐标被用于映射到屏幕上。这并不代表z坐标是无用的,它通常被深度缓冲用于可见度测试。这就是为什么变换到一个新的空间体中,而不是投影到一个平面上。

左手坐标系,摄像机俯视z轴正方向,y轴朝上并且x轴朝右。这是Direct3D中使用的坐标系。下面使用此坐标系。对于右手坐标系系统来说,在计算方面没有明显差异,在规范视域体方面有一点区别。

投影方法,最常见的2种:正交和透视。

正交投影(Orthographic Projection)
    正交投影,之所以这么称呼是因为所有的投影线都与最终的绘图表面垂直,是一种相对简单的投影技术。
    视域体,也就是包含所有你想显示的几何体的可视空间——是一个将被变换到规范视域体的轴对齐盒子;

Direct3D提供了D3DXMatrixOrthoOffCenterLH()()方法构造一个正交投影矩阵;方法名中的"LH"代表了你正在使用左手坐标系。

正交投影矩阵有一个简化形式。考虑几点: 首先,在可见空间中,摄像机定位在原点并且沿着z轴方向观看。第二,你通常希望你的视野在左右方向上延伸的同样远,并且在z轴的上下方向上也延伸的同样远。如果是这样的情况,那么z轴正好直接穿过你视域体的的中心,所以得到了r = -l并且t = -b。换句话说,你可以把r, l, t和b一起忘掉,简单的把视域体定义为1个宽度w和1个高度h,以及裁剪面f和n。这样将得到简化的版本:
     
    Direct3D中D3DXMatrixOrthoLH()方法实现简单版本。

透视投影(Perspective Projection)
    透视投影是稍复杂的一种投影方法,并且用的越来越平凡,因为它创造了距离感,因此会生成更逼真的图像。
    从几何上说,这种方法与正交投影不同的地方在于透视投影的视域体是一个平截头体——也就是,一个截断的金字塔,而不是一个轴对称盒子。
    Direct3D的D3DXMatrixPerspectiveOffCenterLH()方法实现了透视投影公式。
    Direct3D的D3DXMatrixPerspectiveLH()方法生成简化版本的矩阵。

看如下图,正交和透视投影的示意;

一个是直线(右边),一个是斜线;透视投影更真实些;

3D 投影矩阵学习1相关推荐

  1. 3D游戏之投影矩阵算法技术实现

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社 和<Unity3 ...

  2. WEBGL学习【八】模型视图投影矩阵

    版权声明:本文为博主原创文章,未经博主允许不得转载.更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/ ...

  3. 3D中的相机 - 投影矩阵和视图矩阵

    3D中的相机 - 投影矩阵和视图矩阵 3d游戏中,一般通过相机的设置来计算投影矩阵和视图矩阵,比如untiy和cocos,一般情况下我们不用关注如何计算, 可以直接在可视化的编辑器中调整参数就可以了, ...

  4. OpenGL学习: 投影矩阵和视口变换矩阵(math-projection and viewport matrix)

    转自:https://blog.csdn.net/wangdingqiaoit/article/details/51589825 本文主要翻译并整理自 songho OpenGL Projection ...

  5. OpenGL学习脚印: 投影矩阵和视口变换矩阵

    OpenGL中的视图可以利用照相机来进行比拟.产生目标的场景的变过过程类似于相机拍照.此步骤大概分为三个: 1)把相机固定在三角架上,并让它对准场景(视图变换) 2)对场景安排,使得各个物体在招片中的 ...

  6. 线性代数学习笔记5-2:正交投影、投影矩阵、最小二乘法LS、A^T A

    正交投影 二维空间的投影 将向量投影到已知子空间,用线性代数的语言就是:误差向量和该子空间正交 向量的正交,可简单理解为两个向量在几何上垂直,即点积为零:x⋅y=0\boldsymbol x\cdot ...

  7. 【脚下生根】之深度探索安卓OpenGL投影矩阵

    世界变化真快,前段时间windows开发技术热还在如火如荼,web技术就开始来势汹汹,正当web呈现欣欣向荣之际,安卓小机器人,咬过一口的苹果,winPhone开发平台又如闪电般划破了混沌的web世界 ...

  8. 【转】投影矩阵的推导

    [转]投影矩阵的推导 原文:https://www.cnblogs.com/wonderKK/p/5695116.html 博主: 这篇文章写得非常好,对投影矩阵的推导清晰明了,但有个错误:推导的全程 ...

  9. 【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵

    转自:图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵_sherlockreal的博客-CSDN博客_视角矩阵 图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵 图形流水线中坐标变换过程 ...

最新文章

  1. 【每日一算法】填充同一层的兄弟节点
  2. 写代码做副业月入33K+的方法都藏在这几个淘宝大佬的公众号里!
  3. python 作用with_即使__init__方法有效,Python中的With语句仍返...
  4. 新年红包封面来了,3000万份红包封面来啦!到点直领!
  5. 中国移动雄安研究院 2020校园招聘笔试JAVA方向(一)
  6. 基础知识:if判断、while循环、for循环
  7. 教你如何区分描述统计学与推断统计学
  8. Spring学习(22)--- AOP之Advice应用(下)
  9. SAP Spartacus 默认路由配置的工作原理
  10. qt qthead里如何响应信号_Qt 中的多线程技术(翻译)
  11. java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。
  12. JavaScript权威指南(第5版)pdf
  13. python对于设计师有什么用-Python前程无忧深圳UI设计师岗位分析
  14. 迷人的bug--torch.load
  15. ai怎么做波普风圆点_AI绘画教程,绘画波普艺术风格人像
  16. (转载)人工智能在围棋程序中的应用——复旦大学附属中学(施遥)
  17. RuntimeWarning: divide by zero encountered in log错误解决
  18. android+查看root权限管理,如何查看自己的安卓手机有没有Root权限?
  19. 【原理+实战+视频+源码】抖音,快手大热背后——Android 贴心的音视频学习指南来咯!
  20. 想和大家讲述一个普通人的生活:现在差劲不可怕,只要最后是好的就行

热门文章

  1. java fastjson_java操作json数据之fastjson
  2. Vue指令之v-on的缩写和事件修饰符||.stop 和 .self 的区别
  3. Python 路径问题:cv2.error: OpenCV(4.1.0)...size.width>0 size.height>0 in function ‘cv::imshow‘. 解决方法
  4. CTFshow 反序列化 web260
  5. 第四周实践项目3单链表:逆置、连接与递增判断(包含三个程序)
  6. Contains Duplicate II
  7. 正则表达式二 :贪婪与非贪婪
  8. php 发布时间设计,php – 发布和评论的数据库设计
  9. 前后端token机制 识别用户登录信息
  10. 关于爬虫的日常复习(8)—— 实战:request+正则爬取猫眼榜单top100