DirectX 圖形介面指南(4) (轉)
指南三:使用矩陣:namespace prefix = o ns = "urn:schemas--com::office" />
本指南介紹矩陣的概念及演示如何使用它們。Vertices 例程透過呈遞2D的頂點畫出了一個三角形。然而,在這個指南中,你將透過頂點變換在 3-D 環境下工作。矩陣和變換也同樣用於設定攝影頭與視口(Viewport)。
在 Matrices 例程呈遞幾何物體之前,它自定義 SetupMatrices 建立並設定用於演示 3-D 三角形的矩陣變換。作為代表,三種型別的變換同時被設定到一個 3-D 場景。建立這些典型變換的步驟如下表:
·第一步:定義世界變換矩陣
·第二步:定義觀察變換矩陣
·第三步:定義對映變換矩陣
注意:Matrices 示例程式的路徑為:
(SDK )SamplesMultimediaDirect3DTutorialsTut03_Matrices.
建立這三種變換的順序並不影響場景元素的輸出。無論如何,Direct3D 都使用以下順序依次將矩陣作用於場景:(1) 世界,(2) 觀察,(3) 對映。
Matrices 工程的示例程式碼幾乎與 Vertices 工程的程式碼相同。該“使用矩陣”指南僅僅關注那些有關矩陣的獨特程式碼,而不重複初始化 Direct3D,處理 Microsoft 訊息,演示,以及清除。關於這些工作的資訊,請見 指南一:建立裝置 。
本指南使用自定義頂點格式和單個頂點緩衝區呈遞幾何模型,關於更多的有關選擇自定義頂點型別以及頂點緩衝區的資訊,見 指南二:演示頂點 。
第一步:定義世界變換矩陣(World Tranormation Matrix)
世界變換矩陣定義了怎樣轉換、縮放、以及旋轉 3-D 模擬空間中的幾何物體。
以下程式碼片段為 Microsoft Direct3D 裝置設定當前的世界變換並且使三角形繞 y-軸 旋轉。
D3DXMATRIX matWorld;
D3DXMatrixRotationY( &matWorld, timeGetTime()/150.0f );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
第一步是透過呼叫 D3DXMatrixRotationY 函式使三角形繞 y-軸 旋轉。函式第一個引數是指向 D3DMATRIX 結構的指標用於返回操作結果。第二個引數是以弧度表示的旋轉角度。
下一步是呼叫 IDirect3DDevice8::SetTransfo給 Direct3D 裝置設定世界變換。SetTransform 接受的第一個引數通知 Direct3D 被設定的是哪個轉換。這個例子用 D3DTS_WORLD 宏指定被設定的是世界變換。第二個引數是一個指向被設為當前變換之矩陣的指標。
關於世界變換的更多資訊,見:SDK: World Transformation
定義完場景的世界變換後,你可以準備觀察變換矩陣了。再一次請注意:定義任一變換的順序不是關鍵。無論如何,Direct3D 採用以下順序將這些矩陣作用於場景:(1) 世界,(2) 觀察,(3) 對映。
定義觀察變換矩陣請參看 第二步:定義觀察變換矩陣
第二步:定義觀察變換矩陣(View Transformation Matrix)
觀察變換矩陣定義了觀察的位置和旋轉角度。此觀察矩陣就相當於場景的攝影機。
以下程式碼片段建立了一個觀察變換矩陣並將其設定為 Microsoft Direct3D 裝置的當前觀察矩陣。
D3DXMATRIX matView;
D3DXMatrixLookAtLH( &matView, &D3DXVECTOR3( 0.0f, 3.0f,-5.0f ),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f ),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
第一步是透過呼叫 D3DXMatrixLookAtLH 定義觀察矩陣。第一個引數是一個指向 D3DXMATRIX 結構的指標,用來接受操作結果。第二、三、四個引數定義了觀察點、注視點、以及方向“上”。這兒設定觀察點為沿 Z-軸 反方向 5 單位再往上 3 單位,注視點為原點,以及作為“上”的方向為 Y-軸。
下一步是呼叫 IDirect3DDevice8::SetTransform 給 Direct3D 裝置設定觀察矩陣。SetTransform 接受的第一個引數通知 Direct3D 哪一個變換將要被設定。該例程使用 D3DTS_VIEW 標記指定為觀察矩陣。第二個引數是一個指向矩陣的指標,它被設為當前的變換。
關於觀察矩陣的更多資訊,見:SDK: View Transformation
定義了場景的世界變換後,你可以開始準備對映變換矩陣了。再一次提醒,定義每一變換的順序不是關鍵性的。無論如何,Direct3D 總是採用以下順序將矩陣應用於場景:(1) 世界,(2) 觀察,(3) 對映。
定義對映變換矩陣的工作被描述在 第三步:定義對映變換矩陣
第三步:定義對映變換矩陣(Projection Transformation Matrix)
對映變換矩陣定義了將 3-D 觀察空間轉換為 2-D 視口空間的幾何學方法。
以下程式碼片段建立對映變換矩陣並將其設為 Microsoft Direct3D 裝置的當前對映變換。
D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
第一步是呼叫 D3DXMatrixPerspectiveFovLH 設定對映矩陣。函式第一個引數是一個指向 D3DXMATRIX 的結構,用於接受操作的結果。第二個引數定義視場,它說明物體如何隨著距離而縮小。一個典型的視場是 1/4 π,就像這個例子使用的一樣。第三個引數定義了螢幕縱橫比。本示例採用典型的縱橫比 1。第四和第五個引數定義最近和最遠剪下平面。這是用於確定位於何種距離之外的幾何物體無需再繪製。本 Matrices 示例設定它的最近剪下平面為 1,最遠剪下平面為 100。
下一步是呼叫 IDirect3DDevice8::SetTransfrom 對 Direct3D 應用變換。SetTransfrom 接受的第一個引數通知 Direct3D 何種變換被設定。本例程使用 D3DTS_PROJECTION 標誌指定對映變換將被設定。第二個引數是一個指向矩陣的指標,它將被設定為當前的變換。
關於對映變換的更多資訊,參見:“對映變換”
本指南已經提示你如何使用矩陣。指南四:建立和使用光源 將揭示如何在你的場景中新增光源以增加真實性。
(指南四:建立和使用光源 見本文第五部分)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992155/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DirectX 圖形介面指南(2) (轉)
- DirectX 圖形介面指南(3) (轉)
- DirectX 圖形介面指南(5) (轉)
- DirectX 圖形介面指南(6) (轉)
- DirectX 圖形介面指南(7) (轉)
- DirectX圖形介面指南的介紹(轉)
- 圖形使用者介面(轉)
- 急救~進不了圖形介面(轉)
- 《WTL起步 - 玩轉圖形介面》目錄 (轉)
- DirectX8程式設計指南-1 (轉)程式設計
- centos 圖形介面和命令列介面切換(轉載)CentOS命令列
- Linux圖形介面知識-輕鬆更換圖形環境(轉)Linux
- DirectX5.0最新遊戲程式設計指南 (轉)遊戲程式設計
- AIX圖形介面配置AI
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 一、配置DirectX SDK (轉)遊戲程式設計
- (轉)使用yum來安裝CentOS圖形介面包CentOS
- VNC連線圖形介面VNC
- 理解FreeBSD中的圖形介面X系統(轉)
- Linux下的GTK圖形介面程式設計(轉)Linux程式設計
- Linux字元介面和圖形介面Linux字元
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 一、DirectDraw的基本圖象概念 (轉)遊戲程式設計
- RenderDoc圖形偵錯程式詳細使用教程(基於DirectX11)
- 圖形介面系統XFree86的歷史(轉)
- Win32彙編教程八 圖形介面的操作 (轉)Win32
- Linux圖形介面GNOME和KDE終獲統一(轉)Linux
- ffmpeg 圖形化介面工具 traGtor
- 試試python圖形介面Python
- Linux 安裝圖形介面Linux
- 26 使用者圖形介面
- 07圖形化介面和命令列介面操作命令列
- Xmanager4遠端連線linux圖形介面(vsftpd配置)LinuxFTP
- 騰訊力作!超實用的iOS 9 人機介面指南(5):圖示與圖形設計iOS
- 帶你走進圖形使用者介面編制 (一) (轉)
- 配置XDM--一種Linux的圖形登入介面(轉)Linux
- 讓redhat9 自動進入圖形登陸介面(轉)Redhat
- Linux字元介面切換到圖形介面Linux字元
- linux圖形介面和命令列介面切換Linux命令列
- 使用SCRT+XMING 圖形介面