投影矩阵概述

在得到相机坐标后,就相当于得到了人眼观察世界中物体的坐标,但是我们需要把物体映射到一个二维平面上用于显示,投影矩阵就起到把三维坐标映射到二维坐标的作用,同时因为三维空间有深度的概念,因此把Z轴转化成深度。W作为一个系数,用于检测是否超出窗口范围。

投影变换最终的效果是把各个坐标映射到[−1,1][-1,1][−1,1]之间,然后再乘以相应的屏幕高度和宽度,得到最终的屏幕坐标。[−1,1][-1,1][−1,1]的坐标又成为NDC坐标

推导过程参照:http://www.songho.ca/opengl/gl_transform.html ,一般直接套公式使用即可。

透视投影

Mprojection=[2nr−l0r+lr−l002nt+bt−b000−f+nf−n−2fnf−n00−10]\bf{M}_{projection}= \begin{bmatrix} \frac{2n}{r-l} & 0 & \frac{r+l}{r-l} & 0\\ 0 & \frac{2}{n} & \frac{t+b}{t-b} & 0 \\ 0 & 0 & -\frac{f+n}{f-n} & -\frac{2fn}{f-n} \\ 0 & 0 & -1 & 0 \end{bmatrix} Mprojection​=⎣⎢⎢⎡​r−l2n​000​0n2​00​r−lr+l​t−bt+b​−f−nf+n​−1​00−f−n2fn​0​⎦⎥⎥⎤​
n是近平面距离,f是远平面距离。l、r、t、b分别是左右上下
此时变换完成后,还不是NDC坐标,需要每个坐标乘以www分量才行,下面的操作:
[xclipyclipzclipwclip]=Mprojection[xeyeyeyezeyeweye]\begin{bmatrix} x_{clip}\\y_{clip}\\z_{clip}\\w_{clip} \end{bmatrix}=\bf{M}_{projection}\begin{bmatrix} x_{eye}\\y_{eye}\\z_{eye}\\w_{eye} \end{bmatrix} ⎣⎢⎢⎡​xclip​yclip​zclip​wclip​​⎦⎥⎥⎤​=Mprojection​⎣⎢⎢⎡​xeye​yeye​zeye​weye​​⎦⎥⎥⎤​
其中,eye表示相机坐标,clip表示初步映射的坐标。

之后,再除以www分量,得到NDC坐标:
[xndcyndczndc]=[xclip/wclipyclip/wclipzclip/wclip]\begin{bmatrix} x_{ndc}\\y_{ndc}\\z_{ndc} \end{bmatrix}= \begin{bmatrix} x_{clip}/w_{clip}\\y_{clip}/w_{clip}\\z_{clip}/w_{clip} \end{bmatrix} ⎣⎡​xndc​yndc​zndc​​⎦⎤​=⎣⎡​xclip​/wclip​yclip​/wclip​zclip​/wclip​​⎦⎤​
如果NDC不在[-1,1],表示超出屏幕范围,不能显示。

正交投影

正交投影的基本步骤是一致的,只是变换矩阵不同:
[2r−l00−r+lr−l02t−b0−t+bt−b00−2f−n−f+nf−n0001]\begin{bmatrix} \frac{2}{r-l} & 0 & 0 & -\frac{r+l}{r-l} \\ 0 & \frac{2}{t-b} & 0 & -\frac{t+b}{t-b} \\ 0 & 0 & -\frac{2}{f-n} & -\frac{f+n}{f-n} \\ 0 & 0 & 0 & 1 \end{bmatrix} ⎣⎢⎢⎡​r−l2​000​0t−b2​00​00−f−n2​0​−r−lr+l​−t−bt+b​−f−nf+n​1​⎦⎥⎥⎤​

计算机图形学----投影矩阵相关推荐

  1. java 矩阵_(JAVA)计算机图形学与矩阵

    (JAVA)计算机图形学与矩阵 平移 旋转 变比 一)矩阵 1)矩阵的乘法运算 矩阵是计算机图形学的重要工具. 计算机图形学要常常用到 矩阵乘法(矩阵与矩阵相乘). 矩阵(Aij)m*n 与矩阵(Bi ...

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

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

  3. 计算机图形学之GAMES101课程作业3的TBN矩阵

    计算机图形学之GAMES101课程的TBN矩阵详解 具体解释:https://zhuanlan.zhihu.com/p/144357517 这里的e1和e2是由Object Space下的点表示出来的 ...

  4. 计算机图形学-3D观察与图像渲染流水线-投影全解析

    本文目标: 理清OpenGL在3D观察的整个流程. 清楚各个专业术语的含义. 对坐标系变换的数学有所掌握. 1 三维观察与观察流程 1.1 三维观察与照相观察的对比 三维观察过程与使用照相机拍摄照片类 ...

  5. 计算机图形学作业一:旋转与投影

    计算机图形学 作业一:旋转与投影 文章目录 计算机图形学 作业一:旋转与投影 1.题目概述: 2.知识储备: 2.1 MVP变换 2.2罗德里格斯旋转公式 3.解答过程: 4.总结思考: 1.题目概述 ...

  6. 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影)

    接上文 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等 通过三维图形变换,可由简单图形得到复杂图形,三维图形变化则分为三维几何变换和投影变换. 6.1 三维图形几何变换 三维 ...

  7. 计算机图形学中的矩阵转换

    文章目录 前言 数学背景 矩阵变换 2D/3D的平移与仿射变换 绕任意轴旋转的罗德里格旋转公式 坐标变换 附录 如何快速入门学习 虎书封面的由来 前言 刷的视频:GAMES101:现代计算机图形学入门 ...

  8. 计算机图形学三维投影程序,三维计算机图形学

    <三维计算机图形学>是科学出版社出版.本书共分17章,内容包括IDE环境与编程基础.基本语法与数据类型.运算操作.流程控制.面向对象程序设计.用户界面编程.文件系统管理.图形图像多媒体编程 ...

  9. 9、计算机图形学——纹理的应用(环境贴图、凸凹贴图、法线贴图以及位移贴图)

    一.环境贴图 比如下面的这张图,左边的是一张表示环境光的纹理,这个纹理表示屋子内部四面八方都是啥样,右边是一个茶壶, 将纹理映射到这个茶壶上,就能茶壶上渲染出周围的环境 还有这样的球形环境贴图(sph ...

最新文章

  1. 开源库nothings/stb的介绍及使用(图像方面)
  2. Hadoop CDH4.5 HBase部署
  3. android存储器,Android——寄存器和存储器的区别
  4. ECharts的简单使用过程
  5. 共享一个邮件发送的程序( share a Mail Sending program)
  6. 【放置奇兵】踩坑记录( 白字、红字、黄字)tips 小技巧
  7. 深入理解C++对象模型-对象的内存布局,vptr,vtable
  8. java try catch 例子_java try catch
  9. 如何对待逐渐疏远的朋友?
  10. Ribbon风格下,依然叫菜单或者菜单卡、菜单页
  11. 网上购物系统数据库分析
  12. 传奇人物____Anders Hejlsberg
  13. [转]RFC1867协议客户端实现
  14. 【BP神经网络】西瓜分类和鸢尾花分类
  15. RBF神经网络理论与实现
  16. 音乐标签修改器——Mp3tag
  17. LVGL学习之初始化和屏幕旋转
  18. 什么软件可以提取视频中的音频制作成手机铃声 1
  19. 集群、负载均衡、分布式 简介
  20. raspberry pi java8_java - Raspberry PI 2 Java 8 JVM错误 - 堆栈内存溢出

热门文章

  1. string转换函数以及hnu暑期实训部分和A+B的例题
  2. STL常用函数总结-stack
  3. 【caffe-windows】 caffe-master 之 matlab接口配置
  4. nlp-tutorial代码注释3-3,双向RNN简介
  5. Python argparse模块详解
  6. 计算机视觉(CV)中HOG算法的主要步骤
  7. 一种编程范式:对拍编程
  8. c/c++教程 - 2.4.2.7~8 类对象作为类成员,static静态成员变量函数
  9. poj 3126 BFS
  10. 斯大林格勒拖拉机厂LCA项目研制成功