search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

3D圖形學理論入門指南

假設我們要分解一個球形。我們可以將球體的中心位置定為本地的原點。這樣我們就可以用一個公式來獲得球面上的一些點然後將這些點連接成多邊形以供繪製。一個常用的公式是S(u,v)=[r sin u cos v,r sin u sin v,r cos v],u和v的取值範圍分別是u∈[0,π],v∈[0,2π],r是球體的半徑。就像你在圖中看到的那樣,球體表面的點被繪製成矩形。我們能夠很方便的把它們連成三角形。

球面上的點位於所謂的模型坐標系。坐標相對於本地的原點定義,比如示例中球體的中心位置。如果我們想要將物體放置於場景中,我們可以定義一個從場景原點到場景中球體的原點的向量,然後把這個向量和球面上每個點的坐標相加。這樣我們就將模型放置到了世界坐標系中。

世界坐標系——將物體置於世界中

到這兒我們的圖形學之旅才真正開始。我們在某處定義一個原點,場景中的每個點都基於從原點到該點的一個向量來定義。雖然場景是3D的,我們還是得用一個4維的坐標來定義每個點[x,y,z,w],代表該點的坐標為[x/w,y/w,z/w]。這種映射稱為齊次坐標。使用齊次坐標有一些好處,但是這裡不做討論。只需知道我們使用齊次坐標就夠了。

假設我們要在場景中移動,那麼問題來了。如果我們要移動視線,或者移動相機到另一個位置,或者讓整個世界圍著相機移動。在計算機的世界里,移動整個世界更容易一點,所以我們就這樣做,讓相機固定不動。模型-視圖矩陣(modelview matrix)是一個4x4矩陣,可以用來移動世界中的每一個點,然後讓相機固定不動。這個矩陣基本上就是一系列旋轉、位移、縮放的集合。我們在世界坐標系中將點和模型-視圖矩陣相乘,這將使我們進入觀察坐標系(viewing coordinates)。

世界坐標系——將物體置於世界中

我們可以改變這個矩陣以應對不同情況如正交或透視。透視圖裡有一個消失的點,正交視圖沒有。通常在繪畫里見到的是透視圖,正交視圖在技術圖中中較為多見。因為這個矩陣決定了物體是如何投影到屏幕上的,所以也叫做投影矩陣。t,b,l,r,n,f代表頂部、底部、左側、右側、近處、原處的裁剪面的坐標。乘以投影矩陣將使點從觀察坐標系前往所謂的裁剪坐標系(clip coordinates)。

裁剪坐標系——只繪製能看到的

這個坐標系有點不同,因為它是左手坐標系(在此之前我們一直使用的右手坐標系),而且是從我們之前定義的視錐體映射到一個x,y,z範圍都在(-1,1)之間的正方體。

到現在為止,我們一直追蹤場景中的所有點。然而,一旦進入裁剪空間,我們就可以開始裁掉一部分了。還記得坐標從4D到3D的轉換嗎?我們曾說過,[x,y,z,w]4D=[x/w,y/w,z/w]3D。因為我們只需要位於視錐範圍以內的點,我們接下來只需處理符合−1≤x/w≤1或−w≤x≤w的點即可。y和z坐標也一樣。這是一個簡單的辦法分辨一個點是否位於我們視野之內。

如果某些點位於視錐體內,我們對它們執行透視出發(perspective divide),對每個坐標除以w來將其從4D坐標轉換成3D坐標。這些點還是位於左手裁剪坐標系中,但是到了這個階段,我們稱其為規格化設備坐標(normalized device coordinates)。

規格化設備坐標系——計算遮擋關係

你可以把這個想成映射到圖像的中間步驟。想象一下所有可能的圖像大小,我們並不想渲染成一張圖片然後進行各種縮放或拉伸或當圖像大小發生改變時重新渲染。規格化設備坐標(NDC)很有用,因為無論圖片最終大小是多少,你可以在NDC裡面針對性的進行合適的縮放。在NDC里你將看到圖片如何被構造。被渲染的圖像是視錐體里的物體在近裁剪面上的投影。因此,一個點在Z軸上的值越小,這個點就越近。

這個階段,通常我們不再進行矩陣計算,而是應用一個視窗變換。這通常只是拉伸坐標來適應視窗,或最終圖像大小。最後一步是通過轉換坐標到窗口坐標來繪製圖像。

窗口坐標系——將物體縮放到畫布

窗口是圖像最終被繪製的地方。在這裡,我們的3D世界呈現為近裁剪面上的一張2D圖像。我們可以使用一系列的線條和多邊形演算法來繪製最終圖像。此時,一些2D效果,如抗鋸齒和多邊形裁剪,在圖片被被繪製之前執行。

然而,窗口可能有不同的坐標系統。比如,有時圖片基於向右為X+,向下為Y+繪製。為了正確繪製圖片,有時候可能需要做一些轉換。

又回來了——圖形渲染管線

上述步驟你不用都親歷親為。某種程度上,你會使用圖形渲染庫來定義諸如模型視圖矩陣、投影矩陣以及世界坐標系中的多邊形之類的東西,渲染庫會搞定一切。如果你在設計一個遊戲,你不需要在意多邊形是如何被繪製的,只需確保它們執行的正確又快速,對嗎?

OpenGL和DirectX之類的庫效率很高,而且能夠有效利用精密的圖形硬體來簡單又快速的執行這些計算。它們廣泛使用,所以最好適應它們。它們還給你留下很大空間來自定義一些事情,你會為你能做到的某些事感到驚訝的!

結論

這是一個關於圖形學理論的簡單概覽。渲染過程中後續還有很多步驟發生,但是這應該能給你一個大致的方向,讓你在閱讀其它文章或論壇里的相關技術時能夠理解的更好。

外部鏈接

如果你對文章內容感興趣,我推薦以下內容:



原文鏈接:



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦