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

投影矩阵推导_矩阵投影变换概要投影变换是计算机图形学的基础,理解并推导投影矩阵也是很有必要的。正交投影比较简单,没有透视失真效果(近大远小)。而透视投影比较符合人类的眼睛感知,平行线在远处会相交于一点。投影是通过一个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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 字典最外层使用_python字典底层实现

    python 字典最外层使用_python字典底层实现前言问题1:python中的字典到底是有序还是无序问题2:python中字典的效率如何python字典底层原理在Python3.5以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插

    2022年7月31日
    6
  • 帝国cms“建立目录不成功,请检查目录权限”的解决方法

    帝国cms“建立目录不成功,请检查目录权限”的解决方法

    2021年11月17日
    37
  • 网吧服务器发消息,网吧盗号常见途径总结以及解决办法

    网吧服务器发消息,网吧盗号常见途径总结以及解决办法近期有部分网吧反馈,网吧随机出现盗号问题,主要反馈现像是:QQ提示账号异常登录和乱发消息等、CF/wegame/吃鸡账号被盗等目前发现盗号问题主要有以下几种途径:一.网吧本地内部环境中毒引起的盗号问题1.服务器中毒处理方法:服务器安装火绒,查杀下C盘和内存,查完杀完毒后把火绒卸载掉以免识杀游戏文件2.服务器被入侵,加入了开机启动项带第三方增值引起处理方法:将启动项先关掉,一项一项加上去测试,直到…

    2022年7月26日
    24
  • Windows 家族的十二种常用密码破解法

    Windows 家族的十二种常用密码破解法

    2021年8月7日
    78
  • pycharm配置tensorflow环境_pycharm run configuration

    pycharm配置tensorflow环境_pycharm run configuration先要安装Pylint:我用的python3pip3installpylintpip3installflake8进入PyCharm,从菜单栏,依次进入:File->Settings->Tools->ExternalTools。“+”,进行添加。需要填写的部分分别是:“Name”,“ToolSettings->Programs”、“To…

    2025年11月6日
    1
  • xps 转 pdf android版,xps文件转换pdf

    xps 转 pdf android版,xps文件转换pdfXPS阅读器是一款专门为XPS格式的文件而打造的阅读器,能够帮助用户在这款软件中对XPS文件一键阅读,并且能够随时打开。对于不知道用什么打开xps文件的朋友可以下载这款专用阅读器,它还能对xps文件进行格式转换。软件功能1、使用xpsviewer,你可以创建他人无法篡改而且打印效果始终与屏幕显示保持一致的电子文档与他人共享。典型的例子包括合同、备忘录、简历、新闻稿和报表。2、XML页面规范(…

    2022年6月4日
    31

发表回复

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

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