天天看點

視訊投影(二維視訊投影到三維模型上)

目錄

視訊投影分享

前置知識

物體與紋理

物體組成

紋理映射

3D 轉換

1. 存在一個物體

2. 存在一個相機,用于觀察物體

3. 根據相機參數的不同,得到不同的結構

4. 最終得到規範立方體(canonical view volume)

5. 由最終三維場景到二維圖像

視訊投影分析

1. 建立與現實一緻的虛拟世界

2. 擷取視訊紋理,分析投影過程

3. 關鍵代碼解析

視訊投影(二維視訊投影到三維模型上)
GPU 将圖像渲染到螢幕上
視訊投影(二維視訊投影到三維模型上)
視訊投影:将視訊作為圖檔式貼在模型上

視訊投影兩個關鍵元素,模型與視訊材質

在虛拟世界中,所有物體由三角面構成(也有用四角形的,主流是三角形)

一般模型都是一張皮,内部是空心的

簡單模型

視訊投影(二維視訊投影到三維模型上)

将一張圖檔貼在模型上,模型就是一張皮,可以看成是地球儀表面平鋪為世界地圖,模型上每一個頂點對應紋理上的一個位置,頂點間用插值計算紋理顔色,紋理坐标使用的是百分比

視訊投影(二維視訊投影到三維模型上)

将紋理圖檔(2k像素)貼在一個平面上

視訊投影(二維視訊投影到三維模型上)

将紋理坐标和頂點坐标一一對應,剩下部分利用插值計算

視訊投影(二維視訊投影到三維模型上)

随着取樣點變少,圖像失真程度越高,當取樣點變成像素時,便可以将紋理圖像完全貼在物體表面(自動過程),程式需要做的,将紋理圖像的關鍵點坐标與物體點坐标對應上

視訊投影(二維視訊投影到三維模型上)

在三維世界中,物體就是由自己所有的頂點以及每個頂點表示的顔色組成,顔色可以是自定義,也可以從圖檔材質中擷取

我們能看到一個三維物體,我們需要四種元素,第一:眼睛;第二:大腦,對眼睛接受的資料進行處理;第三:三維世界,我們身處于三維世界中,比如地球,那我們就能描述我們的位置;第四:物體,否則看到就是透明空氣了。

重新定義這四個概念,眼睛---相機,大腦---渲染器,三維世界---場景,物體---物體

看到場景物體的流程

物體本身具有頂點坐标(原始坐标資料:position),以及自己的移動(模型矩陣:modelMatrix)

視訊投影(二維視訊投影到三維模型上)

茶壺模組化完成後會有自己的頂點資料,以及每個頂點對應的顔色,茶壺可以自己進行旋轉、移動和縮放,這三類操作會産生模型矩陣,用于計算。将茶壺自己元素坐标資訊與模型矩陣加入到程式中,就相當于将茶壺經過轉換,重置了茶壺上的每個頂點位置。

相機位置、相機朝向和相機向上方向用來唯一确定相機具體方位,由這三個資訊可組成視圖矩陣(viewMatrix)

視訊投影(二維視訊投影到三維模型上)

将視圖矩陣加入程式中,就相當于鎖定人眼了。

比如:一個眼睛大,看得遠,一個眼睛小,看得近,一個近視眼,一個遠視眼。相機屬性構成了投影矩陣 (projectionMatrix)

視訊投影(二維視訊投影到三維模型上)

将投影矩陣加入到程式中,得到的就是從一個具體的人眼看到的三維世界

視訊投影(二維視訊投影到三維模型上)

在立方體内的物體就是我們看到的物體,立方體外的都可以剔除掉,那些都是視野外的。于此同時,由于視圖矩陣和模型矩陣的加入,相機位于原點,看向 z 負軸。(規範立方體 (-1,-1,-1)到(1,1,1))

總結剛剛的過程,最終得到的物體坐标為

規範立方體得到了,z 坐标 從 1 到 -1 ,z 坐标代表這個物體深度。好似從前往後發射射線,碰到的第一個點就将其顔色指派在平面上,最終形成二維圖檔

視訊投影(二維視訊投影到三維模型上)

關鍵:将視訊紋理與模型上對應的頂點一一對應起來

模型比例與現實保持一緻;投影的相機所處位置,參數,朝向,向上方向保持一緻

視訊投影(二維視訊投影到三維模型上)

目前整個場景有兩個相機,一個是主相機,就是上帝視角的這個相機;另一個是用作投影的相機,這裡就叫投影相機。

首先,先擷取到視訊作為紋理對象,可以直接将視訊看作一張圖檔,這裡叫投影圖,投影圖就是投影相機拍出來的,是以,投影相機看到的二維圖像就是投影圖

現在我們可以得到三個圖

上帝視角圖

投影相機視角圖

視訊中的投影圖

其中,投影相機視角圖 = 視訊投影圖 (等式 1),2 = 3

是以,現在我們求出投影相機與模型産生的交點,并且根據 “等式1” 找到這個點的顔色,并将顔色指派上去,最終便得到視訊投影效果

投影相機看到的視角圖

視訊投影(二維視訊投影到三維模型上)

真實世界錄影機的視角圖

視訊投影(二維視訊投影到三維模型上)

一一對應上,最終完成

頂點處理

顔色處理

希望讀者在看完後能提出意見, 點個贊, 鼓勵一下, 我們一起進步. 加油 !!

繼續閱讀