文章目录

  • 前言
  • 正射投影
  • 透视投影
  • 总结

前言

在webgl中,三维空间中的所有物体不是会都被绘制出来,只有当它在可视范围内时,才会进行绘制。因为不在可视范围中的物体即使绘制也不会在屏幕上显示。除了水平和垂直范围内的限制,WebGL还限制观察者的可视深度,即"能够看多远"。水平视角、垂直视角、可视深度,三者定义了可视空间。常用的可线空间分为两种:

  • 正射投影(orthographic projection)产生的长方体状可视空间
  • 透视投影(perspective projection)产生的锥体状可视空间

正射投影

经过正射投影后,场景中的物体大小尺寸都不会改变,即物体大小与其所在的位置没有关系,如下图所示:物体投影线与投影面保持垂直

正射投影的可视空间如下。其中前后两个面分别称近裁剪面远裁剪面,处于可视空间外的物体不会被渲染到屏幕上。

正射投影要做的事情就是将可视空间的坐标转换至 [-1, 1]的立方体空间中。下面我们来进行正射投影矩阵的推导,假设进行投影转换前坐标为(x,y,z),正射投影转换后坐标为(x‘,y’,z‘),left、right、top、bottom分别简写为l、r、t、b,近裁剪面near和原裁剪面far分别简写为n,f:

  • x => x’

  • y => y’

  • z => z’

由于z方向实际是指向屏幕内的(左手坐标系),因此最终的表达式为z的系数需要乘以-1

将投影矩阵转换为表达式形式:


将:

  • x’ = 2x / (r-l) - (r+l) / r-l
  • y’ = 2y / (t-b) - (t+b) / t-b
  • z’ = -2z / (f-n) - (f+n) / f-n
  • w’ = 1

代入得正射投影矩阵

webgl投影矩阵推导(正射投影、透视投影)相关推荐

  1. 深入理解OpenGL之投影矩阵推导

    深入理解OpenGL之投影矩阵推导 OpenGL流水线中的投影矩阵以及坐标变换 OpenGL中,投影矩阵在Vertex shader中使用,用于变换顶点.一般和Model, View矩阵结合成MVP矩 ...

  2. 斜视锥体投影矩阵推导

    参考网址: https://gameinstitute.qq.com/community/detail/106203 翻译 http://www.terathon.com/lengyel/Lengye ...

  3. c++实现软光栅(二)实现立方体的绘制几个视图矩阵变换投影矩阵推导

    文章目录 顶点数据分析 如何变换到世界空间:Model_Matrix 缩放rotate_matrix 旋转 平移 如何变换到摄像机空间:View_Matrix 如何使视图更加符合人眼视角(产生近大远小 ...

  4. opoengl 投影矩阵的推导

    原文:http://blog.csdn.net/wangdingqiaoit/article/details/39010077 OpenGL学习脚印: 投影矩阵的推导 写在前面 本节内容翻译和整理自h ...

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

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

  6. 投影矩阵(投影变换)解惑

    背景 投影矩阵的推导曾经让我困惑了很久,反思可能是自己数学知识的浅薄,所以很多大神写的关于投影矩阵的推导很明晰还是看不懂,好在经过两周的努力学习和思考,终于弄明白了这个问题,特此做一个总结和大家分享一 ...

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

    图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵 图形流水线中坐标变换过程 模型矩阵:模型局部坐标系和世界坐标系之间的桥梁 1.模型局部坐标系存在的意义 2.根据模型局部坐标系中点求其在世界坐标 ...

  8. WebGL矩阵变换总结(模型矩阵,视图矩阵,投影矩阵)

    矩阵变换总结(模型矩阵,视图矩阵,投影矩阵) 最近在开发项目的时候,常常用到Three.js,用起来很方便.可是,当引擎迭代升级的时候,以前的很多的技巧,并不一定使用最新的引擎.我认为应当对底层的原生 ...

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

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

最新文章

  1. [译]函数式响应编程入门指南
  2. 传输文件过程中遇到异常被中断
  3. Jan 13 - Bulls and Cows; String; HashSet;
  4. arduino 读取当前时间_Arm难以撼动,暴露下的Arduino与RISCV联合体就是个笑话
  5. SpringMVC环境配置全过程IntelliJ IDEA 2020.3.1
  6. 案例39-后台查询订单详情代码实现
  7. js 调用另一个类的方法_一个隐藏在方法集和方法调用中且易被忽略的小细节
  8. iphone如何使用CoreNFC
  9. 分析citibike数据eda
  10. CLR via C# 中关于装箱拆箱的摘录
  11. 【Java 系列笔记】语法基础 + Spring + Spring MVC + SpringBoot + 数据结构
  12. ubuntu nginx 伪静态 设置
  13. SQL:postgis中计算距离和面积
  14. mysql pmm安装_PMM 安装部署
  15. abb变频器如何拷贝_关于ACS800变频器拷贝参数.pdf
  16. 威富通对账单下载并且解析为对象列表展示
  17. Java 10 大装 B 写法,装逼常用代码
  18. Mysql如何存取Emoji表情包
  19. 2018级《程序设计基础(B)II》期末上机考试 重现--SDUT
  20. 【生信分析】生物分子网络构建基础——酶动力学

热门文章

  1. VScode配置latex时 出现 “Cannot find LaTeX root file”且文本无高亮提示,不显示tex图标
  2. 增值税普通发票和增值税专用发票有什么区别?
  3. 分享几个常用的运维 shell 脚本
  4. 当 HR 问到你这些问题时,你该如何回答?
  5. 计算机科学的创始人是谁,谁是计算机的父亲(两个)? . 谁是计算机科学的创始人?...
  6. 利用XFEM模拟裂缝扩展
  7. 进击的数据分析:像炒菜一样做策略
  8. ulimit -SHn 65535含义
  9. 什么是红股什么是转增股
  10. 抓包实战-视频任意看