3D基礎 3D遊戲中的各種旋轉與基變換 2

2022-05-01 08:33:08 字數 1089 閱讀 7490

終於開始著手寫[3d基礎]系列的第二篇文章了,這篇文章所將的內容相信對於很多人而言都是相當重要的,因為涉及到相機座標系變換,billboard實現原理,凹凸對映切空間變換等課題。按以前的習慣,重要內容用紅色字型標出,對於最基本的線性代數理論不作證明,使用dx左手座標系。

第乙個問題:uvn相機座標變換形式與原理。

我們知道3d世界空間到相機空間座標的轉換是通過uvn矩陣來實現,運算格式如下:

| ux, vx, nx |

| x, y, z | * | uy, vy, ny |

| uz, vz, nz |

u v n 分別為相機的右、上、前向量,且已規格化。現在我們來理解下這個向量矩陣乘法的幾何意義。對運算進行分解如下:

x0 = | x, y, z | dot | ux, uy, uz |

y0 = | x, y, z | dot | vx, vy, vz |

z0 = | x, y, z | dot | nx, ny, nz |

是不是有點眉目了,幾何上,乙個向量v1與另外乙個規格化向量v2的點積,結果是v1在v2向量上的帶符號投影長度。因此,這裡x0、y0、z0便是向量| x,y,z |在u、v、n 向量上的投影長度,在相機座標空間中,相機的右向量u將被用作x座標軸,v將被用作y座標軸,n被用作z座標軸,所以變換後新的向量為| x0, y0, z0 |。

乙個很重要的矩陣性質:正交矩陣的逆矩陣等於其轉置矩陣。

第二個問題:相機平面對齊公告板的旋轉。

其實公告板實現分兩步,第一步先將公告板旋轉到與相機平面平行,第二步將旋轉後的定點平移到指定的空間位置。

我們只說第一步的原理,所謂與視平面對齊,其實就是乙個矩形經旋轉後位於xy平面上,已知旋轉後的結果,求旋轉前四邊形的的座標,用旋轉後的結果乘uvn矩陣逆矩陣就ok了。如:

| ux, uy, uz |

| 2, 0, 0 | * | vx, vy, vz |                          〔u v n矩陣為正交矩陣〕

| nx, ny, nz |

第三個問題:凹凸對映切空間的變換。

原理與問題1和2一模一樣,需要切空間,利用切空間向量組成的矩陣將光線向量轉換到切空間中,然後計算光照,over!

3D遊戲中顯示網頁

在遊戲中顯示網頁?為什麼要這麼做呢?其實可以做不少的應用 嵌入幫助文件,比如技能介紹,可以做得很漂亮,各種排版方式用傳統ui做起來很費勁 活動公告頁面直接在遊戲中檢視 遊戲內的bbs 社群 玩家的個性展示 資料 等等最重要的是,所有的這些內容都可以扔到web伺服器上,不用打包進客戶端 最早是用llm...

在3D遊戲中顯示網頁

在遊戲中顯示網頁?為什麼要這麼做呢?其實可以做不少的應用 嵌入幫助文件,比如技能介紹,可以做得很漂亮,各種排版方式用傳統ui做起來很費勁 活動公告頁面直接在遊戲中檢視 遊戲內的bbs 社群 玩家的個性展示 資料 等等最重要的是,所有的這些內容都可以扔到web伺服器上,不用打包進客戶端 最早是用llm...

3D旋轉的時鐘

var hour new date gethours if hour 11 varmins new date getminutes var sec newdate getseconds 秒針,每週走60個單位 varunitsec 2 math.pi 60 分鐘,每週走60 60個單位 varuni...