齐次裁剪矩阵(投影矩阵)ProjectionMatrix参数分析以及NDC坐标原理解释

这篇具有很好参考价值的文章主要介绍了齐次裁剪矩阵(投影矩阵)ProjectionMatrix参数分析以及NDC坐标原理解释。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

齐次裁剪矩阵(投影矩阵)ProjectionMatrix参数分析以及NDC坐标原理解释

在观察空间中,我们可以通过近平面(near plane)n,和远平面(far plane)f,垂直视场角 a 以及纵横比 r 这4个参数来表述一个以原点作为中心的视锥体。横纵比公式: r = width/height(宽除以高);
出于理解,我们把高设置为2,那么宽必须满足 r = w/h = w/2 ;w = 2r;图1为垂直视场截面,图2为水平视场截面,d为原点距离近平面的距离,α为垂直视场角,根据图我们可以求得 :

tan(α/2) = 1/d ,继而求得 d = 1/tan(α/2) 继而求得 d = cot(α/2);

再根据图2 (β 为水平视场角)求得

tan(β/2) = r/d 把上式求得的d 带入 继而求得tan(β/2) = r/cot(α/2) = r·tan(α/2)

所以,一旦给定垂直视场角α和纵横比r,我们必能求出水平视场角β
β = 2arctan(r*tan(α/2)) ;(看不懂这个公式没关系,这个只需要理解要推导出视角一定要用到α和r就行了)

裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
图一
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
图二

那么我们拿到了点(x,y,z)之后如何得出在近平面得(x‘,y‘,d) 呢
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
通过相似三角形的性质我们可以发现:
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
同时可以看出如果点(x,y,z)位于近平面内,当且仅当:
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
NDC坐标(规格化坐标):由于在计算过程中,要保证观察空间里的投影窗口的高为2,宽为2r,但是如果投影窗口的尺寸依赖于纵横比r的话便会产生一个问题:由于硬件会涉及到一些与投影窗口大小有关的操作(比如将投影窗口映射到后台缓冲区等),这表示我们还需要将r告诉硬件,所以如果能去除横纵比r的以来,那么处理过程会更简单,这就是ndc坐标的由来,对此,我们的解决办法是将x坐标上的投影区间从[-r,r] 缩放至区间为[-1,1]

-r≤x‘≤r
不等式除以r得:
-1≤x‘/r≤1

得此映射之后,x坐标和y得坐标成为了ndc坐标。此时,若点(x,y,z)位于近平面之中,得:
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
我们可以直接求出以ndc坐标来表示得x轴和y轴上得投影坐标:
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染

注意,在ndc坐标中,投影得窗口得高和宽都是2,所以它的大小是固定的,硬件也就无需知道纵横比,但是我们一定要确保将投影坐标映射到ndc空间内。

投影矩阵
由于上图中得公式为非线性公式,我们一分为二,将线性和非线性拆分开处理,非线性部分要除以z的计算过程。我们还将对z坐标进行归一化处理;这意味着在执行非线性部分除以z的计算时,我们却无最初的z坐标可用。也就是说,我们一定要在此变换之前保存早先传入的初始z坐标。为了做到这一点,我们要利用齐次坐标将输入的z坐标复制到输出的w坐标。根据矩阵的乘法运算法则,需要令元素[2][3] = 1以及元素[2][3] = 0来加以实现(这里采用的是以0为基准的索引)。
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
可以看到,我们在矩阵中设置了常量A和常量B,利用他们即可把输入的z坐标变换到归一化范围。令任意点(x,y,z,1)与该矩阵相乘将会得到:
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
在顶点与投影矩阵相乘之后(即线性部分),我们还要通过将每个坐标分别除以w = z(即非线性部分来完成整个变换过程)
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染图4
归一化z深度

前面我们说到要用矩阵表示投影关系,得到了一个公式是由线性部分和非线性部分组成,我们把线性和非线性的部分提取出来,把线性部分放到m11和m22的位置,留下一个非线性的z保留进矩阵的剩余部分,为了实现深度缓冲算法,我们任然需要保留这些3D的深度信息,就像Direct3D希望把x、y坐标映射归一化范围一样,深度坐标需要归一化区间为[0,1]以内。我们设立一个g(z)来把z坐标从区间[n,f]映射到0、1之间。由于该函数具有保序性,即归一化处理之后,深度关系保持不变。
从图4的公式可以看出,z坐标经过一下变换的处理
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
现在,我们需要根据下列约束求出对应的A和B:
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
得:裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
把B带入条件,解得A
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
所以:
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
根据函数g得图像可以看出,他是严格递增得非线性函数
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
既然已经求得了A和B,我们就可以确定出完整得透视投影矩阵
裁剪矩阵,矩阵,线性代数,unity,unreal engine 5,图形渲染
在顶点乘以投影矩阵之后但还未进行透视剔除法之前,几何体会处于所谓的齐次裁剪空间(clip space)或投影空间中。待完成透视除法之后,便是用规格化设备坐标(NDC)来表示几何体了。文章来源地址https://www.toymoban.com/news/detail-840510.html

到了这里,关于齐次裁剪矩阵(投影矩阵)ProjectionMatrix参数分析以及NDC坐标原理解释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity | 向量、矩阵、齐次坐标

    目录 一、向量点乘叉乘 1.点乘 1.1 公式 1.2 几何意义 2.叉乘 2.1 公式 2.2 几何意义 二、矩阵点乘叉乘 1.矩阵 2.矩阵的点乘 3.矩阵的叉乘 三、矩阵旋转 四、齐次坐标         又称内积,结果是个标量, 1.1 公式         向量a与向量b点乘的计算公式有两个: a·b=(x1, y1, z1)·

    2024年02月16日
    浏览(33)
  • 随手笔记——关于齐次变换矩阵的理解

    齐次变换矩阵的几种解释, 主要从坐标系表示(coordinate representation)、坐标系变换(coordinate transformation)、点的操作(point operator)进行简单说明 齐次变换矩阵可以用来表示一个坐标系,旋转矩阵代表的是坐标系{B}三个轴的单位矢量在坐标系{A}中的投影,平移部分代表的是

    2024年02月16日
    浏览(41)
  • 随手笔记——关于齐次变换矩阵的左乘与右乘

    关于齐次变换矩阵的左乘与右乘问题,本质上是所有的变换都相对于最开始的坐标系,还是所有变换都相对于新得到的坐标系的问题。 这里直接给出结论,所有的变换都相对于最开始的坐标系用左乘;所有变换都相对于新得到的坐标系用右乘。 注:如果想要深入理解,“所

    2024年02月16日
    浏览(48)
  • 矩阵理论| 特殊矩阵:幂等矩阵、投影、正交投影

    投影矩阵 /幂等矩阵 (idempotent matrix) P mathbf P P 满足 P 2 = P P^2=P P 2 = P ,也即 P ( I − P ) = 0 P(I-P)=0 P ( I − P ) = 0 幂等矩阵 P P P 的几何意义:将向量 x mathbf{x} x 投影至 P P P 的列空间 C ( P ) C(P) C ( P ) 内 而 P 2 = P P^2=P P 2 = P 的意义就是“投影两次等效于投影一次” 投影也分为两

    2024年02月06日
    浏览(48)
  • 齐次矩阵的理解深入和在图形学、Unity中的应用

    在探讨图形学和Unity中的3D编程时,我们经常会遇到一个非常核心的数学工具—— 齐次矩阵 。这篇文章将一步步深入地探讨齐次矩阵的基本概念、它在图形学中的应用,以及如何在Unity中利用这一概念来创建令人震撼的3D场景。 首先,我们来聊聊什么是齐次坐标。在二维空间

    2024年01月22日
    浏览(42)
  • 使用pytorch查看中间层特征矩阵以及卷积核参数

    这篇是我对哔哩哔哩up主 @霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 1和4是之前讲过的alexnet和resnet模型 2是分析中间层特征矩阵的脚本 3是查看卷积核参数的脚本 1设置预处理方法 和图像训练的时候用的预处理方法保持一致 2实例化模型 3载入之前的模型参数

    2024年02月04日
    浏览(39)
  • webgl投影矩阵推导(正射投影、透视投影)

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

    2024年02月02日
    浏览(49)
  • 第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵

    第一章 OpenGL ES 基础-屏幕、纹理、顶点坐标 第二章 OpenGL ES 基础-GLSL语法简单总结 第三章 OpenGL ES 基础-GLSL渲染纹理 第四章 OpenGL ES 基础-位移、缩放、旋转原理 第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵 模型都是3D的,但屏幕是2D的。如何将3D空间投影到2D平面,还能保

    2024年03月09日
    浏览(44)
  • 【计算机视觉】二、图像形成:1、向量和矩阵的基本运算:线性变换与齐次坐标

    x = [ x y ] boldsymbol{x} =begin{bmatrix}x\\\\yend{bmatrix} x = [ x y ​ ] 1. 平移变换 [ x ′ y ′ ] = [ x y ] + [ a b ] begin{bmatrix}x\\\'\\\\y\\\'end{bmatrix} = begin{bmatrix}x\\\\yend{bmatrix} + begin{bmatrix}a\\\\bend{bmatrix} [ x ′ y ′ ​ ] = [ x y ​ ] + [ a b ​ ]   将向量 [ a b ] begin{bmatrix}a\\\\bend{bmatrix} [ a b ​ ] 加到 [

    2024年03月17日
    浏览(43)
  • 线性代数拾遗(6)—— 向量空间投影与投影矩阵

    参考:麻省理工线性代数 阅读本文前请先了解矩阵四个基本子空间,参考:线性代数拾遗(5) —— 矩阵的四个基本子空间 考察二维平面投影,如下将向量 b pmb{b} b 投影到向量 a pmb{a} a 方向,得到 a pmb{a} a 的子空间中的向量 p pmb{p} p ,假设是 a pmb{a} a 的 x x x 倍 如图可见

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包