■ DirectX 9 Program
摘要: 在三維圖形程序設計中,網格模型占有非常重要的地位,而且也是比較復雜的部分,特別是包含動畫和蒙皮信息的網格模型。
.x文件格式最初是為傳統的Direct3D保留模式而設計的,在DirectX 6.0問世后,針對立即模式對它作過一次擴展。要想在Direct3D程序中靈活自如地使用網格模型,應當深入理解.x文件格式。
閱讀全文
摘要: 紋理映射在三維圖形程序設計中具有非常重要的作用,三維場景中的許多特殊效果都是通過紋理映射來實現的。例如通過紋理映射模擬復雜的光照效果,物體表面對周圍環境的反射效果等。
Direct3D最多支持8層紋理,也就是說,在一個三維物體的表面可以同時擁有1~8張不同的紋理貼圖。Direct3D能夠在一個渲染過程中把這些紋理顏色依次混合,渲染到同一個物體的表面。每一個紋理層對應0~7的索引序號,多層紋理映射能夠模擬更為真實的三維世界。
閱讀全文
摘要: 圖形系統中為了獲得當前運行程序的相關信息,往往需要在屏幕上顯示文本,Direct3D的功能擴展接口ID3DXFont對此提供了方便的解決方法。
使用接口ID3DXFont繪制文本,首先需要通過函數D3DXCreateFont()創建ID3DXFont字體對象。ID3DXFont接口封裝了 Windows字體和Direct3D設備指針,D3DXCreateFont()函數通過Windows字體和Direct3D設備指針創建 ID3DXFont對象。
閱讀全文
摘要: 霧化效果是計算機圖形學中應用最廣的效果之一,它不僅能顯著地增加視覺效果的真實感,并可以提供一定的深度感。在實時圖形程序,特別是游戲設計程序中,為了確保圖形系統的運行速度,圖形開發人員往往在位于觀察點遠處的場景使用較為簡單的三維模型,甚至不繪制物體,而在近處使用復雜模型,這樣就可能造成物體變形、突然出現或突然消失等失真現象,霧化效果可以有效地避免這種失真現象。
閱讀全文
摘要: 在繪制復雜的三維場景時,不可避免地會出現物體間的相互遮擋,在這種情況下,為了正確地繪制場景需要使用深度測試。半透明物體的繪制不同于不透明物體, Direct3D通過alpha混合實現半透明物體的繪制。深度測試可以簡化復雜場景的繪制,alpha混合可以使繪制的三維場景更完整、更逼真。
在復雜的場景中,通常有多個物體需要繪制,這些物體之間通常會存在遮擋關系,離觀察點較遠的物體會因為近處物體的者的遮擋而不可見或只有部分可見,Direct3D圖形系統提供了深度測試功能來實現這種效果。
閱讀全文
摘要: 利用.x文件模型渲染三維模型,首先需要將.x文件中的各種數據分別加載到內存中,主要包括頂點數據、材質數據和紋理數據等。
Direct3D擴展實用庫定義了多邊形網格模型接口ID3DXMesh來表示一個復雜的三維物體模型,它是一個COM接口,繼承自ID3DXBaseMesh。
Direct3D擴展實用庫函數D3DXCreateMesh()可用于創建一個Direct3D網格模型對象。
閱讀全文
摘要: 為了使渲染的圖形看起來更真實,Direct3D提供了在物體表面繪制紋理的功能。一般說來,紋理是表示物體表面細節的一幅或幾幅二維圖形,也稱紋理貼圖(texture)。當把紋理按照特定的方式映射到物體表面的時候,能使物體看上去更加真實。當前流行的圖形系統中,紋理繪制已經成為一種必不可少的渲染方法。在理解紋理映射時,可以將紋理看作應用程序在物體表面的像素顏色。在真實世界中,紋理表示一個對象的顏色、圖案以及觸覺特征。但在Direct3D 中,紋理只表示對象表面的彩色圖案,它不能改變對象的幾何形式。更進一步說,它只是一種高強度計算行為。
閱讀全文
摘要: Ambient lighting provides constant lighting for a scene. It lights all object vertices the same because it is not dependent on any other lighting factors such as vertex normals, light direction, light position, range, or attenuation. It is the fastest type of lighting but it produces the least realistic results. Direct3D contains a single global ambient light property that you can use without creating any light. Alternatively, you can set any light object to provide ambient lighting.
閱讀全文
摘要: 在三維圖形程序中使用光照效果能夠有效地增強場景的真實感。在Direct3D中,通過計算場景中的光線和物體表面材質反射光線顏色的數學交互,可使光線模型接近于真實世界的照明系統。
在真實世界中,光線在到達眼睛之前經過了物體表面的多次反射,每次反射時,物體表面都會吸收一些光,有些被隨機反射擴散出去,其余的到達下一個物體的表面或眼睛。真實世界中光線反射的效果就是光線跟蹤算法需要模擬實現的。盡管光線跟蹤算法能夠創建非常逼真的與自然界中觀察到極為相似的景象,但是還沒有實時程序能夠完成這些運算。考慮到實時渲染的需要,Direct3D使用更簡單的方法進行光照計算。Direct3D光照計算模型包括4種:環境光、漫反射光、鏡面反射光和自發光。它們的結合能靈活高效地解決三維圖形程序中的光照問題。
閱讀全文
摘要: 空間中的物體需要使用三維坐標來描述,而顯示器是一個二維的表面,所以在屏幕上渲染一個三維場景時,首先需要將描述空間物體的三維坐標變換為二維坐標(世界坐標到屏幕坐標),這在Direct3D中稱為頂點坐標變換。頂點坐標變換通常通過矩陣來完成。可以把頂點坐標變換想象成攝像過程,三維世界的景物通過攝像機的拍攝顯示在二維的相片上,所不同的是把相片換成了屏幕。
閱讀全文
摘要: 顏色在Direct3D中占據比較重要的位置,所有的操作無論是光照還是紋理貼圖,其結果最終都歸結到如何影響每個頂點或像素的顏色。
Direct3D資源是指用來渲染一個場景的紋理或緩沖區。應用程序需要創建、加載、復制、使用資源。Direct3D所有的資源,包括幾何數據資源 IDirect3DIndexBuffer9、IDirect3DVertexBuffer9等,都繼承于接口IDirect3DResource9。紋理資源IDirect3DCubeTexture9,IDirect3DTexture9和IDirect3DVolumeTextre9是從接口 IDirect3DResource9的子接口IDirect3DBaseTexture9中繼承而來的。
閱讀全文
摘要: 圖元(primitives)是Direct3D中定義的基本圖形表示,它是組成一個單一實體的一組頂點。最簡單的圖元是三維坐標系中多個點的集合,稱為點列表(point list)。通常,圖元是多邊形(polygon),一個多邊形是由至少三條邊組成的封閉圖形。最簡單的多邊形是三角形,Direct3D使用三角形來構成大多數其他多邊形,這是因為三角形的三個頂點肯定是共面的,而渲染不共面的頂點效率比較低。通過組合三角形可以形成更大、更復雜的多邊形和網格(mesh)。
閱讀全文
摘要: Microsoft Direct3D的一種實現方式是通過組件對象模型(Component Object Model, COM)及其接口實現的,在用C++語言和COM接口方式開發的程序中可以直接訪問這些接口和對象。Direct3D對象是Direct3D程序中需要創建的第一個對象,也是需要最后一個釋放的對象,這里所說的對象是指COM對象。通過Direct3D對象,可以枚舉和檢索Direct3D設備,這樣應用程序就可以在不需要創建設備對象的前提下選擇Direct3D渲染設備。
閱讀全文
摘要: FinalPos = MeshPos + ∑( Difference_i * Weight_i)
= MeshPos + ∑( (NewMeshPos_i - MeshPos) * Weight_i )
= MeshPos + ∑( (MeshPos × OffsetMatix_i × CombinedMatrix_i - MeshPos) * Weight_i ) [1]
閱讀全文
摘要: 假設用戶點擊了屏幕上的點 s (x, y)。 從圖15.1我們能看到用戶選取了茶壺。無論如何,應用程序無法根據給定的s點就立即確定茶壺是被選取。
我們知道一些知識:關于茶壺和它的關聯點s,茶壺投影在圍繞s點的區域,更準確的說是:它投影到投影窗口上圍繞p點的區域,與它對應的屏幕點是s。因為這個問題依賴于3D物體與它的投影之間的關系,我們看圖15.2就可以了解。
閱讀全文
摘要: 許多自然現象是由很多小的小顆粒組成的,它們有相似的行為。(例如,雪花落下,閃爍的火焰,沖出槍管的“子彈”),粒子系統用來模擬這種現象。
粒子是一個很小的對象,它通常用來模擬數學中的一個點。點元是用來顯示粒子的很好的方案,可是點元被光柵化成一個簡單的像素。這沒給我們多少靈活性,因為我們想有各種大小不同的粒子,并且把整個紋理平滑映射到這些粒子上。在Direct3D 8.0以前,因為點元方法的局限性而完全不使用他們。代替的方法是程序員將使用公告板去顯示粒子,一個板是一個方格,世界矩陣用它來確定方向,使它總是朝向照相機。
閱讀全文
摘要: 實際上,地形網格不比三角形網格復雜,圖13.1.(a)所示,網絡的每個頂點指定了高度,格子模型用這種方式顯示從山脈到河流的平滑過渡。圖13.1 (b),模擬自然地形。當然,我們可以用漂亮的紋理表現沙石地,綠色的山丘。圖13.1.(c)雪山效果。
閱讀全文
摘要: 我們使用D3DXMatrixLookAtLH函數來計算視圖空間變換矩陣。這個函數對于在固定位置布置和對準攝像機是非常好用的,不過它的用戶接口對于要響應用戶輸入來實現攝像機移動就不那么好用了。這就激發我們用我們自己的方法來解決,這里我們展示了怎樣實現一個Camera類,它使我們能夠比 D3DXMatrixLookAtLH函數更好地操作攝像機,并且可以用來作為飛行模擬攝像機和第一人稱視角攝像機。
閱讀全文
摘要: ID3DXMesh接口的主要功能繼承自ID3DXBaseMesh父接口,了解這些是很重要的,其它一些mesh接口如ID3DXPMesh也是繼承自ID3DXBaseMesh。
閱讀全文
摘要: 在D3DX庫中提供了一個ID3DXFont接口,它能被用于在Direct3D應用程序中繪制文字。
閱讀全文
摘要: 模板緩存是一個離屏緩存,我們能夠用它來完成一些特效。模板緩存與后臺緩存和深度緩存有相同的定義,因此在模板緩存中的像素與后臺緩存和深度緩存中的像素是相協調的。就象名字所說,模板緩存就象一個模板它允許我們刷新渲染后緩存的某個部分。
閱讀全文
摘要: 我們介紹一種叫做混合(blending)的技術,它允許我們混合像素,我們通常用已經光柵化的像素光柵化同一位置的像素。換句話說就是我們在圖元上混合圖元,這種技術允許我們完成多種特效。
閱讀全文
摘要: 紋理映射是一種允許我們為三角形賦予圖象數據的技術;這讓我們能夠更細膩更真實地表現我們的場景。例如,我們能夠創建一個立方體并且通過對它的每個面創建一個紋理來把它變成一個木箱(如圖6.1)。
在Direct3D中一個紋理是通過IDirect3DTexture9接口來表現的,一個紋理是一個類似像素矩陣的表面它能夠被映射到三角形上。
閱讀全文
摘要: 為了提高場景的真實性,我們可以為其加入燈光。燈光也能幫助表現物體的立體感以及物體的實體形狀。當使用燈光時,我們不再自己指定頂點的顏色; Direct3D中每個頂點都通過燈光引擎來計算頂點顏色,該計算是基于定義的燈光資源,材質以及燈光資源關心的表面方向。通過燈光模型計算頂點顏色會得到更真實的場景。
閱讀全文
摘要: 在Direct3D中,顏色是使用RGB三部分來描述的。也就是說,我們要分別指定紅、綠和藍三種顏色的值。混合這三個顏色決定最終的顏色。利用這三種顏色我們能夠表現數萬種顏色。
我們使用兩種不同的結構來存儲RGB數據。這第一種是D3DCOLOR,它實際上是一個DWORD類型即32位。在D3DCOLOR類型中的這些位按照8-bit被分為4個部分,每一部分存儲的是該色的亮度值。如圖4.1所示。
閱讀全文
摘要: 頂點和索引緩存有相似的接口并且共享相似的方法;因此我們把它們合在一起講解。一個頂點緩存是一塊連續的存儲了頂點數據的內存。同樣的,一個索引緩存是一塊連續的存儲了索引數據的內存。我們使用頂點和索引緩存保存我們的數據是因為它們能被放置在顯存中。渲染顯存中的數據要比渲染系統內存中的數據快的多。
閱讀全文
摘要: 這次主題是渲染管線。它是用來創建為3D世界進行幾何描述的2D圖形并設定一個虛擬照相機確定這個世界中哪一部分將被透視投影到屏幕上。
閱讀全文
摘要: Direct3D是一種低層圖形API,它能讓我們利用3D硬件加速來渲染3D世界。我們可以把Direct3D看作是應用程序和圖形設備之間的中介。例如通知圖形設備清空屏幕,應用程序將調用Direct3D的IDirect3DDevice9::Clear方法。圖1.1顯示了應用程序、 Direct3D和圖形設備之間的關系。
閱讀全文
摘要: 幾何學中,我們用有向線段表示向量,如圖1。向量的兩個屬性是他的長度和他的頂點所指的方向。因此,可以用向量來模擬既有大小又有方向的物理模型。例如,以后我們要實現的粒子系統。我們用向量來模擬粒子的速度和加速度。在3D計算機圖形學中我們用向量不僅僅模擬方向。例如我們常常想知道光線的照射方向,以及在3D世界中的攝象機。向量為在3維空間中表示方向的提供了方便。
閱讀全文
摘要: 網絡是指多臺計算機互聯以進行數據傳輸及通信的系統。除了兩個或更多的計算機之外,網路還需要有網絡互聯軟件(或一個網路操作系統)、網絡適配器以及電纜。網絡適配器有各種形狀和大小,但是一般都采用調制解調器的形狀。實際上,調制解調器就是一個網路適配器,它能夠將一臺計算機通過世界上最大的網絡-- -互聯網連接到數百萬臺計算機上。
網絡互聯模型有三種基本類型:服務器端、客戶端以及點對點。
閱讀全文
摘要: DirectX是由微軟公司建立的游戲編程接口。由C++編程語言實現,遵循COM。在Windows的平臺上影響力超越OpenGL并被多數PC 游戲開發商采用。最新版本DirectX9.0c (2006年12月13日)。另外,Windows Vista第5238版亦包含有 DirectX 10 的 Beta 版。
很多Windows游戲需要DirectX。DirectX包含DirectGraphic、DirectPlay、 DirectSound、DirectInput、DirectSetup等部份。 (Direct3D與DirectDraw已整合成DirectGraphic,而DirectShow亦已自原本的DirectX SDK中移到Windows平臺SDK了。 Redist Package 是媒體開發底層API,通過它可以開發游戲和其它媒體應用程序。
閱讀全文
摘要: 音樂就是一系列的音符,這些音符在不同的時間用不同的幅度被播放或者停止。有非常多的指令被用來播放音樂,但是這些指令的操作基本相同,都在使用各種各樣不同的音符。在計算機上進行作曲,實際上是存儲了很多組音樂,回放時由音頻硬件將這些音符播放出來。
閱讀全文
摘要: DirectInput是一些COM對象的集合(和所有DirectX組件相同),這些COM對象描繪了輸入系統和各個輸入設備。最主要的對象是DirectInput8,它用于初始化系統以及創建輸入設備
閱讀全文
摘要: 三維物體表面的各個剖分三角形構成了一個所謂的網格(Mesh),使用3D建模軟件繪制三維圖象,可取得網格的頂點坐標,頂點紋理坐標以及三角形面的材質等數據,并可將這些數據保存到相應的三維圖象文件中。此時調用DirectX提供的網格接口函數,讀取三維圖象文件的頂點數據,就可對三維物體表面進行渲染處理。
閱讀全文
摘要: 渲染管道流水線通常需要將來自頂點的顏色,紋理像素的顏色,光照顏色以及物體表面材質反射光顏色進行混合,生成計算機屏幕的像素顏色。將多種顏色混合在一起,必須考慮各種顏色的成分比例,這個比例由Alpha因子決定。對于游戲開發來說,利用Alpha顏色混合可產生背景透明的渲染效果。
閱讀全文
摘要: 紋理是指物體表面本身所具有的圖案,可采用貼圖的方法將一張二維圖象張貼到一個三維物體的表面,這就是所謂的紋理貼圖技術。與材質一樣,紋理也是物體表面的一種屬性,同時結合材質,光照和紋理技術可對三維場景進行渲染,使渲染出來的三維圖形更為逼真。
閱讀全文
摘要: 在最底層的層次中,Direct3D并不使用網格模型,而只是使用多邊形。D3DX增強了Direct3D系統的功能性,添加了一系列負責處理網格模型的容器和進行渲染的對象。.X文件是微軟公司所開發的,高度通用的三維模型存儲格式。它是模板驅動并完全可擴展,這就意味著可以使用它來滿足文件存儲的所有需求。一個.X文件,正如它的文件擴展名所表明的,是非常通用的。它可以是基于文本的,以便更容易進行編輯;或者是基于二進制的,這樣可以使文件更小,并且更容易地進行保護以便不被窺視。整個.X文件格式是基于模板的,非常類似于C語言結構。
為了讀取并處理一個.X文件,可以利用COM對象的一個小集合來解析從頭到尾在.X文件中所遇到的每個數據對象。將數據對象作為一個字節的數組進行處理;僅僅是將數組轉換為一種可使用的結構,以便能夠容易地訪問到包含在對象里的數據。
閱讀全文
摘要: 在渲染多邊形網格對象到場景中的時候,離觀察者越遠的對象應該越模糊,同時離觀察者越近的物體應該越清楚,這就是深度排序(depth sorting)。深度排序有兩種常用的方法。
第一種方法稱為畫家算法(painter's algorithm)。這種方法將對象劃分成不同的多邊形,由后往前對這些多邊形進行排序,再按照排好的順序繪制出這些多邊形。采用這種方法繪制多邊形,能夠確保前面的多邊形總是在其后多邊形之前進行繪制。
深度排序的第二種方法稱為z緩沖方法(z-buffer),它是圖形硬件設備使用最多的方法。這種方法依賴于像素,每個像素都有一個z值(z值是像素距離觀察者的距離)。當每個像素被寫入時,渲染器首先檢查是否已經存在一個z值更小的像素,如果不存在,這個像素就被繪制出來;如果存在,就跳過該像素。
閱讀全文
摘要: 大爆炸,煙霧痕跡甚至魔術飛彈尾部發出的微小火花,都是粒子(particle)所制造出來的特殊效果。在適當的時機,啟用alpha混合并繪制粒子,這樣粒子就能朝向觀察點(使用公告板),得到的結果就是混合對象的抽象拼貼,他們可以用于創建一些奇妙的效果。
粒子奇妙的地方就在于粒子的大小實際上是任意的,原因在于可以創建一個縮放矩陣,使其同粒子多邊形的世界變換矩陣結合起來。也就是說,除非粒子紋理不同,否則只需要使用一個多邊形來繪制所有的粒子,無論如何,多邊形的數目都必須同紋理的數目保持一致。
閱讀全文
Full ■ DirectX 9 Program Archive