摘要: 在Direct3D中,頂點坐標變換通常是借助于矩陣實現的,因此下面首先介紹在Direct3D中提供的各種矩陣類型和相關的矩陣運算函數。
閱讀全文
摘要: 空間中的物體需要使用三維坐標來描述,而顯示器是一個二維的表面,所以在屏幕上渲染一個三維場景時,首先需要將描述空間物體的三維坐標變換為二維坐標(世界坐標到屏幕坐標),這在Direct3D中稱為頂點坐標變換。頂點坐標變換通常通過矩陣來完成。可以把頂點坐標變換想象成攝像過程,三維世界的景物通過攝像機的拍攝顯示在二維的相片上,所不同的是把相片換成了屏幕。
閱讀全文
摘要: 顏色在Direct3D中占據比較重要的位置,所有的操作無論是光照還是紋理貼圖,其結果最終都歸結到如何影響每個頂點或像素的顏色。
Direct3D資源是指用來渲染一個場景的紋理或緩沖區。應用程序需要創建、加載、復制、使用資源。Direct3D所有的資源,包括幾何數據資源 IDirect3DIndexBuffer9、IDirect3DVertexBuffer9等,都繼承于接口IDirect3DResource9。紋理資源IDirect3DCubeTexture9,IDirect3DTexture9和IDirect3DVolumeTextre9是從接口 IDirect3DResource9的子接口IDirect3DBaseTexture9中繼承而來的。
閱讀全文
摘要: 圖元(primitives)是Direct3D中定義的基本圖形表示,它是組成一個單一實體的一組頂點。最簡單的圖元是三維坐標系中多個點的集合,稱為點列表(point list)。通常,圖元是多邊形(polygon),一個多邊形是由至少三條邊組成的封閉圖形。最簡單的多邊形是三角形,Direct3D使用三角形來構成大多數其他多邊形,這是因為三角形的三個頂點肯定是共面的,而渲染不共面的頂點效率比較低。通過組合三角形可以形成更大、更復雜的多邊形和網格(mesh)。
閱讀全文
摘要: 游戲程序通常都是運行在全屏幕模式下,進行全屏顯示的關鍵是使用全屏顯示的渲染設備。創建全屏顯示模式渲染設備同窗口模式渲染設備基本相同,區別是將 d3dpp.Windowed設置為FALSE,告訴Direct3D系統,將要創建的是全屏模式渲染設備。此外,還需要明確指定后臺緩沖區的大小和格式,這和創建窗口模式渲染設備是不相同的,在創建窗口模式渲染設備時可將后臺緩沖區格式設置為D3DFMT_UNKNOWN,后臺緩沖區大小也可取默認值,而在創建全屏模式渲染設備時這些都需要明確指定。
閱讀全文
摘要: 場景提交即將在后臺緩沖區繪制好的場景提交到前臺緩沖區,從而在屏幕上顯示出來。提交接口函數是一組控制特定的渲染設備狀態的方法,這些設備影響顯示器的顯示。
(1)前臺緩沖區:這是一塊由顯卡轉換來的矩形存儲區,這塊矩形存儲區的內容顯示在顯示器或其他輸出設備上。
(2)后臺緩沖區:后臺緩沖區是一個表面,其內容可以提交到前臺緩沖區。
(3)交換鏈:一組后臺緩沖區集合,它們被順序地提交到前臺緩沖區。一般情況下,一個全屏交換鏈通過翻轉設備驅動接口(DDI)來提交隨后的顯示內容,窗口交換鏈通過位塊傳送DDI提交顯示內容。
閱讀全文
摘要: 靈活頂點格式(Flexible Vertex Format, FVF)用來描述在頂點緩沖區中的頂點存儲格式中包含了哪些屬性。Direct3D應用程序可以用幾種不同的方式定義靈活頂點格式。靈活頂點格式使應用程序只使用它需要的頂點數據,排除那些它不需要的組成成分。這樣,應用程序可以節省內存空間,減少系統帶寬。通過D3DFVF的組合,可以描述圖元頂點的格式。靈活頂點格式指定的格式包括點的大小,用D3DFVF_PSIZE指定,該大小在投影機空間用來表示未經變換的頂點,在設備空間用來表示經過變換的頂點。
閱讀全文
摘要: 當繪制一個比較復雜的圖形時,需要使用許多相互鄰接的三角形。如果為每個三角形準備三個頂點數據,顯然有許多數據是重復的,這樣會浪費大量的內存和系統帶寬。為了解決這一問題,可以先創建一個頂點緩沖區,將不重復的頂點數據寫入頂點緩沖區,然后創建一個頂點索引緩沖區(index buffer),存放各個三角形的頂點索引信息,最后通過頂點索引和頂點數據共同完成圖形繪制。
閱讀全文
摘要: 上面使用頂點緩沖區繪制的是三角形列表圖元,前面介紹過Direct3D支持點列表,線段列表、線段條帶、三角形列表、三角形條帶、三角扇形6種基本圖元。下面通過示例程序BasicPrimitive演示各種基本圖元的繪制。該示例程序使用同一個頂點緩沖區繪制不同類型的圖元,程序中通過一個全局變量標識當前繪制的圖元類型,通過單擊鍵盤上的"1" ~ "6"數字鍵可以在各圖元類型之間進行切換,單擊空格鍵可以在線框模式和實體模式之間切換。
閱讀全文
摘要: 函數IDirect3DDevice9::SetStreamSource()將頂點緩沖區和渲染數據流鏈接。
閱讀全文