引言
終於,我們要正式進入3D投影成像的內容了~
我們會由基礎觀念漸漸實作到C語言上,首先最一開始要談的就是投影,這部分我在準備文中有稍微提過,大家可以去看一下:https://ithelp.ithome.com.tw/articles/10212887
3D投影
先來看看維基大神的說法:
3D投影是將3D空間中的點映射到2D平面上的方法。由於目前絕大多數圖形數據的顯示方式仍是2D的,因此3D投影的應用相當廣泛,尤其是在計算機圖形學,工程學和工程製圖中。
來源:https://zh.wikipedia.org/wiki/%E4%B8%89%E7%BB%B4%E6%8A%95%E5%BD%B1
大家可以先看我用粗體字畫起來的部分,其實所謂3D的投影,就是為了滿足現代科技最普遍的的2D平面成像技術,而使用的一種方式來模擬三維物體的顯示。可以想像你把一根蘿蔔突破物理限制的壓扁(?,貼到一張圖畫紙中XD
三維的東西既然在三維空間中,當然就不可能完整存在於二維的圖畫紙中。因此我們需要一種特別的方法來模擬、想像它在二維平面中的樣子,而這個技術就是投影。
三維投影到二維
三維空間的物體投影到二維平面是最常見的了。講個不管是誰都一定看過的現象,影子,而這也是投影名稱的由來吧,你在牆上的影子,可以想成你這個三維物體在二維牆面的投影。如果牆面是電腦螢幕,影子就好比是模擬成你的平面角色,只是影子沒有光影、色彩、凹凸等細節,頂多擁有輪廓,但我想這是最好的想像方式了~
以下我畫個示意圖給大家看:
是不是很像影子的概念呢? 差別在於圖中有將稜線畫出來,多了一些細節。
大家也可以仔細觀察一下哦,圖中灰色的投影,是不是只像是此角椎的其中一個觀察角度而已呢?
這部分也是相當重要的,既然三維物體已經被「委曲求全」在二維空間中了,二維空間的它只會有一個方向的角度資訊被記錄下來哦,在邏輯上是相當通順的,既然三維比二維多一維,當然紀錄的資訊要多得多囉!
實際上做的的第一步
之後我們實作的3D引擎真正做的第一步,大概是:
所以第一個門檻,在「將物體三維座標轉成二維座標」這件事!
明天我們會使用線性代數中投影的知識,來跨過這道門檻!