3D遊戲基礎 Direct3D(三) 固定管線之變換

來源:互聯網
上載者:User
在前面的章節已經說到過,在固定管線中,第一步動作便是對圖元做座標變換。所謂圖元(primtive),就是一堆頂點,這些頂點構成了特定的幾何形狀,這就叫做圖元。

所以,我們做變換的對象說到底,就是頂點。
在固定管線中,變換分成2個步驟:
       局部座標繫到全局座標系 和  全局座標繫到觀察座標系。
局部座標系:就是建模座標系,它是在建模時由3DMAX之類的工具定義的;
全局座標系:用來統一情境中各個object的位置、尺寸等規格;
觀察座標系:也就是攝像機的座標系。

局部座標繫到全局座標系變換:
這個變換是為了把在不同建模工具或者有用不同規格的建模尺寸下設計的模型,都統一到一個通用的座標系下面。這個動作的作用,就像秦始皇統一度量衡一樣。從局部座標繫到全局座標系 這個變換的動作,通常是在遊戲設計時,由 遊戲工具(如:情境編輯器)來預先計算,並且為每個模型都計算出一個變換矩陣(即 記錄模型在遊戲情境中的 大小、朝向、位置),叫做全局座標變換矩陣。在渲染時,即時的應用這些矩陣來參與運算,寫法:
D3DXMATRIX worldMatrix; //這個矩陣就從檔案中讀進來
Device->SetTransform(D3DTS_WORLD, &worldMatrix);
注意,使用宏 D3DTS_WORLD

從全局座標繫到觀察座標系變換:
這個變換動作,實際上是為了簡化運算而做的。這樣變換之後,所有的頂點也就可以直接轉換為向量,非常的便於某些計算。這個動作通常是,將攝像機平移到全局座標系原點,再旋轉攝像師,使它的光軸與全局座標系z軸方向一致。與此同時,空間中的所有幾何體都要隨攝像機一同變換,以確保攝像機的視場不變。這個變換叫取景變換,變換後得到觀察座標系。
寫法如下:
D3DXMATRIX ViewMatrix;
D3DXVECTOR3 position, targetPoint, worldUp;
D3DXMatrixLookAtLH(&ViewMatrix,  //[OUT], 計算出的變換矩陣
                                        &position, //攝像機位置
                                        &targetPoint, //攝像機的觀察朝向
                                        &worldUp);//攝像機的y朝向,也就是頭的朝向
Device->SetTransform(D3DTS_VIEW, &ViewMatrix);
注意宏,D3DTS_VIEW
其實,D3DXMatrixLookAtLH()函數只是類似功能函數中的一個,注意尾碼 LH 這表示左手座標系,對應的還有一個右手座標系,它們的區別在於:左手系 其z軸向裡為正;右手系向外為正。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.