webgl投影矩阵推导(正射投影、透视投影)
文章目录
- 前言
- 正射投影
- 透视投影
- 总结
前言
在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投影矩阵推导(正射投影、透视投影)相关推荐
- 深入理解OpenGL之投影矩阵推导
深入理解OpenGL之投影矩阵推导 OpenGL流水线中的投影矩阵以及坐标变换 OpenGL中,投影矩阵在Vertex shader中使用,用于变换顶点.一般和Model, View矩阵结合成MVP矩 ...
- 斜视锥体投影矩阵推导
参考网址: https://gameinstitute.qq.com/community/detail/106203 翻译 http://www.terathon.com/lengyel/Lengye ...
- c++实现软光栅(二)实现立方体的绘制几个视图矩阵变换投影矩阵推导
文章目录 顶点数据分析 如何变换到世界空间:Model_Matrix 缩放rotate_matrix 旋转 平移 如何变换到摄像机空间:View_Matrix 如何使视图更加符合人眼视角(产生近大远小 ...
- opoengl 投影矩阵的推导
原文:http://blog.csdn.net/wangdingqiaoit/article/details/39010077 OpenGL学习脚印: 投影矩阵的推导 写在前面 本节内容翻译和整理自h ...
- 【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵
转自:图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵_sherlockreal的博客-CSDN博客_视角矩阵 图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵 图形流水线中坐标变换过程 ...
- 投影矩阵(投影变换)解惑
背景 投影矩阵的推导曾经让我困惑了很久,反思可能是自己数学知识的浅薄,所以很多大神写的关于投影矩阵的推导很明晰还是看不懂,好在经过两周的努力学习和思考,终于弄明白了这个问题,特此做一个总结和大家分享一 ...
- 图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵
图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵 图形流水线中坐标变换过程 模型矩阵:模型局部坐标系和世界坐标系之间的桥梁 1.模型局部坐标系存在的意义 2.根据模型局部坐标系中点求其在世界坐标 ...
- WebGL矩阵变换总结(模型矩阵,视图矩阵,投影矩阵)
矩阵变换总结(模型矩阵,视图矩阵,投影矩阵) 最近在开发项目的时候,常常用到Three.js,用起来很方便.可是,当引擎迭代升级的时候,以前的很多的技巧,并不一定使用最新的引擎.我认为应当对底层的原生 ...
- 【转】投影矩阵的推导
[转]投影矩阵的推导 原文:https://www.cnblogs.com/wonderKK/p/5695116.html 博主: 这篇文章写得非常好,对投影矩阵的推导清晰明了,但有个错误:推导的全程 ...
最新文章
- [译]函数式响应编程入门指南
- 传输文件过程中遇到异常被中断
- Jan 13 - Bulls and Cows; String; HashSet;
- arduino 读取当前时间_Arm难以撼动,暴露下的Arduino与RISCV联合体就是个笑话
- SpringMVC环境配置全过程IntelliJ IDEA 2020.3.1
- 案例39-后台查询订单详情代码实现
- js 调用另一个类的方法_一个隐藏在方法集和方法调用中且易被忽略的小细节
- iphone如何使用CoreNFC
- 分析citibike数据eda
- CLR via C# 中关于装箱拆箱的摘录
- 【Java 系列笔记】语法基础 + Spring + Spring MVC + SpringBoot + 数据结构
- ubuntu nginx 伪静态 设置
- SQL:postgis中计算距离和面积
- mysql pmm安装_PMM 安装部署
- abb变频器如何拷贝_关于ACS800变频器拷贝参数.pdf
- 威富通对账单下载并且解析为对象列表展示
- Java 10 大装 B 写法,装逼常用代码
- Mysql如何存取Emoji表情包
- 2018级《程序设计基础(B)II》期末上机考试 重现--SDUT
- 【生信分析】生物分子网络构建基础——酶动力学