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

投影矩阵推导_矩阵投影变换概要投影变换是计算机图形学的基础,理解并推导投影矩阵也是很有必要的。正交投影比较简单,没有透视失真效果(近大远小)。而透视投影比较符合人类的眼睛感知,平行线在远处会相交于一点。投影是通过一个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)
上一篇 2022年10月4日 下午5:16
下一篇 2022年10月4日 下午5:16


相关推荐

  • IIS服务启动发生意外错误0x8ffe2740的解决方法

    IIS服务启动发生意外错误0x8ffe2740的解决方法如果系统中存在端口冲突就有可能发生本情况.IIS默认使用80端口进行HTTP通信.如果除IIS外的应用程序正在运行并且正在相同的IP地址上使用80端口,在您试图使用IIS管理器启动网站时您也可能收

    2022年7月3日
    34
  • VS2010过期密钥「建议收藏」

    VS2010过期密钥「建议收藏」VS2010 旗舰版可用Key:YCFHQ-9DWCY-DKV88-T2TMH-G7BHP

    2022年6月6日
    32
  • 为“养龙虾”,全网疯抢Mac mini!断货!涨价!

    为“养龙虾”,全网疯抢Mac mini!断货!涨价!

    2026年3月14日
    2
  • win10无法生成常规子目录下的列表_windows无法更新怎么办

    win10无法生成常规子目录下的列表_windows无法更新怎么办1.问题背景Win10只要系统安装好之后会自动生成一系列的系统文件夹,如下:这类文件夹比较特殊,它们比普通文件夹多一个“位置”选项卡,如默认的“下载”文件夹,edge和chrome浏览器会默认下载到这个文件夹,所以新系统拿到手之后,往往都需要将这些文件夹修改到其他硬盘上,不然C盘会因为下载文件的不断增多而变得异常臃肿:如果这个时候你手抖了,需要修改……………

    2026年1月19日
    3
  • mediumtext_mysql数据类型介绍(含text,longtext,mediumtext说明) | 学步园[通俗易懂]

    mediumtext_mysql数据类型介绍(含text,longtext,mediumtext说明) | 学步园[通俗易懂]由MySQL支持的列类型列在下面。下列代码字母用于描述中:M指出最大的显示尺寸。最大的合法的显示尺寸是255。D适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。方括号(“[”和“]”)指出可选的类型修饰符的部分。注意,如果你指定一个了为ZEROFILL,MySQL将为该列自动地增加UNSIGNED属性。TINYINT[(M)][UNSIG…

    2022年5月5日
    602
  • 花了快2个月!Guide自己动手写了一个简单的RPC框架!

    花了快2个月!Guide自己动手写了一个简单的RPC框架!Github 地址 https github com Snailclimb guide rpc framework 欢迎 star 欢迎一起完善 共勉 前言大概 2 个月前 我说过要利用业余时间写一个简单的 RPC 框架 今天 2020 06 05 总算将其开源出来 希望对小伙伴们有帮助 虽说 RPC 的原理实际不难 但是 自己在实现的过程中自己也遇到了很多问题 Guide rpc framework 目前只实现了 RPC 框架最基本的功能 一些可优化点都在下面提到了 有兴趣的小伙伴可以自行完

    2026年3月18日
    2

发表回复

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

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