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

斜投影矩阵的性质_锥体体积怎么推导参考网址: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’

在这里插入图片描述

在这里插入图片描述

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

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