投影矩阵推导_矩阵投影变换

投影矩阵推导_矩阵投影变换概要投影变换是计算机图形学的基础,理解并推导投影矩阵也是很有必要的。正交投影比较简单,没有透视失真效果(近大远小)。而透视投影比较符合人类的眼睛感知,平行线在远处会相交于一点。投影是通过一个4×4的矩阵来完成的,将视锥映射成标准观察体(齐次裁剪空间)。正交投影OpenGLOpenGL采用的是右手坐标系,z轴朝屏幕向外,因此观察方向是朝着z轴负方向的,那么将x,y,z坐标从区间[l,r],

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

Jetbrains全系列IDE稳定放心使用

概要

投影变换是计算机图形学的基础,理解并推导投影矩阵也是很有必要的。正交投影比较简单,没有透视失真效果(近大远小)。而透视投影比较符合人类的眼睛感知,平行线在远处会相交于一点。
投影是通过一个4×4的矩阵来完成的,将视锥映射成标准观察体(齐次裁剪空间)。

正交投影

OpenGL

OpenGL采用的是右手坐标系,z轴朝屏幕向外,因此观察方向是朝着z轴负方向的,那么将x,y,z坐标从区间[l, r], [b,t], [-n, -f]映射到[-1, 1]的函数为:
这里写图片描述

这里写图片描述

这里写图片描述
得到投影矩阵:
这里写图片描述

当然也可以用一个平移和缩放矩阵的级联矩阵,来达到一样的效果。
这里写图片描述

DirectX

DirectX则是采用左手坐标系,z轴和观察方向是一致的,因此只需要将z轴坐标从[n, f]映射到[0, 1],x和y轴则和OpenGL是一样的。
这里写图片描述

这里写图片描述

透视投影

OpenGL

设P(Px, Py, Pz, 1)是在视锥体内的一点,那么它在近平面z=-n上的投影点,利用相似三角形原则,可以得到:
这里写图片描述

类似于正交投影,将x,y轴坐标映射到[-1, 1]区间内,得到:
这里写图片描述

然而和正交投影不同,z轴的坐标并不是线性的。在光栅化过程中,必须对z坐标的倒数进行插值,因此需要建立1/z的映射函数,这样就可以对投影深度进行插值,映射函数的形式如下:
这里写图片描述

将[-n, -f]映射到[-1, 1],可以得到:
这里写图片描述

解这个简单的二元一次方程组,可以得到A,B的值
这里写图片描述

这样就得到了z轴上的映射函数:
这里写图片描述

3D点(x, y, z)等价于齐次坐标(-xPz, -yPz, -zPz, -Pz),因此x,y,z分量都乘以-Pz得到:
这里写图片描述

得到投影矩阵:
这里写图片描述
变换后的齐次坐标,w分量为-Pz,

DirectX

DirectX的区别在于近平面为z=n,并且要将[n, f]映射到[0, 1],经过类似的计算,可以得到
这里写图片描述

得到投影矩阵:
这里写图片描述

参考资料

《3D游戏与计算机图形学中的数学方法》
《实时计算机图形学2nd》

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

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

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


相关推荐

  • intellij idea2021 beta 激活码_通用破解码[通俗易懂]

    intellij idea2021 beta 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    78
  • phpmyadmin安装教程及配置设置

    phpmyadmin安装教程及配置设置.一般网上下载到的phpmyadmin是一个压缩包,我们将其释放到htdocs目录中,例如htdocs\phpmyadmin。  2.打开phpmyadmin目录,在此目录下是否有config.sample.inc.php文件,如果存在,那么将其改名为config.inc.php。(根据版本不同,有可能直接就有config.inc.php文件,那就无需改名,也有可能根本就没有config.

    2022年6月1日
    27
  • htaccess文件中RewriteRule 规则参数介绍

    htaccess文件中RewriteRule 规则参数介绍.htaccess文件<IfModulemod_rewrite.c>RewriteEngineonRewriteCond%{REQUEST_FILENAME}!-dRewriteCond%{REQUEST_FILENAME}!-fRewriteRule^(.*)$index.php/$1[QSA,PT,L]</IfModule&gt…

    2022年7月15日
    16
  • 解决Ubuntu18.04版本高分辨率下导致字体过小问题

    解决Ubuntu18.04版本高分辨率下导致字体过小问题我所使用的是小米笔记本,显示屏是3.2K的分辨率。由于分辨率太高了,然后在ubuntu18.04的版本下显示的字体很小,小到都看不清了那种。于是查找了调整18.04版本字体大小的方法如下:安装gnome-tweaks工具sudoapt-getinstallgnome-tweaks安装完之后,直接在终端输入gnome-tweaks即可运行该工具。然后调整缩放比例,因为我的电脑分辨率是3.2K,所以我调整的缩放比例是2倍刚刚好,如下图:调整完之后,直接关闭该工具。再次回到ubunt

    2022年7月21日
    29
  • 物联网架构在现有互联网_物联网行业发展现状及整体体系结构

    物联网架构在现有互联网_物联网行业发展现状及整体体系结构1.说明  这一小节,也不具体讲些什么了。最近一个半月都在摸鱼,没什么事做,慢慢学习着SpringBoot和SpringCloud。下面两张图是进行的一次小结。以后随着深入,整个架构肯定是会变的。现在记录一下,每个项目成长都是有一个过程的。…

    2022年9月18日
    4
  • 增加流水线段数不能提高cpu频率_cpu流水线是什么意思

    增加流水线段数不能提高cpu频率_cpu流水线是什么意思关注、星标公众号,不错过精彩内容素材来源:网络编辑整理:strongerHuang为什么有些CPU的主频更低,但运算效率却更高呢?比如:51单片机30M主频,STM32单片机20M主频,…

    2022年8月20日
    9

发表回复

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

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