美文网首页框架搭建
Unity相机透视投影矩阵的推导笔记

Unity相机透视投影矩阵的推导笔记

作者: 大其心宏其量扩其识 | 来源:发表于2022-03-12 21:43 被阅读0次

相机透视投影矩阵的目标是将视锥体内的顶点映射规范观察立方体

透视锥到标准设备坐标
先用相似三角形的原理,计算出x与y在近裁剪面上的投影
image.png
先计算x轴
image.png
同理,再计算y轴
image.png
因为Xp,Yp都与-Ze成反比,因为相机空间的坐标被GL_PROJECTION矩阵转换后还是齐次坐标,最终得到NDC坐标是通过除以裁剪坐标的W-元素来得到的,所以把-Ze当作裁剪坐标的W元素
image.png
接下来根据Xp->Xn, Yp->Yn的映射关系:[r,l] [1, -1],[b,t],[1, -1]得出归一后公式(一次函数)
image.png
把Xp,与Yp代入到公式中
image.png
使方程里的每一项都除以-Ze,使括号里的变成了裁剪坐标Xc,Yc
这样,已经推导出了第一排与第二排
image

求Zn与Xn,Yn不太一样,所有点的Ze投影到近裁剪面上以后都是相同的,但是我们要用Ze来进行裁剪与深度测试,所以我们要反向投影。Z轴与X,Y轴是无关联的,可以用z轴与近裁剪面与远裁剪面相交的两个特殊点[0,0,-n,1],[0,0,-f,1],反推出映射关系中的A,B

image.png

因为在相机空间中,We是1所以简化为


image

在规则观察体里-n映射成-1,-f映射成1,代入方程


image
解方程A,B
image.png
再把Ze与Zn的关系代入
image

得到最终矩阵


OpenGL Perspective Projection Matrix
如果相机视锥是对称的,r=-l, t=-b,投影矩阵可以简化为
image.png
需要注意到Ze与Zn的关系不是线性的,离近裁剪面近的时候变化很大,远的时候变化很小,这会导致深度的精度问题,所以尽可能使用小一些的深度值
Comparison of depth precision

学习参考文章:http://www.songho.ca/opengl/gl_projectionmatrix.html
学习参考文章2:https://zhuanlan.zhihu.com/p/359128442

相关文章

  • Unity相机透视投影矩阵的推导笔记

    相机透视投影矩阵的目标是将视锥体内的顶点映射到规范观察立方体内 先用相似三角形的原理,计算出x与y在近裁剪面上的投...

  • three.js(12)-透视投影相机

    透视投影相机PerspectiveCamera 透视投影相机比较常用,也肥肠容易理解。比如电影院的投影仪,当我们把...

  • 03-Three.js 场景对浏览器的自适应

    透视投影相机PerspectiveCamera自适应渲染 正投影相机OrthographicCamera自适应渲染

  • Three.js基础探寻三——透视投影照相机

    5.透视投影照相机构造函数 透视投影照相机(Perspective Camera)的构造函数是: - fov 可视...

  • 投影矩阵推导

    1、正交投影 上图就是unity中的摄像机,把摄像机设置为正交投影,我们可以在inspector界面调整clipp...

  • three.js学习笔记(一)

    1、OrthographicCamera 正交投影照相机 2、PerspectiveCamera 透视投影照相机 ...

  • 透视投影变换就是三维变换

    透视投影(Perspective Projection)变换推导[https://www.cnblogs.com/...

  • 相机投影方式

    相机分为: 透视投影相机:也叫中心投影,较为接近视觉效果正交投影相机:也叫平行投影,没有近大远小的效果 中心投影 ...

  • webgl初级

    四大组建:一、相机1、透视相机:透视投影符合人们心里习惯,即离视点近的物体大,离视点远的物体小。2、正投影相机:就...

  • 变换:向量和矩阵

    主要使用了: 矩阵构造(平移、旋转、综合变换) 模型视图矩阵 三角形批次类(创建花托) 投影矩阵(透视投影) 示例...

网友评论

    本文标题:Unity相机透视投影矩阵的推导笔记

    本文链接:https://www.haomeiwen.com/subject/xfmthltx.html