投影矩阵的推导_分块矩阵的行列式公式

投影矩阵的推导_分块矩阵的行列式公式看了好几篇关于投影矩阵的文章,在z坐标的推导上,没有提到为什么z’和1/z成线性关系,而是通过结论中的投影矩阵,即已知z’=(zA+B)/w,并且x和x’,y和y’关系式中分母都有-z,所以w为-z,然后(-n,-f)映射到(-1,1),求出A、B,得到z’和z的关系。这是用结论去反推过程,过程再得到结论,这样的逻辑我觉得不对,我认为,应该是先得到x,y,z各自的关系式,才去构造出投影矩…

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

Jetbrains全系列IDE稳定放心使用

看了好几篇关于投影矩阵的文章,在z坐标的推导上,没有提到为什么z’和1/z成线性关系,而是通过结论中的投影矩阵,即已知z’= (zA + B)/w,并且x和x’,y和y’关系式中分母都有-z,所以w为-z,然后(-n,-f)映射到(-1,1),求出A、B,得到z’和z的关系。

这是用结论去反推过程,过程再得到结论,这样的逻辑我觉得不对,我认为,应该是先得到x,y,z各自的关系式,才去构造出投影矩阵。

 

推导x,y坐标

向量投影到近平面,然后映射到NDC,就可以得到,在此不赘述。

(下文Ze同Z,都是投影前向量坐标(观察空间坐标))

Image_Projection_1.1

式1.1

Image_Projection_1.2

式1.2

 

重点讨论如何推导z坐标

z坐标的转换关系,并不是投影得到的,而是根据我们的需要:

1、表示物体原有的前后关系。

2、映射到标准设备坐标,从(-n,-f)映射到(-1,1)(使用右手坐标系)。

3、近处精度更大;因为精度有限,当场景中有许多物体时,按照重要程度来说,首先保证近处物体前后关系是正确;所以要让近处物体的z坐标有更大的表示范围。

 

关键在于3,在这篇文章(https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/01%20Depth%20testing/#_3)中的深度精度部分有提到,如何让近处有更大表示范围,文章中是映射到(0,1),映射到(-1, 1)也是一样的道理。

这里我认为,不只是z’ = A*1/z + B可以达到我们的需求,z’ = A*1/z² + B也可以,还可以构造很多关系式都可以达到我们的需求,但是我们的最终目标是构造一个投影矩阵,投影矩阵*向量/齐次坐标=映射后的向量。

 

整理式1.1,式1.2

Image_Projection_2.1

式2.1

Image_Projection_2.2

式2.2

 

整理后,式2.1、式2.2分母都有Ze,因此选择z'(NDC) = A*1/z(观察空间) + B,即可以和x,y的关系式对应起来,又满足我们的需求

(2019.08.15补充:使用1/z还有一个重要的原因在于,光栅化时,需要进行透视校正插值,因为z'(NDC)与1/z(观察空间)是线性关系(证明:https://www.cnblogs.com/cys12345/archive/2009/03/16/1413821.html或《3D游戏与计算机图形学中的数学方法》 第3版,第5.4章节),所以z'(NDC) = A*1/z(观察空间) + B,另外,如果z'(NDC)直接保存为z(观察空间) ,等到进行透视校正插值,再进行转换,这样做是不好的,因为透视校正插值是逐片元操作,就要重复非常多次的运算,直接保存为A*1/z(观察空间) + B,是逐顶点操作,运算次数就少很多)

z'(NDC) = A*1/z + B,(-n, -f)映射到(-1,1)

Image_Projection_2.3

式2.3

 

式2.1,式2.2,式2.3就可以整理出投影矩阵(负号提取到分母)

Image_Projection_3

 

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

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

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


相关推荐

  • 编程小白的博客日记[通俗易懂]

    编程小白的博客日记[通俗易懂]编程小白的博客日记2018-11-9星期五晴最近放假,一天下来好像什么都没干,不过今天去看了《毒液》,还是非常好看的,最皮我毒液!今天在网上看到一篇文章,是关于在python中使用you-get来下载网上的视频和音乐之类的,先打开cmd安装you-get,之后再打开一个cmd,输入you-get-o地址,然后就能下载视频了,不过如果这个视频在原…

    2022年6月9日
  • BulkInsert方法实现批量导入

    BulkInsert方法实现批量导入BulkInsert方法实现批量导入

    2022年4月25日
  • H3C交换机配置命令大全【转载】[通俗易懂]

    H3C交换机配置命令大全【转载】[通俗易懂]杭州华三通信技术有限公司(简称H3C),致力于IP技术与产品的研究、开发、生产、销售及服务。H3C不但拥有全线路由器和以太网交换机产品,还在网络安全、IP存储、IP监控、语音视讯、WLAN、SOHO及软件管理系统等领域稳健成长。在以太网领域,H3C经历多年的耕耘和发展,积累了大量业界领先的知识产权和专利,可提供业界从核心到接入10多个系列上百款交换机产品。所有产品全部运行H3C自主知识产权的…

    2022年6月20日
  • Flask—jsonify方式(api接口)「建议收藏」

    Flask—jsonify方式(api接口)「建议收藏」GET方法post方法PUT方法DELETE方法GET方法fromflaskimportFlask,jsonify,abort,make_responseapp=Flask(__name__)articles=[{‘id’:1,’title’:’thewaytopyt…

    2022年5月10日
  • 鲸鱼优化算法与其他算法对比_鲸鱼优化算法百度百科

    鲸鱼优化算法与其他算法对比_鲸鱼优化算法百度百科文章目录一、理论基础1、鲸鱼优化算法2、鲸鱼优化算法的改进(1)自适应调整权重(2)自适应调整搜索策略(3)AWOA流程图二、仿真对比与分析三、参考文献四、Matlab仿真程序一、理论基础1、鲸鱼优化算法请参考这里。2、鲸鱼优化算法的改进(1)自适应调整权重由于WOA在优化求解的过程中,线性的惯性权重调整策略若选择不合适,将影响算法的收敛速度。因此,本文提出了一种根据当前鲸鱼种群分布情况来自适应改变权值的大小,公式如下:w=d1⋅(Piworst−Pibest)+d2⋅(xiupper−xilo

    2022年10月5日
  • 八皇后问题详解(四种解法)

    八皇后问题详解(四种解法)如果你去百度百科八皇后这个问题,你会发现人家也是历史上有头有脸的一个问题,最后一句“计算机发明后就有一万种方式解决这个问题”读起来也让程序猿们很快活。闲话少说,开始阐述我的思路:最无脑的解法一定是八个for遍历,浪费了太多的计算资源在各种无用功上面,我们稍微构思一下:首先如何决定下一个皇后能不能放这里可以有两种思路,第一种是尝试维护一个8*8的二维矩阵,每次找到一个空位放下一个皇后就把对应行列对

    2022年6月30日

发表回复

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

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