觀察矩陣(View Matrix)、投影矩陣(Projection Matrix)、視口矩陣(Window Matrix)及VPM矩陣及它們之間的關系

? ? ? V表示攝像機的觀察矩陣(View Matrix),它的作用是把對象從世界坐標系變換到攝像機坐標系。因此,對于世界坐標系下的坐標值worldCoord(x0, y0, z0),如果希望使用觀察矩陣VM將其變換為攝像機坐標系下的坐標值localCoord(x’, y’, z’),則有:

localCoord = worldCoord * VM

此外,觀察矩陣可理解為“攝像機在世界坐標系下的位姿矩陣的逆矩陣”,也可理解為"世界坐標系在攝像機坐標系下的位姿矩陣。因此Camera 類也專門提供了getInverseViewMatrix 這樣一個函數,它的實際意義是表示攝像機在世界坐標系下的位置;而Camera 類的getViewMatrix函數則表示世界坐標系下的某個物體的位姿矩陣變換到以攝像機坐標系為基準下的矩陣。這個有點繞,具體參見如下博文:

淺談在操控器類中,為何要通過osgGA::CameraManipulator的逆矩陣改變視點位置

? ? ? ? P 表示投影矩陣(Projection Matrix),當我們使用 setProjectionMatrixAsPerspective 之類的函數設置攝像機的投影矩陣時,我們相當于創建了一個視截錐體,并嘗試把包含在其中的場景對象投影到鏡頭平面上來。如果投影矩陣為PM,而得到的投影坐標為projCoord(x”, y”, z”)的話,那么:

projCoord = localCoord * PM

? ? ? W表示視口矩陣(Window Matrix),它負責把投影坐標變換到指定的二維視口(viewport)中去, 對于視口矩陣WM,通過下面的公式可以得到最終的窗口坐標windowCoord(x”', y”', 0):

windowCoord = projCoord * WM

將所有的公式整合之后,得到:

windowCoord = worldCoord * VM * PM * WM

而這個所謂的窗口坐標windowCoord,實際上也就是世界坐標系下的坐標值worldCoord 在指定的攝像機視口中(也就是我們的屏幕上)對應的平面位置。怎么樣,不知不覺中,我 們已經實現了gluProject函數所完成的功能了。記:

VPW =  VM * PM * WM

則:

windowCoord = worldCoord * VPM

?對上式左右兩邊乘以VPM的逆,如下:

即反轉這三個步驟就可以得到視口中指定位置所對應的世界坐標了(也就是gluUnProject的工作)即:

參考資料

【1】:王銳 .《最長的一幀》?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41178.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【滲透入門】HTTP請求包

文章目錄 前言HTTP GET請求包HTTP POST請求包Content-Type 前言 HTTP(HyperText Transfer Protocol)請求包,是Web通信的基礎。HTTP請求包格式主要由以下幾部分組成: 請求行:包含了請求方法(GET、POST、PUT…

32單片機,C語言與匯編聯合編譯的幾種方式

適用編譯器:Keil5 方式一: 單獨創建一個.s匯編文件,在匯編文件內對函數進行EXPORT聲明 r0寄存器是函數傳入的第一個參數,r1寄存器是函數傳入的第二個參數,以次類推。參數最多不確定是到r4為止,還是到r12…

Node.js-path 模塊

path 模塊 path 模塊提供了 操作路徑 的功能,如下是幾個較為常用的幾個 API: 代碼實例: const path require(path);//獲取路徑分隔符 console.log(path.sep);//拼接絕對路徑 console.log(path.resolve(__dirname, test));//解析路徑 let pa…

Robust Regression

最小二乘回歸受數據中的離群點的影響較大,穩健回歸通過降低離群點的影響緩解此問題。M估計法是穩健回歸的重要方法之一,M 估計法的目標函數為: m i n ∑ ρ ( ? i ) m i n ∑ ρ ( y i ? β ^ ? X i ) min\sum\rho(\epsilon_i) min\sum\…

vulhub-activemq(CVE-2016-3088)

在 Apache ActiveMQ 5.12.x~5.13.x 版本中,默認關閉了 fileserver 這個應用(不過,可以在conf/jetty.xml 中開啟);在 5.14.0 版本后,徹底刪除了 fileserver 應用。【所以在滲透測試過程中要確定好 ActiveMQ …

word 使用手冊

word 文檔中如何將下行的指定文字退格到上行中 就像是這樣的 編號:111 密碼:222 編號:123 密碼:321 編號:124 密碼:331 變成 編號:111密碼:222 編號:123密碼&#xff1…

數據結構1:C++實現變長數組

數組作為線性表的一種,具有內存連續這一特點,可以通過下標訪問元素,并且下標訪問的時間復雜的是O(1),在數組的末尾插入和刪除元素的時間復雜度同樣是O(1),我們使用C實現一個簡單的邊長數組。 數據結構定義 class Arr…

華為OD機試 - 來自異國的客人(Java 2024 D卷 100分)

華為OD機試 2024D卷題庫瘋狂收錄中,刷題點這里 專欄導讀 本專欄收錄于《華為OD機試(JAVA)真題(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一題都有詳細的答題思路、詳細的代碼注釋、樣例測…

新手教學系列——前后端分離API優化版

在之前的文章《Vue 前后端分離開發:懶人必備的API SDK》中,我介紹了通過Object對象自動生成API的方法。然而,之前的代碼存在一些冗余之處。今天,我將分享一個改進版本,幫助你更高效地管理API。 改進版API SDK 首先,讓我們來看一下改進后的代碼: import request from …

深入理解 KVO

在 iOS 中,KVO(Key-Value Observing)是一個強大的觀察機制,它的底層實現相對復雜。KVO 利用 Objective-C 的動態特性,為對象的屬性提供觀察能力。 KVO 的底層實現 1. 動態子類化 當一個對象的屬性被添加觀察者時&am…

6、Redis系統-數據結構-01-String

Redis 數據結構簡介 前言 Redis 是一個高性能的內存數據庫,其關鍵在于其數據結構的設計。Redis 數據結構是指底層實現 Redis 鍵值對中值的數據類型的方式。它包括了以下幾種主要對象: String(字符串)對象:最基本的數…

[C++][CMake][流程控制]詳細講解

目錄 1.條件判斷1.基本表達式2.邏輯判斷3.比較4.文件操作5.其他 2.循環1.foreach2.while 1.條件判斷 在進行條件判斷的時候,如果有多個條件,那么可以寫多個elseif,最后一個條件可以使用else,但是開始和結束是必須要成對出現的&am…

WordPress常見問題及簡要說明

1. 如何安裝WordPress? 簡要說明:WordPress是一個流行的內容管理系統,可以幫助用戶快速搭建網站。安裝WordPress需要以下幾個步驟:下載WordPress安裝包、上傳到服務器、創建數據庫、配置數據庫信息、完成安裝。 2. 如何創建一個新的WordPr…

掌握電量脈搏:WebKit 電池狀態(Battery Status API)支持全解析

掌握電量脈搏:WebKit 電池狀態(Battery Status API)支持全解析 隨著移動設備的廣泛使用,Web 應用對設備的電池狀態信息的需求日益增長。Battery Status API 提供了一種方式,允許 Web 應用訪問設備的電池信息&#xff…

【反悔貪心 反悔堆】1642. 可以到達的最遠建筑

本文涉及知識點 反悔貪心 反悔堆 LeetCode1642. 可以到達的最遠建筑 給你一個整數數組 heights ,表示建筑物的高度。另有一些磚塊 bricks 和梯子 ladders 。 你從建筑物 0 開始旅程,不斷向后面的建筑物移動,期間可能會用到磚塊或梯子。 當…

Spring Boot中的全局異常處理

Spring Boot中的全局異常處理 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將探討如何在Spring Boot應用中實現全局異常處理,這是保證應用…

VSCode, 請在windows下使用git bash終端

用vscode在windows下調測代碼,運行時默認打開的終端是windows的cmd,很不受我待見。畢竟習慣了linux,習慣了windows下的git bash風格。怎么辦? search,search,research。 先確保windows上安裝了git bash。…

MATLAB 2024b 更新了些什么?

MATLAB 2024b版本已經推出了預覽版,本期介紹一些MATLAB部分的主要的更新內容。 幫助瀏覽器被移除 在此前的版本,當我們從MATLAB中訪問幫助文檔時,默認會通過MATLAB的幫助瀏覽器(Help browser)。 2024b版本開始&…

【Unity數據交互】如何Unity中讀取Ecxel中的數據

👨?💻個人主頁:元宇宙-秩沅 👨?💻 hallo 歡迎 點贊👍 收藏? 留言📝 加關注?! 👨?💻 本文由 秩沅 原創 👨?💻 專欄交流🧧&…

醫院掛號系統小程序的設計

管理員賬戶功能包括:系統首頁,個人中心,患者管理,醫生管理,專家信息管理,科室管理,預約信息管理,系統管理 微信端賬號功能包括:系統首頁,專家信息&#xff0…