1. 程式人生 > >檢視矩陣的推導(1)

檢視矩陣的推導(1)

檢視矩陣處於MVP矩陣的中v。一個模型的座標經過了V之後,就得到了世界座標。而得到世界座標之後,再經過V矩陣的變換就得到攝像機(視覺/眼睛)空間中的座標。再經過P矩陣變換得到,裁剪空間中的座標。這裡講解一下V矩陣的推導。

1、最常見的基
3D空間中最常見的基為:
v1=(1,0,0)
v2=(0,1,0)
v3=(0,0,1)
比如向量(1,2,3)在這個基下的座標就是(1,2,3)。
這裡寫圖片描述

2、設另外一個正交基
v1=(0,1,0)
v2=(1,0,0)
v3=(0,0,1)
那麼向量(1,2,3)在此基上的座標為多少呢?
這裡寫圖片描述
此時可以看到向量(1,2,3)在新的基下的座標為(2,1,3)。
3、攝像機的空間
這裡寫圖片描述


如上圖所示,我們有兩個座標系,一個世界空間的座標系;另外一個是攝像機空間的座標系。我們的目的是得到紅色點(已知它的世界座標為(x,y,z),在攝像機空間的的座標(x’,y’,z’)。
利用上面基的知識,我們可以有下面的等式。
v=R.V’=Q.V”
v就是紅色點。
R是世界座標系的基
V’是v在基R下的座標
Q為攝像機座標系的基
V”是v在基Q下的座標
ok,現在已知的有哪些呢?R、V’以及Q,它們分別是對應了什麼呢?R是世界座標系的基,一般為:
這裡寫圖片描述
V’是經過模型變換得到的點的世界座標。
Q呢?Q是攝像機的座標空間,這個後面會介紹如何得到攝像機的座標空間。
現在我們有了R.V’=Q.V”,只有一個未知變數,V”,如何求得V”呢?我們知道基是可逆的,所以等式兩邊左乘Q的逆矩陣就得到如下的等式:
Q^-1.R.V’=V”
再次化簡,求由於Q是正交基,所以他的逆矩陣等於轉置矩陣。
Q^t.R.V’=V”
ok,現在的重點落在瞭如何得到Q矩陣。
4、求攝像機的座標系。
攝像機有位置、以及朝向的概念。所以我們首先確定攝像機的位置,然後定義一個注視的點。我們將攝像機的位置定義為p點,而注視方向,我們可以用另外一個點q表示,那麼q-p就得到了指向了q點向量,那麼這個方向就是攝像機的朝向了。
這裡寫圖片描述

我們看圖知道,q-p,得到的是一個向量,這個向量正式攝像機的正朝向,我們定義為z’。另外的x’和y’如何得到呢?我們利用叉乘的概念求得。首先,我們先假設攝像機的上方向和世界座標系的上方向是相同的,你可以理解為就是(0,1,0)。那麼此時我們有了兩個向量,z’以及y,那麼用y向量叉乘z’向量,我們得到了右向量,上圖中我們用右手,將手攤開,用手掌從y向量旋轉指向z’向量,我們會發現,得到的右向量(圖中-x’相反),對的你沒有錯,就是這樣。
到這裡你會發現有點不對勁了,為什麼我的攝像機的+x’和世界的+x是反向的呢?這也不符合嘗試呀,限時世界中,我們站在地上,我們的前方就是+z,我們的右手就是+x,我們的頭上即+y,那麼現在假設我們的前方有個攝像機,而攝像機的朝向是朝前,當然自拍也是可以的。但常識告訴我們我們的攝像機保持的是和我們的視覺方向一致的。所以此時唯一能夠修改的是我們q-p,變為p-q,即是,用攝像機的位置減去注視的點,此時得到的正好是相反的向量,這個向量我們記作是-z’,我們用y向量叉乘-z’,得到了+x方向如下圖所示:
這裡寫圖片描述

這裡有參考可依的:https://learnopengl.com/#!Getting-started/Camera
其中有句話:
The name direction vector is not the best chosen name, since it is actually pointing in the reverse direction of what it is targeting.
這句話的意思是:朝向向量這個名字不太恰當,原因是次向量事實上是指向了目標點的反方向。
不管怎麼說,我們用y叉乘-z’得到了+x’。即得到攝像機的右向量。
那麼此時有人會說,我們有了+x’,+z’,y不就得到了攝像機的座標系空間了嗎?答案不是,因為此時我們並不能保證y和+z’是垂直的,記得座標空間是正交的基,所以要保證三個向量是兩兩垂直的。下面就要得到真正的+y’了。
因為我們此時有+x’,+z’,那麼用這個兩個向量繼續叉乘不就得到了垂直x’z’平面的向量了嗎?所以用+x’叉乘+z’就得到真正的+y’了,至於為啥不+z’叉乘+x’,你用右手比劃一下就知道了,如果這麼做,+y’就朝下了。所以經過上面的操作之後,我們就得到攝像機的座標空間了,即+x’,+y’,+z’。
有了這些之後,我們的等式:
Q^t.R.V’=V”
中的位置引數都知道了,Q就是這個攝像機的基;R就是世界座標系的基;V’就是原始向量在世界座標系的座標;V”就可以計算出來了。

5、檢視矩陣具體如何得到?
上面的推導過程,最後得到了一個攝像機的座標系(也就是基礎座標系),也叫向量空間。那麼這個和我們的世界座標空間有什麼不同嗎?你真的知道有什麼不同嗎?它沒有位置資訊,只有一個旋轉資訊,因為所有的基空間的向量都是沒有位置資訊的。只不過是如下圖所示:
這裡寫圖片描述
也就是說攝像機的空間只是世界座標系旋轉了一定的角度,無論是繞x、y還是z,得到的一個空間座標系。同時將這個旋轉的座標系平移一個位置,最終就是我們的攝像機的位置以及座標空間了。那麼我們對物體進行反向的操作,即物體首先逆平移一個位置,然後在倒著旋轉就得到了物體在攝像機下的空間座標了。
假設攝像機的在原始位置(世界座標的0,0,0位置)旋轉之後的基為R,然後經過平移T,寫成公式為C=T.R。
那麼我們將模型做你變換,C^-1=(T.R)^-1=R^-1.T^-1
這裡的T^-1就是將位置反向即可。
而R^-1呢,就是我們上面得到的攝像機空間,於是有了參考文中的檢視矩陣公式:
這裡寫圖片描述

相關推薦

檢視矩陣推導1

檢視矩陣處於MVP矩陣的中v。一個模型的座標經過了V之後,就得到了世界座標。而得到世界座標之後,再經過V矩陣的變換就得到攝像機(視覺/眼睛)空間中的座標。再經過P矩陣變換得到,裁剪空間中的座標。這裡講解一下V矩陣的推導。 1、最常見的基 3D空間中最常見

cuda編程-矩陣乘法1

return mac cpu ims iostream oba 簡單的 oid memory 本方法采用簡單的單線程計算每組行和列乘加運算 代碼如下: #include <stdio.h> #include <stdlib.h> #include

MATLAB編程與應用系列-第3章 矩陣運算1

方程組 效率 輸入 上進 算數 有一個 大於 矩陣的乘法 相同 本系列教程來源於出版設計《基於MATLAB編程基礎與典型應用書籍》,如涉及版權問題,請聯系:[email protected]。 出版社:人民郵電出版社, 頁數:525。 本系列教程目前基於MATLABR2006

轉載:全局拉普拉斯平滑之1Strucutre extraction from texture via relative total variation及稀疏矩陣求解

場景 solid b2c eas ont 進行 hidden tis watermark 全局拉普拉斯平滑之(1)Strucutre extraction from texture via relative total variation及稀疏矩陣求解 2018年01月3

MATLAB編程與應用系列-第2章 數組及矩陣的創建及操作1

基本 while 能力 ++ 基本概念 包括 沒有 tab 其他 本系列教程來源於出版設計《基於MATLAB編程基礎與典型應用書籍》,如涉及版權問題,請聯系:[email protected]。 出版社:人民郵電出版社, 頁數:525。 本系列教程目前基於MATLABR200

OSG 渲染1檢視的實現方法

一般多檢視、視口在CAD、模擬領域裡用的比較多,遊戲裡用的相對較少。尤其是CAD,要求在多視口內用不同的渲染模式來顯示零件。比如,在單檢視內用多視口方式,分別用著色模式,線框消隱模式來繪製顯示模型。 這裡提到視口,檢視,在不同的軟體中因其定義實現的方式不同,顯得比較混亂,有時兩者不同,有時兩者又

Ros入門1ubuntu檢視當前系統的版本和核心

下面是一些檢視當前Linux系統的版本的方法:  注:proc目錄下記錄的當前系統執行的各種資料,version記錄的版本資訊可以通過cat檢視到。 1. 使用命令:cat /proc/version  proc目錄下記錄的當前系統執行的各種資料,version記錄

linux系統管理1之 核心編譯選項檢視

三個方法 proc檔案系統 ubunut debain 紅帽等 proc檔案系統 /proc/config.gz This file shows you the compile-time configuration settings for the kernel (gzip compr

Tensorflow1進行多維矩陣的拆分與拼接

最近在使用tensorflow進行網路訓練的時候,需要提取出別人訓練好的卷積核的部分層的資料。由於tensorflow中的tensor和python中的list不同,無法直接使用加法進行拼接,後來發現一個函式可以完成tensor的拼接。 函式形式如下: tf.concat(concat

微信小程式——學習筆記檢視1

WXS—(WeiXin Script)是小程式特有的一套指令碼語言。wxs有自己的語法,今天就學習一下wxs的語法。 1) wxs程式碼可以編寫在wxml檔案中的<wxs>標籤內,或者是XXX.wxs的檔案內。不管是標籤還是檔案都是一個單獨的模組。 2) 每個模組裡面定義的變數與函式

3D數學 ---- 矩陣和線性變換1

包含平移的線性變換稱作仿射變換,3D中的仿射變換不能用 3 x 3 矩陣表達,必須使用4 x 4矩陣。 一般來說,變換物體相當於以相反的量變換描述這個物體的座標系。當有多個變換時,則需要以相反的順序變換相反的量。例如,將物體順時針旋轉20度,擴大200%,等價於將座標系縮小2

線性代數複習筆記——第二章 矩陣及其運算1

目錄: 1 線性方程組和矩陣 2 矩陣的運算 3 逆矩陣 4 克拉默法則 5 矩陣分塊法 1.線性方程和矩陣 從左上角到右下角的直線(叫做對角線)以外的元素都是 0的方陣稱為對角矩陣,簡稱對角陣.對角陣也記作A = dia

PMP學習筆記1工作分解結構-資源分解結構-職責分配矩陣-資源日曆

在之前的專案啟動階段,我們已經清楚了專案的目標;通過制定專案章程,完成了專案範圍的確定; 緊接著對專案內容進行WBS工作包拆解,那麼 關於工作和人員的對應關係,關係順序如下: 一、工作分解結構 工作分解結構(簡稱WBS)跟因數分解是一個原理,就是把一個專案,按一定的原則分解,專案分解成任務,任務再分解成一

機器學習十三——機器學習中的矩陣方法3病態矩陣、協同過濾的ALS演算法1

向量的範數(續) 範數可用符號∥x∥λ表示。常用的有: ∥x∥1=|x1|+⋯+|xn| ∥x∥2=x21+⋯+x2n−−−−−−−−−−−√ ∥x∥∞=max(|x1|,…,|xn|) 這裡不做解釋的給出如下示意圖: 其中,0範數表

GIS程式設計實現基本向量圖形系統的文件和檢視1 組織向量圖形系統的圖形元素類

GIS程式設計(七)實現基本向量圖形系統的文件和檢視(1)組織向量圖形系統的圖形元素類本章將具體組織開發一個用於GIS系統的向量圖形系統。第一步是討論基本圖形系統中圖形元素類的組織,實現向量圖形系統的文件和檢視。1、圖形元素基類的組織。新建一個MFC多文件程式,命名為“Dra

對稱矩陣的壓縮儲存及基本運算1

/* *Copyright (c) 2015 , 煙臺大學計算機學院 *All right resvered . *檔名稱: 對稱矩陣壓縮儲存的實現與應用.cpp *作 者: 鄭

稀疏矩陣的三元組表示的實現及應用1——建立稀疏矩陣三元組表示的演算法庫

/* *Copyright (c) 2015 , 煙臺大學計算機學院 *All right resvered . *檔名稱: 稀疏矩陣.cpp *作 者: 鄭兆涵 *稀疏矩陣的三元組表示的實現及應用(1) */ 問題:稀疏

JSP 1: 安裝,簡單demo,如何檢視java原始碼,jsp的工作原理以及轉碼編碼方式

安裝首先下好tomcat和eclipse,eclipse建議使用比較新的版本,舊版本編寫jsp需要安裝外掛十分麻煩。可能出現的問題:tomcat閃退(建議按照裡面的步驟看看自己的tomcat能否成功在電腦上執行再配置)基礎知識預設會一點 java 和 html。新手一般都在&

計算機基礎1— 學習使用PING、ARP 、ipconfig等網路測試命令並檢視計算機MAC、IP地址

學習使用PING、ARP 、ipconfig等網路測試命令 快捷鍵【window+R】或者點選【開始】—>【執行】,開啟執行【cmd】,進入dos命令視窗 ping (Packet Internet Groper),因特網包探索器,用於

雜七雜八1——如何檢視本機的.NET Framework版本

今天上午Edward同學問我一個問題:如何知道自己本機安裝的.NET Framework版本呢? 以前這個問題我也遇到過,那就是在寫自動部署程式的時候,如果客戶的機器已經安裝了.NET Framework就不再安裝。作為安裝包的製作者,自己應該是知道程式是用哪個版本.NET