斜投影矩阵的性质_锥体体积怎么推导

斜投影矩阵的性质_锥体体积怎么推导参考网址:https://gameinstitute.qq.com/community/detail/106203翻译http://www.terathon.com/lengyel/Lengyel-Oblique.pdf原文http://www.lsngo.net/2018/01/07/graphics_mirrorcamera_2/参考书籍:Mathematics.for.3D…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

参考网址:
https://gameinstitute.qq.com/community/detail/106203 翻译
http://www.terathon.com/lengyel/Lengyel-Oblique.pdf 原文
http://www.lsngo.net/2018/01/07/graphics_mirrorcamera_2/
参考书籍:
Mathematics.for.3D.Game.Programming.and.Computer.Graphics,.Lengyel,.3ed,.Course,.2012

在这里插入图片描述
上图在:Mathematics.for.3D.Game.Programming.and.Computer.Graphics
P119中。
在这里插入图片描述
上图是裁剪空间中左右、远近裁剪平面的法线,上下的屏幕在表格中。

讨论下平面变换方程:
我们知道法线变换矩阵是不能用M矩阵直接变化的,而是通过M的逆矩阵的转置矩阵进行变换。
证明如下:
https://blog.csdn.net/wodownload2/article/details/88823649

也就是说,如果使用M矩阵代表的时候透视矩阵。
而同样我们知道了,NDC的空间中的六个面的方程了,那么则存在如下的关系:
M矩阵的逆矩阵的转置矩阵,变换透视空间的平面,就等于了NDC空间的平面方程了。
等式如下:
M逆再转置*透视空间平面=NDC空间的平面
所以透视空间的平面等于如下:
透视空间平面=(M逆再转置再逆)NDC空间的平面
也就是:
透视空间平面=M转置
NDC空间的平面

所以:
透视空间的近平面=M转置*(0,0,1,1)=M4+M3
透视空间的远平面=M转置*(0,0,-1,1)=M4-M3
其他类似推导。

其他参考网址:
https://blog.csdn.net/yinhun2012/article/details/84236202 //矩阵逆与矩阵转置的证明
https://blog.csdn.net/softwarekid/article/details/45055253 //为什么不是在透视除法后做裁剪
https://gameinstitute.qq.com/community/detail/113246 //冯乐乐裁剪矩阵
http://www.devacg.com/?post=522 //关于裁剪空间写的比较好的文章

unity里面的摄像机透视投影矩阵输出:
在这里插入图片描述

由之前的博客可以知道unity使用的是opengl的投射投影矩阵,将其z映射到-1到1,所以投影矩阵为:
在这里插入图片描述

下面,介绍如何求的l,r,t,b。因为n和f已经知道了,n=1,f=4.
在这里插入图片描述

在这里插入图片描述
我现在想求左边的视锥体的平面方程,为了简单起见,我们把摄像机移动到原点位置。
求平面的时候,至少需要三个点的位置信息。不妨求ABC三个点的坐标。

在这里插入图片描述

添加几条辅助线如下所示:
在这里插入图片描述
可以知道C点坐标为(0,4tan(22.5),4)
AC的长度为4
tan(22.5)
而屏幕的宽高比为4:3
在这里插入图片描述
所以EA/AC=4/3
所以EA=4tan(22.5)4/3=16tan(22.5)/3
所以E点的坐标为(-16
tan(22.5)/3,0,4)
所以D点的坐标为(-16tan(22.5)/3,4tan(22.5),4)
所以现在可以求出平面的方程了:
向量BD=(-16tan(22.5)/3,4tan(22.5),4)
向量BE=(-16*tan(22.5)/3,0,4)

在这里插入图片描述

而我们知道裁剪空间的左平面为(1,0,0,1)
投影矩阵P为:
在这里插入图片描述
对于摄像机空间的点Q通过乘以投影矩阵P,就得到了裁剪空间的点Q’。
而摄像机空间的平面C,需要通过乘以P的逆转矩阵才能得到裁剪空间的平面。
所以我们有如下的公式:
P逆转*C=C’

在这里插入图片描述

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188367.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CSS3选择器 | 每个前端开发者必须要掌握的技术

    CSS3选择器 | 每个前端开发者必须要掌握的技术目录属性选择符伪类选择符CSS3属性CSS3自适应属性选择符如果能够灵活运用属性选择器,目前为止需要依靠id或class名才能实现的样式完全可以使用属性选择器来实现。E[att]{}:选择具有att属性的E元素E[att=”val”]{}:选择具有att属性且属性值等于val的E元素E[att~=”val”]{}:用于选取属性值中包含指定词汇的元素E[att|=”val…

    2022年7月27日
    8
  • js indexOf()用法

    js indexOf()用法<1>indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置。语法stringObject.indexOf(searchvalue,fromindex)参数 描述 searchvalue 必需。规定需检索的字符串值。 fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是0到stringObj…

    2022年7月12日
    19
  • http接口开发与调用案例[通俗易懂]

    http接口开发与调用案例[通俗易懂]http接口开发与调用案例

    2022年5月15日
    45
  • laravel 定时任务通过队列发送邮件[通俗易懂]

    laravel 定时任务通过队列发送邮件

    2022年2月15日
    44
  • mysql转换字符串为数字_mysql字符与数字转换「建议收藏」

    mysql转换字符串为数字_mysql字符与数字转换「建议收藏」本节内容:mysql字符与数字转换的方法1,将字符的数字转成数字,比如’0’转成0可以直接用加法实现。例如:将pony表中的d进行排序,可d的定义为varchar:复制代码代码示例:select*fromponyorderby(d+0)2,在进行ifnull处理时,比如ifnull(a/b,’0′)会导致a/b成了字符串,因此需要把’0’改成0。3,比较数字和varchar时…

    2022年5月30日
    101
  • Splint介绍

    Splint介绍1 静态分析工具 VS 编译器编译器负责把 C 源程序快速 高效地转变为可执行文件 不对代码做类型检查 特别是对分别编译的程序 有益于做到快速与高效 Lint 没有 高效 的要求 可以花更多时间对代码进行更深入 仔细的检查 2 C 代码静态分析工具 Its4 读取一个或多个 C C 源程序 将每个源程序分割成函数标志流

    2025年11月11日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号