推导正交投影变换

3D数学-正交投影 文章目录3D数学-正交投影概述正交投影的推导投影矩阵的另一种形式 3D数学-正交投影 好记性不如烂笔头啊,还是记录一下! 概述 正交投影也被称为平行投影,不会出现透视投影的近大远小的扭曲现象, 正交投影的推导 构建正交投影矩阵相对来说会简单一些,由于不存在透视扭曲。 <xe,ye,ze><x_{e}, y_{e}, z_{e}><xe​,ye​,ze​>是相机空间中的一个坐标点 <xn,yn,zn><x_{n}, y_{n}, z_{n}>&. 阅读详情

-潘宏

-2009.4.20 

-本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教

-email: popyy@netease.com

-B站专栏:https://b23.tv/oWsl6PD

 

    之前我们在《深入探索透视投影变换》以及《深入探索透视投影变换(续)》中研究了OpenGL、D3D以及M3G的透视投影变换的原理以及生成方法。这些方法在当前的主流图形API中得到了普遍使用。但关于投影应用,还有一类经常使用的投影方式需要我们深入理解——正交投影,我们在本篇文章里面研究它(这里假设读者已经看过前两篇文章,并理解了绝大多数的理论,因为正交投影比透视投影的推导关系简单得多,因此我们的推导会非常得快,如果读者有任何的不解,请参考前两篇文章或者通过email联系我)。

在具体研究之前我觉得有必要把平面投影的分类简单介绍一下,目的是为了让大家有一个总体的认识,从而更好的理解这个知识体系。请看下图:

 

fig1_category.jpg      

平面投影分为平行投影和透视投影两种类型,后者我们在前两篇文章中介绍了。平行投影则是具有矩形观察体的投影方式(透视投影则是视锥观察体),它不会根据物体离视点的远近缩放物体(透视投影则会)。平行投影可以分成侧投影和正交投影两种类型。这两种类型如何区分呢?我们继续看图吧:

fig2_parallel.jpg

上图中,v是投影平面,n是它的法线。p和q是平面外两点,p’和q’分别是它们在平面上的投影点。q的投影方向向量为Q = 单位化(q’-q),而p的投影方向向量为P = 单位化(p’-p),其中Q不平行于n而P平行于n,则q的投影叫做侧投影,而p的投影叫做正交投影。正交投影是我们今天的研究对象。

实际上上面对平面投影的分类还可以继续向下细分,比如透视投影可以分为一灭点、二灭点以及三灭点透视投影。侧投影则可以继续分为散点侧投、斜二轴侧投等等。而正交投影则可以分成轴侧投影以及多视点正交投影等等。如果读者对此感兴趣,可以参考相关的图形学教程。

接下来我们研究正交投影。分别介绍OpenGL、D3D以及M3G的。我们的环境约定(左右手坐标系、行列向量乘法、CVV范围)仍然尊重相应API自己的设置。

OpenGL正交投影变换

    下图是OpenGL的右手坐标系中观察空间的情形,我们看到的是正交投影的矩形观察体,原点是相机位置,n是近裁剪平面到相机平面的距离,f是远裁剪平面到相机平面的距离。p是观察体中的一个点,p’是它投影之后的点。

fig3_oglvv.jpg

投影之后我们有关系:

fig4_pp.jpg

因为是正交投影,没有统一的投影射线目标点,因此投影之后的x和y不会变,而z则永远地变成了-n,跑到了投影平面上(我们让投影平面和近裁剪平面重合),它已经没用了,则我们用这个没用的信息保存z(为了之后片元操作的时候用),写为:

fig5_p.jpg

从而在z方向上构建 CVV,使得当z在近裁剪平面的时候,az+b=-1,而z在远裁剪平面的时候az+b=1(OpenGL的CVV的z范围是[-1,1],我已经说了三遍了,如果读者感到迷惑不解,强烈建议把前两篇文章理解)。我们算出a和b

fig6_ab.jpg

然后我们就通过当前的结果反推正交投影矩阵版本一

 

fig7_ver1.jpg

 

接着把x和y建立成CVV情形(简单的线性插值)

 

fig8_xy.jpg

 

反推正交投影矩阵版本二(最终版本)

 

 fig9_ogl_ortho.jpg

 

则右边的那个矩阵就是OpenGL的正交投影矩阵,它可以通过glOrtho创建出来。如果你读过并理解了之前两篇文章,你会觉得我的推导越来越简洁利落了:)OpenGL的解决了,下面是D3D的。

D3D正交投影变换

    下图是D3D左手坐标系中观察空间的情形。因为是左手坐标系,因此近裁剪平面在z = n平面,而远裁剪平面在z = f平面。

 fig10_d3dvv2.jpg

投影之后,有                                                                                                    

fig11_pp.jpg

 

用第三个没用的信息保存z,写为

fig12_p.jpg 

使得(D3D的CVV的z范围是[0, 1])

fig13_ab.jpg

反推正交投影矩阵版本一

fig14_ver1.jpg

对x和y进行CVV线性插值

 

fig15_xy.jpg

 

分两种情况讨论(如果读者对此不清楚,请参考第二篇文章《深入探索透视投影变换(续)》):

(1)       投影平面居中,销掉两边的1/2,然后反推正交投影矩阵

 

fig16_case1.jpg

 

后面那个矩阵就是相应正交投影矩阵,这个也是D3DXMatrixOrthoLH方法所使用的情况。

 

(2)       一般情况,投影平面不一定居中,直接通过投影结果反推正交投影矩阵

 

fig17_case2.jpg

 

后面那个矩阵就是相应的正交投影矩阵,这个也是D3DXMatrixOrthoOffCenterLH方法所使用的情况。好了,D3D的也介绍完毕,接下来是M3G的。

 

M3G正交投影变换

M3G是对OpenGL的封装,因此环境和OpenGL的相同,我们从对x和y的插值来看

 

fig18_xy.jpg

 

M3G只使用居中的投影平面,因此可以销掉两边的1/2,得到

 

fig19_case1.jpg

 

接着反推出正交投影矩阵

 

fig20_m3g_ortho.jpg

 

最后那个矩阵就是M3G的正交投影矩阵,也就是Camera.setParallel所使用的形式。

结束语

以上介绍了三个API所使用的正交投影矩阵的生成方法,三者的正交投影矩阵依然可以通过视野(FOV)以及投影平面的宽高比(Aspect Ratio)来设置,这里请读者自行推导,可以参考第二篇文章《深入探索透视投影变换(续)》。

正交投影矩阵和透视投影矩阵一样可以有无穷多个,但原理相同,不同的只是环境。目前正交投影在3D引擎中有着和透视投影同样的地位,它至少是3D用户界面系统的基础。因此,有必要清晰地理解正交投影矩阵和透视投影矩阵的原理,如此才能够真正创建、修改、使用好图形引擎。

 

 

正 交 投 影 正交投影 1.一个向量向另外一个向量作正交投影 xTxx^TxxTx 结果为一个数值 xxTxx^TxxT 结果为一个矩阵 2.一个向量向子空间作正交投影 基矩阵A是子空间H中的基向量组成的矩阵 x′x'x′为向量 b′b'b′ 在子空间H中的坐标 (二维) x′x'x′是a基下的坐标,左乘A后变为b基下的坐标 正视图 俯视图 侧视图 ... 阅读详情

相关推荐

相机标定(三)—— 正交投影和透视投影变换

基础知识1. 概述2. 视锥体3. 透视投影的目的4. 透视投影的理解和推导4.1 透视基本原理4.2 一点透视4.3 多点透视4.4 生成透视投影图的方法5. 图像处理中的透视投影变换 1. 概述 2. 视锥体 3. 透视投影的目的 4. 透视投影的理解和推导 4.1 透视基本原理 4.2 一点透视 4.3 多点透视 4.4 生成透视投影图的方法 5. 图像处理中的透视投影变换 ...

weixin_41480034的博客 1万+

正交投影矩阵-原理及推导

来自:https://blog.youkuaiyun.com/tengweitw/article/details/41174555 二维投影 上图表示的是,向量b在向量a上的投影。显然有例如以下表达式: 当中,P为投影矩阵,由P的表达式能够看出,它具有例如以下性质: 三维投影        三维投影,就是将一个向量投影到一个平面上。同上面一样,如果是将b向量投影到平面上的p向量,则有表达式:...

千寻的博客 5万+

反无人机技术实战解析:从探测到拦截的全方位防御策略

本文深入解析了反无人机(C-UAS)技术的全链条防御策略。从雷达、无线电频谱、光电等多维度探测技术,到数据融合与威胁评估,再到无线电干扰、导航诱骗及物理拦截等核心拦截手段,系统阐述了如何构建从探测到拦截的实战化防御体系,为关键设施、大型活动等场景提供定制化空域安全解决方案。

weixin_29230649的博客 403

【机器学习必知必会系列】高手必备数学教程-线性代数

【机器学习必知必会系列】高手必备数学教程-线性代数 机器学习&人工智能的高手必须懂数学,没有数学基础,只能做肤浅的事。姚老师,精选来自麻省理工可汗学院精品数学课程,呕心沥血15个日夜,5本手写讲义,涵盖120余个线性代数知识点,精心录制超一千四百分钟的教学视频,只为让你彻底学会机器学习,站在人工智能时代的浪潮上。

字节跳动已上岸测试工程师的面试经验

这个时候发面经已经有点晚了,所以现在打算让这篇面经主要面向即将秋招的童鞋,当然现在还在春招的童鞋也可以看哈,我和大家一起聊聊关于测试的二三事。   一、测试工程师的工作是什么?   测试工程师简单点说就是找bug,然后反馈给开发人员,不要小看这个工作。   首先很明显的bug开发人员有时候自己就能找到,测试人员要有比开发人员更加全面的想法才能找到深层次的问题点,   其次,要端正一个态度就是测试人员不是一个电脑小白,相反国外顶级的测试开发工程师同时也是顶级的开发工程师甚至更厉害,所以作为一个测试工程师一定要

m0_60745607的博客 2933

YOLOv8_obb的C++工程部署实战:从模型转换到实时视频推理

本文详细介绍了YOLOv8_obb模型在C++环境下的完整工程部署流程,涵盖从PyTorch模型到ONNX格式的转换、基于ONNX Runtime的C++推理引擎搭建、旋转框后处理解析,以及实时视频流处理与性能优化。文章重点解析了模型转换的关键参数、环境配置的常见问题、核心推理代码的实现,并提供了实用的避坑指南,旨在帮助开发者高效完成YOLOv8_obb的C++工程部署。

weixin_29100927的博客 46

【转载】推导正交投影变换

链接: 推导正交投影变换 知识储备: I、投影的分类 II、什么是侧投影、什么时正交投影 III、推导部分与深入探索透视投影变换原理一样,只要上一篇看懂了,这个自己也可以推出来。...

sherlockreal的博客 753

ST-Link V2的隐藏技能:多通道串口调试的终极指南

本文深入探讨了ST-Link V2的多通道串口调试功能,突破传统烧录工具的限制。通过详细的硬件配置、Arduino IDE设置和实战案例,展示了如何利用SWD接口实现多通道数据监控,提升STM32F103C8T6等开发板的调试效率。文章还提供了PCB布局优化和性能调优技巧,助力开发者充分发挥ST-Link V2的潜能。

weixin_29285605的博客 357

矩阵变换:沿任意方向缩放、镜像、正交投影及切变及其推导

镜像、正交投影和切变的推导都可根据缩放变形而来。在要缩放方向上去缩放因子k,如果|k|1,物体“膨胀”;k=0,正交投影;k 1. 缩放 01. 沿坐标轴缩放 2D中有两个缩放因子Kx和Ky,p和q是原来的基向量,缩放因子单独影响基向量,得到p`和q`: 得到缩放矩阵: 3D中增加缩放因子Kz 02.沿任意方向缩放 设n

zsq306650083的专栏 1万+

QGIS基于快鸟(QuickBird)影像统计小麦种植面积

​01数据情况 本次选用某地4月份快鸟(QuickBird)影像为例,使用QGIS演示提取小麦播种情况,并按照200米*200米分区计算种植面积的过程。 注:本文对应的操作视频作为今天第二篇推送同时发布,习惯看视频的朋友可以点击观看。 附数据压缩包: 链接:https://pan.baidu.com/s/1JVUS8uAOR61RxC1n9Or9_w 提取码:qgis 含快鸟影像QB_subset.tif和200*200米分区矢量图层200Mgrid.shp。 ...

QGISClass的博客 1979

深度学习环境搭建:CUDA、Anaconda、PyTorch 完整安装与验证教程

步骤操作验证命令1安装 CUDA 工具包nvcc -V2安装 Anaconda3创建 yolo 环境4安装 PyTorch5验证 GPU。

qq_37606844的博客 321

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

最近看闫令琪老师的 现代计算机图形学入门,按照自己的理解也推导了一下透视投影变换矩阵,这里选用右手坐标系,列向量。首先推导正交投影我们通常在摄影机中给定[l, r], [b, t], [n, f], n和f都是大于0的数,但对应右手系的投影长方体而言, n和f是z轴负向的点,所以上图的点坐标如果按照n > 0, f > 0的惯例来说,近裁剪面左下角的点是(l,b,-n),远裁剪面右上角...

weixin_39884877的博客 1457

【腾讯小龙虾 WorkBuddy 专栏 03】技能(Skills)制作全教程!自定义技能编写、导出分享、导入使用一步到位

🔥腾讯AI智能体WorkBuddy自定义技能全攻略 本文为零基础用户提供WorkBuddy自定义技能的完整教程,涵盖技能概念、编写规范到实操全流程。核心内容包括: 技能本质:标准化任务指令模板,可固化重复操作流程 三大价值:一键执行重复任务/跨设备共享/降低使用门槛 实操演示:以"桌面文档自动分类"为例,分步讲解编写、测试、导出 共享方案:支持单技能/批量导出,通过任意渠道传输分享 导入指南:3秒完成他人技能加载,并提供常见问题解决方案 高阶优化:增加异常处理、版本管理等提升技能普适性

AI人人懂 2976

推导和理解正交投影变换

转载地址:http://blog.youkuaiyun.com/popy007/article/details/4126809

4142

基于STM32H5的循环GPDMA链表使用

STM32H503的GPDMA链表模式可实现灵活的数据传输。相比传统DMA直接编程方式,链表模式通过配置多个节点实现分散数据传输,支持循环链表功能。示例展示了如何使用GPDMA链表实现UART1循环发送数据:配置两个DMA节点分别指向不同发送缓冲区,构建循环链表并绑定到DMA通道。关键点包括:清空链表结构体、正确设置循环模式、检查节点配置。此方法提高了DMA使用的灵活性,适用于需要交替传输多段数据的场景。

kevin1499的博客 453

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OpenGL学习脚印: 投影矩阵和视口变换矩阵(math-projection and viewport matrix)

写在前面 前面几节分别介绍了模型变换,视变换,本节继续学习OpenGL坐标变换过程中的投影变换。这里主要是从数学角度推导投影矩阵。对数学不感兴趣的,可以稍微了解下,或者跳过本节内容。本文主要翻译并整理自 songho OpenGL Projection Matrix一文,这里对他的推导思路稍微进行了整理。通过本节可以了解到 透视投影矩阵的推导 正交投影矩阵的 推导 视口变换矩阵的推导 zF

王定桥的专栏 4万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 深入探索透视投影变换(续)
下一篇: 推导相机变换矩阵
popy007
博客等级 码龄25年 1026粉丝 18原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值