DirectX 圖形介面指南(3) (轉)
指南二:演示頂點(Render Vertex):namespace prefix = o ns = "urn:schemas--com::office" />
Microsoft Direct3D 寫的應用使用頂點(Vertex)構造幾何物體。每一個三維空間 (3D) 場景包括一個或幾個這樣的幾何物體。Vertices 例程構造簡單的物體,一個三角形,並且將它繪製到螢幕上。
本指南說明如何採用以下步驟從頂點構造一個三角形:
·第一步:定義一個自定義頂點型別
·第二步:設定頂點緩衝
·第三步:繪製至螢幕
注意:Vertices 示例程式的路徑為:
(SDK )SamplesMultimediaDirect3DTutorialsTut02_Vertices.
Vertices 程式的示例程式碼與 CreateDevice 的程式碼大部分相同。本“演示頂點(Render Vertex)”指南僅僅關注於那些獨特的,關於頂點的程式碼而不包括初始化 Direct3D,處理 Microsoft 訊息,繪圖,與清理等工作。如要得到有關這些任務的資訊,請參考 指南一:建立裝置。
第一步:定義一個自定義頂點型別
Vertices 例程使用三個頂點構造一個 2D 的三角形。這裡提及了頂點緩衝的概念,這是用於儲存和演示大量頂點的 Microsoft Direct3D 。透過指定一個自定義的頂點結構和相應的可變向量格式 (FVF),頂點能夠採用很多方法定義。本 Vertices 例程使用的頂點格式定義於以下程式碼片斷中。
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // The tranormed position for the vertex.
D color; // The vertex color.
};
上面的結構體說明了自定義頂點型別的格式。下一步是定義 FVF 以描述頂點緩衝區中的頂點內容。以下程式碼片段定義了一個 FVF 並符合此上建立的自定義頂點型別。
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
可變頂點格式標記描述了使用中的自定義頂點型別。前述示例程式碼使用了 D3DFVF_XYZRHW 和 D3DFVF_DIFFUSE 標誌,這將告訴頂點緩衝,自定義頂點型別包含一組轉換過的點座標並緊跟著一個顏色引數。
現在自定義向量格式和 FVF 已經被指定好了,下一步將使用頂點填充頂點緩衝區,請參看:第二步:設定頂點緩衝 。
注意:Vertices 例程中的頂點是轉換過的。用另一句話說,它們已經在 2D 視窗座標系下。這意味著座標點 (0,0) 位於左上角,且正的 x 半軸向右,正的 y 半軸向下。這些頂點同樣也是光照過的,這說明它們的著色不透過 Direct3D 照明而由它們自己的顏色代替。
第二步:設定頂點緩衝
現在自定義頂點格式已經完成,初始化頂點的時候到了。 Vertices 例程建立了必需的 Microsoft Direct3D 物件之後本程式內部定義的 InitVB() 進行這個工作。以下程式碼段將初始化三個自定義頂點的值。
CUSTOMVERTEX g_Vertices[] =
{
{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },
};
前述程式碼片段採用三角形的三個頂點填充三個Vertex並指定了每個頂點的散射光的顏色。第一個頂點位於 (150,50) ,散射紅色 (0xffff0000)。第二個頂點位於 (250,250) ,為綠色 (0xff00ff00)。第三點位於 (50,250) 並散射藍綠色 (0xff00ffff)。每一點都具有相同的 0.5 Z值及 1.0 的 RHW 引數。關於這些向量格式的其它資訊見 SDK: Transformed and Lit Vertices。
下一步將呼叫 IDirect3DDevice8::CreateVertexBuffer 建立頂點緩衝區,如以下程式碼段所示:
if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0 /* Usage */, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_p) ) )
return E_FAIL;
CreateVertexBuffer 的頭兩個引數告訴 Direct3D 新頂點緩衝區預計的大小和用法。緊跟的兩個引數指定新緩衝區的向量格式及位置。這裡的向量格式是 D3DFVF_CUSTOMVERTEX,就是例程先前定義的 FVF 值。D3DPOOL_DEFAULT 標記告訴 Direct3D 在最合適的位置建立此頂點緩衝區。最後一個引數返回建立完成的頂點緩衝區物件地址。
建立了頂點緩衝區之後,如以下程式碼段所示,開始採用自定義格式的頂點填充緩衝區中的資料。
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (BYTE**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
g_pVB->Unlock();
首先呼叫 IDirect3DVertexBuffer8::Lock 鎖定頂點緩衝區。函式第一個引數是鎖定頂點資料的偏移量,按位元組計算。第二個引數是需鎖定的頂點資料長度,同樣按位元組計算。第三個引數是一個 BYTE 型別指標的地址,用於返回指向頂點資料的地址。第四個引數告知頂點緩衝區如何鎖定資料。
透過使用 memcpy,頂點被複制到頂點緩衝區裡。將頂點放入緩衝區之後,呼叫一次 IDirect3DVertexBuffer8::Unlock 以解鎖頂點緩衝區。這個鎖定——解鎖機制是必需的,因為正在使用的頂點緩衝區可能位於裝置中。
現在頂點緩衝區已經填入頂點,繪製到顯示的時候到了,見描述:第三步:繪製至螢幕 。
第三步:繪製至螢幕
現在緩衝區已經填入頂點,現在需要把它繪製到螢幕上。在繪製到螢幕之前,先將背景清除為藍色並呼叫 BeginScene。
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0L );
g_pd3dDevice->BeginScene();
從頂點緩衝區繪製頂點資料需要一些步驟。首先,你需要設定流資料來源;在當前情況下,使用第 0 個流 。流的資料來源是透過呼叫 IDirect3DDevice8::SetStream 設定的。
g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof(CUSTOMVERTEX) );
SetStreamSource 的第一個引數告訴 Microsoft Direct3D 裝置設定資料流的。第二個引數是繫結在該資料流上的頂點緩衝區。第三個引數是資料單元的大小,用位元組數表示。在上面的示例程式碼中,將使用CUSTOMVERTEX 的大小作為資料單元的大小。
下一步透過呼叫 IDirect3DDevice8::SetVertexShader 使 Direct3D 瞭解使用中的頂點(Vertex Shader)。就整體而言,自定義頂點處理器是一種高階的話題,但是在絕大多數情況下頂點處理器僅僅等於 FVF 程式碼。這能夠讓 Direct3D 知道處理中的頂點型別。以下程式碼片段將FVF設定為當前頂點處理器:
g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX );
SetVertexShader() 唯一的引數是當前設定的頂點處理器的控制程式碼。這個引數的值可以是從IDirect3DDevice8::CreateVertexShader 返回的控制程式碼,或者是 FVF 程式碼。在這兒,使用的引數是定義為 D3DFVF_CUSTOMVERTEX 的 FVF 程式碼。
關於頂點處理器的更多資訊,請見 SDK: Vertex Shader 一章。
下一步使用 IDirect3DDevice8::DrawPrimitive 繪製頂點緩衝區中的頂點,見以下程式碼片段:
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );
DrawPrimitive 接受的第一個引數是一個標記,它通知 Direct3D 繪製哪種型別的物件(Primitive)。本例程使用 D3DPT_TRIANGLELIST 標記指定為三角形序列。第二個引數是第一個頂點的索引。第三個引數通知繪製的物件的數目。本例子只畫一個三角形,這個值為 1。
關於不同種類物件的更多資訊,可見 SDK: 3-D Primitive
最後的一步是結束場景並立即將後背緩衝提交為前景緩衝。這些寫在以下程式碼片段中:
g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
當後背緩衝被提交為前景緩衝後,客戶視窗將顯示出一個三個點顏色各異的三角形。
本指南已經指導你如何使用頂點構造幾何外形了。指南三:使用矩陣 將介紹矩陣的概念以及如何使用它們。
(指南三:使用矩陣 見本文第四部分)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992157/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DirectX 圖形介面指南(2) (轉)
- DirectX 圖形介面指南(4) (轉)
- DirectX 圖形介面指南(5) (轉)
- DirectX 圖形介面指南(6) (轉)
- DirectX 圖形介面指南(7) (轉)
- DirectX圖形介面指南的介紹(轉)
- 圖形使用者介面(轉)
- 急救~進不了圖形介面(轉)
- 《WTL起步 - 玩轉圖形介面》目錄 (轉)
- DirectX8程式設計指南-1 (轉)程式設計
- centos 圖形介面和命令列介面切換(轉載)CentOS命令列
- Linux圖形介面知識-輕鬆更換圖形環境(轉)Linux
- DirectX5.0最新遊戲程式設計指南 (轉)遊戲程式設計
- 3 個 Linux 上的 SSH 圖形介面工具Linux
- AIX圖形介面配置AI
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 一、配置DirectX SDK (轉)遊戲程式設計
- (轉)使用yum來安裝CentOS圖形介面包CentOS
- VNC連線圖形介面VNC
- 圖形學 旋轉與投影矩陣-3矩陣
- 理解FreeBSD中的圖形介面X系統(轉)
- Linux下的GTK圖形介面程式設計(轉)Linux程式設計
- Linux字元介面和圖形介面Linux字元
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 一、DirectDraw的基本圖象概念 (轉)遊戲程式設計
- RenderDoc圖形偵錯程式詳細使用教程(基於DirectX11)
- CSS3的過渡,動畫,圖形轉換CSSS3動畫
- 圖形介面系統XFree86的歷史(轉)
- Win32彙編教程八 圖形介面的操作 (轉)Win32
- Linux圖形介面GNOME和KDE終獲統一(轉)Linux
- ffmpeg 圖形化介面工具 traGtor
- 試試python圖形介面Python
- Linux 安裝圖形介面Linux
- 26 使用者圖形介面
- 07圖形化介面和命令列介面操作命令列
- 學習筆記之JAVA圖形設計卷I AWT——第3章 圖 形 (轉)筆記Java
- 騰訊力作!超實用的iOS 9 人機介面指南(5):圖示與圖形設計iOS
- 帶你走進圖形使用者介面編制 (一) (轉)
- 配置XDM--一種Linux的圖形登入介面(轉)Linux
- 讓redhat9 自動進入圖形登陸介面(轉)Redhat