到目前為止,都還是最簡單 2D 平面上的顯示方式,像是之前在太陽時出現的這段
float2 positions[3] =
{
float2(-1.0f, -1.0f),
float2(-1.0f, 3.0f),
float2(3.0f, -1.0f)
};
float2 position = positions[vertexID];
output.position = float4(position, 0.0f, 1.0f);
它是直接讓顏色直接覆蓋在整個視窗畫面的寫法,但實際上它不是真正在 3D 空間裡繪畫出來的,完整的作法還會經過一連串的座標轉換後才會是我們在遊戲裡看到的畫面,過程大概可以看成下面這樣。
Local Space
↓
Model Matrix
↓
World Space
↓
View Matrix
↓
View Space
↓
Projection Matrix
↓
Clip Space
因為之後的雲實作跟更後面的 Fbx 的導入都會涉及到 3D 空間的概念,為了接下來畫面的豐富度,所以這邊稍微介紹相關的背景。

Model 是物件本身的座標,當然直覺上第一會想到的是 Model 在整個世界畫面上的位置,但實際上是這個物件他也有自己的空間,而他在自己的這個空間的座標位置。
像是這 Blender 的初始位置會讓方塊的實際座標長這樣

View 才是真正物件在引擎裡實際的的位置,基本上最重要的是在創建模型時他的中心點位置
像是前一張圖它的中心位置為方塊中間,實際最後導入進專案時他在世界座標的點就會在方塊中間,延伸的 Scale 變形也都會以此點為準

而有些專案可能會去讓中心點在其中一角,方便去做隨機生成地圖時去對座標生成這類

最後 Projection 就是透過 Camera 實際上在畫面上投影看到的樣子。
因為最終在電腦螢幕上他是二維平面的畫面,不經過處理的話會無法順利顯示出來。
以 Unity 為例的話, Orthographic 就是其中一種視覺處理方式,這處理下遠方的物件不會縮小的效果,但他顯示的距離是真正實際上引擎設定的距離。

而另一個 Perspective 就會有遠方縮小的視覺效果,可以讓人清楚感受到遠近的感覺,但實際上物件並沒有真的改變大小,而距離也為了效果而不是真實的。

應該是高中時期有介紹過左手座標系與右手坐標系,只要從拇指到中指看過去就是 xyz
而每家引擎…對基本上都是想套用哪套就套哪套wwww

而這邊之後會選擇套用 UE 的坐標系體制。也就是左手 + z軸向上的方向去設定。