• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當自強而不息

            ■ DirectX 9 Program

            網格模型高級技術
                 摘要: 在三維圖形程序設計中,網格模型占有非常重要的地位,而且也是比較復雜的部分,特別是包含動畫和蒙皮信息的網格模型。

            .x文件格式最初是為傳統的Direct3D保留模式而設計的,在DirectX 6.0問世后,針對立即模式對它作過一次擴展。要想在Direct3D程序中靈活自如地使用網格模型,應當深入理解.x文件格式。   閱讀全文

            posted @ 2008-06-14 10:25 lovedday 閱讀(7061) | 評論 (2)  編輯

            高級紋理映射技術
                 摘要: 紋理映射在三維圖形程序設計中具有非常重要的作用,三維場景中的許多特殊效果都是通過紋理映射來實現的。例如通過紋理映射模擬復雜的光照效果,物體表面對周圍環境的反射效果等。

            Direct3D最多支持8層紋理,也就是說,在一個三維物體的表面可以同時擁有1~8張不同的紋理貼圖。Direct3D能夠在一個渲染過程中把這些紋理顏色依次混合,渲染到同一個物體的表面。每一個紋理層對應0~7的索引序號,多層紋理映射能夠模擬更為真實的三維世界。   閱讀全文

            posted @ 2008-05-22 18:12 lovedday 閱讀(6807) | 評論 (5)  編輯

            Direct3D中的字體與文本顯示
                 摘要: 圖形系統中為了獲得當前運行程序的相關信息,往往需要在屏幕上顯示文本,Direct3D的功能擴展接口ID3DXFont對此提供了方便的解決方法。

            使用接口ID3DXFont繪制文本,首先需要通過函數D3DXCreateFont()創建ID3DXFont字體對象。ID3DXFont接口封裝了 Windows字體和Direct3D設備指針,D3DXCreateFont()函數通過Windows字體和Direct3D設備指針創建 ID3DXFont對象。  閱讀全文

            posted @ 2008-05-11 20:50 lovedday 閱讀(2310) | 評論 (0)  編輯

            Direct3D中的霧化
                 摘要: 霧化效果是計算機圖形學中應用最廣的效果之一,它不僅能顯著地增加視覺效果的真實感,并可以提供一定的深度感。在實時圖形程序,特別是游戲設計程序中,為了確保圖形系統的運行速度,圖形開發人員往往在位于觀察點遠處的場景使用較為簡單的三維模型,甚至不繪制物體,而在近處使用復雜模型,這樣就可能造成物體變形、突然出現或突然消失等失真現象,霧化效果可以有效地避免這種失真現象。  閱讀全文

            posted @ 2008-05-11 18:21 lovedday 閱讀(2007) | 評論 (0)  編輯

            深度測試與alpha混合
                 摘要: 在繪制復雜的三維場景時,不可避免地會出現物體間的相互遮擋,在這種情況下,為了正確地繪制場景需要使用深度測試。半透明物體的繪制不同于不透明物體, Direct3D通過alpha混合實現半透明物體的繪制。深度測試可以簡化復雜場景的繪制,alpha混合可以使繪制的三維場景更完整、更逼真。

            在復雜的場景中,通常有多個物體需要繪制,這些物體之間通常會存在遮擋關系,離觀察點較遠的物體會因為近處物體的者的遮擋而不可見或只有部分可見,Direct3D圖形系統提供了深度測試功能來實現這種效果。  閱讀全文

            posted @ 2008-05-10 17:02 lovedday 閱讀(4125) | 評論 (0)  編輯

            使用.x文件模型
                 摘要: 利用.x文件模型渲染三維模型,首先需要將.x文件中的各種數據分別加載到內存中,主要包括頂點數據、材質數據和紋理數據等。

            Direct3D擴展實用庫定義了多邊形網格模型接口ID3DXMesh來表示一個復雜的三維物體模型,它是一個COM接口,繼承自ID3DXBaseMesh。

            Direct3D擴展實用庫函數D3DXCreateMesh()可用于創建一個Direct3D網格模型對象。  閱讀全文

            posted @ 2008-05-09 15:33 lovedday 閱讀(2499) | 評論 (0)  編輯

            紋理映射基礎
                 摘要: 為了使渲染的圖形看起來更真實,Direct3D提供了在物體表面繪制紋理的功能。一般說來,紋理是表示物體表面細節的一幅或幾幅二維圖形,也稱紋理貼圖(texture)。當把紋理按照特定的方式映射到物體表面的時候,能使物體看上去更加真實。當前流行的圖形系統中,紋理繪制已經成為一種必不可少的渲染方法。在理解紋理映射時,可以將紋理看作應用程序在物體表面的像素顏色。在真實世界中,紋理表示一個對象的顏色、圖案以及觸覺特征。但在Direct3D 中,紋理只表示對象表面的彩色圖案,它不能改變對象的幾何形式。更進一步說,它只是一種高強度計算行為。   閱讀全文

            posted @ 2008-05-07 18:08 lovedday 閱讀(3811) | 評論 (0)  編輯

            深入理解光照計算模型
                 摘要: 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.   閱讀全文

            posted @ 2008-05-05 11:44 lovedday 閱讀(1584) | 評論 (0)  編輯

            光照與材質
                 摘要: 在三維圖形程序中使用光照效果能夠有效地增強場景的真實感。在Direct3D中,通過計算場景中的光線和物體表面材質反射光線顏色的數學交互,可使光線模型接近于真實世界的照明系統。

            在真實世界中,光線在到達眼睛之前經過了物體表面的多次反射,每次反射時,物體表面都會吸收一些光,有些被隨機反射擴散出去,其余的到達下一個物體的表面或眼睛。真實世界中光線反射的效果就是光線跟蹤算法需要模擬實現的。盡管光線跟蹤算法能夠創建非常逼真的與自然界中觀察到極為相似的景象,但是還沒有實時程序能夠完成這些運算。考慮到實時渲染的需要,Direct3D使用更簡單的方法進行光照計算。Direct3D光照計算模型包括4種:環境光、漫反射光、鏡面反射光和自發光。它們的結合能靈活高效地解決三維圖形程序中的光照問題。  閱讀全文

            posted @ 2008-05-05 09:32 lovedday 閱讀(1959) | 評論 (0)  編輯

            頂點坐標變換
                 摘要: 空間中的物體需要使用三維坐標來描述,而顯示器是一個二維的表面,所以在屏幕上渲染一個三維場景時,首先需要將描述空間物體的三維坐標變換為二維坐標(世界坐標到屏幕坐標),這在Direct3D中稱為頂點坐標變換。頂點坐標變換通常通過矩陣來完成。可以把頂點坐標變換想象成攝像過程,三維世界的景物通過攝像機的拍攝顯示在二維的相片上,所不同的是把相片換成了屏幕。   閱讀全文

            posted @ 2008-05-02 14:08 lovedday 閱讀(2825) | 評論 (6)  編輯

            Direct3D中的顏色和資源
                 摘要: 顏色在Direct3D中占據比較重要的位置,所有的操作無論是光照還是紋理貼圖,其結果最終都歸結到如何影響每個頂點或像素的顏色。

            Direct3D資源是指用來渲染一個場景的紋理或緩沖區。應用程序需要創建、加載、復制、使用資源。Direct3D所有的資源,包括幾何數據資源 IDirect3DIndexBuffer9、IDirect3DVertexBuffer9等,都繼承于接口IDirect3DResource9。紋理資源IDirect3DCubeTexture9,IDirect3DTexture9和IDirect3DVolumeTextre9是從接口 IDirect3DResource9的子接口IDirect3DBaseTexture9中繼承而來的。  閱讀全文

            posted @ 2008-05-01 17:16 lovedday 閱讀(2907) | 評論 (2)  編輯

            坐標系與基本圖元
                 摘要: 圖元(primitives)是Direct3D中定義的基本圖形表示,它是組成一個單一實體的一組頂點。最簡單的圖元是三維坐標系中多個點的集合,稱為點列表(point list)。通常,圖元是多邊形(polygon),一個多邊形是由至少三條邊組成的封閉圖形。最簡單的多邊形是三角形,Direct3D使用三角形來構成大多數其他多邊形,這是因為三角形的三個頂點肯定是共面的,而渲染不共面的頂點效率比較低。通過組合三角形可以形成更大、更復雜的多邊形和網格(mesh)。   閱讀全文

            posted @ 2008-05-01 16:16 lovedday 閱讀(1583) | 評論 (0)  編輯

            【ZT】D3DFVF_XYZ和D3DFVF_XYZRHW的區別

            posted @ 2008-04-30 10:44 lovedday 閱讀(5301) | 評論 (5)  編輯

            Direct3D程序設計基礎
                 摘要: Microsoft Direct3D的一種實現方式是通過組件對象模型(Component Object Model, COM)及其接口實現的,在用C++語言和COM接口方式開發的程序中可以直接訪問這些接口和對象。Direct3D對象是Direct3D程序中需要創建的第一個對象,也是需要最后一個釋放的對象,這里所說的對象是指COM對象。通過Direct3D對象,可以枚舉和檢索Direct3D設備,這樣應用程序就可以在不需要創建設備對象的前提下選擇Direct3D渲染設備。  閱讀全文

            posted @ 2008-04-29 15:45 lovedday 閱讀(1914) | 評論 (1)  編輯

            【ZT】模擬實現ID3DXSkinInfo::UpdateSkinnedMesh
                 摘要: FinalPos = MeshPos + ∑( Difference_i * Weight_i)

            = MeshPos + ∑( (NewMeshPos_i - MeshPos) * Weight_i )

            = MeshPos + ∑( (MeshPos × OffsetMatix_i × CombinedMatrix_i - MeshPos) * Weight_i ) [1]  閱讀全文

            posted @ 2008-04-22 15:22 lovedday 閱讀(1073) | 評論 (0)  編輯

            D3D中的拾取
                 摘要: 假設用戶點擊了屏幕上的點 s (x, y)。 從圖15.1我們能看到用戶選取了茶壺。無論如何,應用程序無法根據給定的s點就立即確定茶壺是被選取。

            我們知道一些知識:關于茶壺和它的關聯點s,茶壺投影在圍繞s點的區域,更準確的說是:它投影到投影窗口上圍繞p點的區域,與它對應的屏幕點是s。因為這個問題依賴于3D物體與它的投影之間的關系,我們看圖15.2就可以了解。  閱讀全文

            posted @ 2008-04-04 16:31 lovedday 閱讀(5164) | 評論 (2)  編輯

            D3D中的粒子系統
                 摘要: 許多自然現象是由很多小的小顆粒組成的,它們有相似的行為。(例如,雪花落下,閃爍的火焰,沖出槍管的“子彈”),粒子系統用來模擬這種現象。

            粒子是一個很小的對象,它通常用來模擬數學中的一個點。點元是用來顯示粒子的很好的方案,可是點元被光柵化成一個簡單的像素。這沒給我們多少靈活性,因為我們想有各種大小不同的粒子,并且把整個紋理平滑映射到這些粒子上。在Direct3D 8.0以前,因為點元方法的局限性而完全不使用他們。代替的方法是程序員將使用公告板去顯示粒子,一個板是一個方格,世界矩陣用它來確定方向,使它總是朝向照相機。   閱讀全文

            posted @ 2008-04-04 13:13 lovedday 閱讀(2999) | 評論 (0)  編輯

            D3D中的地形繪制基礎
                 摘要: 實際上,地形網格不比三角形網格復雜,圖13.1.(a)所示,網絡的每個頂點指定了高度,格子模型用這種方式顯示從山脈到河流的平滑過渡。圖13.1 (b),模擬自然地形。當然,我們可以用漂亮的紋理表現沙石地,綠色的山丘。圖13.1.(c)雪山效果。   閱讀全文

            posted @ 2008-04-02 21:43 lovedday 閱讀(3913) | 評論 (1)  編輯

            設計一個靈活的Camera類
                 摘要: 我們使用D3DXMatrixLookAtLH函數來計算視圖空間變換矩陣。這個函數對于在固定位置布置和對準攝像機是非常好用的,不過它的用戶接口對于要響應用戶輸入來實現攝像機移動就不那么好用了。這就激發我們用我們自己的方法來解決,這里我們展示了怎樣實現一個Camera類,它使我們能夠比 D3DXMatrixLookAtLH函數更好地操作攝像機,并且可以用來作為飛行模擬攝像機和第一人稱視角攝像機。   閱讀全文

            posted @ 2008-03-30 15:19 lovedday 閱讀(2187) | 評論 (0)  編輯

            D3D中的網格模型
                 摘要: ID3DXMesh接口的主要功能繼承自ID3DXBaseMesh父接口,了解這些是很重要的,其它一些mesh接口如ID3DXPMesh也是繼承自ID3DXBaseMesh。  閱讀全文

            posted @ 2008-03-29 19:23 lovedday 閱讀(1696) | 評論 (0)  編輯

            D3D中的字體繪制
                 摘要: 在D3DX庫中提供了一個ID3DXFont接口,它能被用于在Direct3D應用程序中繪制文字。  閱讀全文

            posted @ 2008-03-26 18:52 lovedday 閱讀(1235) | 評論 (0)  編輯

            D3D中的模板緩存
                 摘要: 模板緩存是一個離屏緩存,我們能夠用它來完成一些特效。模板緩存與后臺緩存和深度緩存有相同的定義,因此在模板緩存中的像素與后臺緩存和深度緩存中的像素是相協調的。就象名字所說,模板緩存就象一個模板它允許我們刷新渲染后緩存的某個部分。   閱讀全文

            posted @ 2008-03-25 12:28 lovedday 閱讀(2179) | 評論 (0)  編輯

            D3D中的Alpha融合技術
                 摘要: 我們介紹一種叫做混合(blending)的技術,它允許我們混合像素,我們通常用已經光柵化的像素光柵化同一位置的像素。換句話說就是我們在圖元上混合圖元,這種技術允許我們完成多種特效。  閱讀全文

            posted @ 2008-03-18 14:57 lovedday 閱讀(1738) | 評論 (1)  編輯

            D3D中的紋理映射
                 摘要: 紋理映射是一種允許我們為三角形賦予圖象數據的技術;這讓我們能夠更細膩更真實地表現我們的場景。例如,我們能夠創建一個立方體并且通過對它的每個面創建一個紋理來把它變成一個木箱(如圖6.1)。

            在Direct3D中一個紋理是通過IDirect3DTexture9接口來表現的,一個紋理是一個類似像素矩陣的表面它能夠被映射到三角形上。  閱讀全文

            posted @ 2008-03-17 17:50 lovedday 閱讀(1513) | 評論 (0)  編輯

            D3D中的光照
                 摘要: 為了提高場景的真實性,我們可以為其加入燈光。燈光也能幫助表現物體的立體感以及物體的實體形狀。當使用燈光時,我們不再自己指定頂點的顏色; Direct3D中每個頂點都通過燈光引擎來計算頂點顏色,該計算是基于定義的燈光資源,材質以及燈光資源關心的表面方向。通過燈光模型計算頂點顏色會得到更真實的場景。   閱讀全文

            posted @ 2008-03-16 20:47 lovedday 閱讀(1548) | 評論 (0)  編輯

            D3D中的顏色
                 摘要: 在Direct3D中,顏色是使用RGB三部分來描述的。也就是說,我們要分別指定紅、綠和藍三種顏色的值?;旌线@三個顏色決定最終的顏色。利用這三種顏色我們能夠表現數萬種顏色。

            我們使用兩種不同的結構來存儲RGB數據。這第一種是D3DCOLOR,它實際上是一個DWORD類型即32位。在D3DCOLOR類型中的這些位按照8-bit被分為4個部分,每一部分存儲的是該色的亮度值。如圖4.1所示。  閱讀全文

            posted @ 2008-03-16 10:28 lovedday 閱讀(3371) | 評論 (1)  編輯

            Direct3D中的繪制
                 摘要: 頂點和索引緩存有相似的接口并且共享相似的方法;因此我們把它們合在一起講解。一個頂點緩存是一塊連續的存儲了頂點數據的內存。同樣的,一個索引緩存是一塊連續的存儲了索引數據的內存。我們使用頂點和索引緩存保存我們的數據是因為它們能被放置在顯存中。渲染顯存中的數據要比渲染系統內存中的數據快的多。  閱讀全文

            posted @ 2008-03-14 18:54 lovedday 閱讀(1277) | 評論 (0)  編輯

            繪制流水線
                 摘要: 這次主題是渲染管線。它是用來創建為3D世界進行幾何描述的2D圖形并設定一個虛擬照相機確定這個世界中哪一部分將被透視投影到屏幕上。  閱讀全文

            posted @ 2008-03-14 09:44 lovedday 閱讀(1298) | 評論 (0)  編輯

            初始化Direct3D
                 摘要: Direct3D是一種低層圖形API,它能讓我們利用3D硬件加速來渲染3D世界。我們可以把Direct3D看作是應用程序和圖形設備之間的中介。例如通知圖形設備清空屏幕,應用程序將調用Direct3D的IDirect3DDevice9::Clear方法。圖1.1顯示了應用程序、 Direct3D和圖形設備之間的關系。
              閱讀全文

            posted @ 2008-03-13 13:38 lovedday 閱讀(2180) | 評論 (0)  編輯

            D3D編程必備的數學知識
                 摘要: 幾何學中,我們用有向線段表示向量,如圖1。向量的兩個屬性是他的長度和他的頂點所指的方向。因此,可以用向量來模擬既有大小又有方向的物理模型。例如,以后我們要實現的粒子系統。我們用向量來模擬粒子的速度和加速度。在3D計算機圖形學中我們用向量不僅僅模擬方向。例如我們常常想知道光線的照射方向,以及在3D世界中的攝象機。向量為在3維空間中表示方向的提供了方便。  閱讀全文

            posted @ 2008-03-12 14:05 lovedday 閱讀(2104) | 評論 (0)  編輯

            使用DirectPlay進行網絡互聯
                 摘要: 網絡是指多臺計算機互聯以進行數據傳輸及通信的系統。除了兩個或更多的計算機之外,網路還需要有網絡互聯軟件(或一個網路操作系統)、網絡適配器以及電纜。網絡適配器有各種形狀和大小,但是一般都采用調制解調器的形狀。實際上,調制解調器就是一個網路適配器,它能夠將一臺計算機通過世界上最大的網絡-- -互聯網連接到數百萬臺計算機上。

            網絡互聯模型有三種基本類型:服務器端、客戶端以及點對點。   閱讀全文

            posted @ 2007-10-11 14:50 lovedday 閱讀(874) | 評論 (0)  編輯

            【ZT】DirectX簡介
                 摘要: 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,通過它可以開發游戲和其它媒體應用程序。  閱讀全文

            posted @ 2007-10-07 13:27 lovedday 閱讀(1336) | 評論 (0)  編輯

            用DirectX Audio和DirectShow播放聲音和音樂
                 摘要: 音樂就是一系列的音符,這些音符在不同的時間用不同的幅度被播放或者停止。有非常多的指令被用來播放音樂,但是這些指令的操作基本相同,都在使用各種各樣不同的音符。在計算機上進行作曲,實際上是存儲了很多組音樂,回放時由音頻硬件將這些音符播放出來。  閱讀全文

            posted @ 2007-09-24 23:38 lovedday 閱讀(3795) | 評論 (0)  編輯

            使用DirectInput進行交互
                 摘要: DirectInput是一些COM對象的集合(和所有DirectX組件相同),這些COM對象描繪了輸入系統和各個輸入設備。最主要的對象是DirectInput8,它用于初始化系統以及創建輸入設備  閱讀全文

            posted @ 2007-09-20 02:19 lovedday 閱讀(1117) | 評論 (0)  編輯

            XFile網格的應用
                 摘要: 三維物體表面的各個剖分三角形構成了一個所謂的網格(Mesh),使用3D建模軟件繪制三維圖象,可取得網格的頂點坐標,頂點紋理坐標以及三角形面的材質等數據,并可將這些數據保存到相應的三維圖象文件中。此時調用DirectX提供的網格接口函數,讀取三維圖象文件的頂點數據,就可對三維物體表面進行渲染處理。  閱讀全文

            posted @ 2007-09-20 02:13 lovedday 閱讀(917) | 評論 (0)  編輯

            D3D中的Alpha顏色混合
                 摘要: 渲染管道流水線通常需要將來自頂點的顏色,紋理像素的顏色,光照顏色以及物體表面材質反射光顏色進行混合,生成計算機屏幕的像素顏色。將多種顏色混合在一起,必須考慮各種顏色的成分比例,這個比例由Alpha因子決定。對于游戲開發來說,利用Alpha顏色混合可產生背景透明的渲染效果。   閱讀全文

            posted @ 2007-09-20 02:02 lovedday 閱讀(1929) | 評論 (0)  編輯

            D3D中的紋理貼圖
                 摘要: 紋理是指物體表面本身所具有的圖案,可采用貼圖的方法將一張二維圖象張貼到一個三維物體的表面,這就是所謂的紋理貼圖技術。與材質一樣,紋理也是物體表面的一種屬性,同時結合材質,光照和紋理技術可對三維場景進行渲染,使渲染出來的三維圖形更為逼真。   閱讀全文

            posted @ 2007-09-20 01:21 lovedday 閱讀(2652) | 評論 (0)  編輯

            D3D中網格模型的運用
                 摘要: 在最底層的層次中,Direct3D并不使用網格模型,而只是使用多邊形。D3DX增強了Direct3D系統的功能性,添加了一系列負責處理網格模型的容器和進行渲染的對象。.X文件是微軟公司所開發的,高度通用的三維模型存儲格式。它是模板驅動并完全可擴展,這就意味著可以使用它來滿足文件存儲的所有需求。一個.X文件,正如它的文件擴展名所表明的,是非常通用的。它可以是基于文本的,以便更容易進行編輯;或者是基于二進制的,這樣可以使文件更小,并且更容易地進行保護以便不被窺視。整個.X文件格式是基于模板的,非常類似于C語言結構。

            為了讀取并處理一個.X文件,可以利用COM對象的一個小集合來解析從頭到尾在.X文件中所遇到的每個數據對象。將數據對象作為一個字節的數組進行處理;僅僅是將數組轉換為一種可使用的結構,以便能夠容易地訪問到包含在對象里的數據。  閱讀全文

            posted @ 2007-07-22 23:27 lovedday 閱讀(4980) | 評論 (2)  編輯

            D3D中的Z緩存使用示例
                 摘要: 在渲染多邊形網格對象到場景中的時候,離觀察者越遠的對象應該越模糊,同時離觀察者越近的物體應該越清楚,這就是深度排序(depth sorting)。深度排序有兩種常用的方法。

            第一種方法稱為畫家算法(painter's algorithm)。這種方法將對象劃分成不同的多邊形,由后往前對這些多邊形進行排序,再按照排好的順序繪制出這些多邊形。采用這種方法繪制多邊形,能夠確保前面的多邊形總是在其后多邊形之前進行繪制。

            深度排序的第二種方法稱為z緩沖方法(z-buffer),它是圖形硬件設備使用最多的方法。這種方法依賴于像素,每個像素都有一個z值(z值是像素距離觀察者的距離)。當每個像素被寫入時,渲染器首先檢查是否已經存在一個z值更小的像素,如果不存在,這個像素就被繪制出來;如果存在,就跳過該像素。  閱讀全文

            posted @ 2007-07-04 20:53 lovedday 閱讀(1435) | 評論 (0)  編輯

            D3D中粒子效果實現示例
                 摘要: 大爆炸,煙霧痕跡甚至魔術飛彈尾部發出的微小火花,都是粒子(particle)所制造出來的特殊效果。在適當的時機,啟用alpha混合并繪制粒子,這樣粒子就能朝向觀察點(使用公告板),得到的結果就是混合對象的抽象拼貼,他們可以用于創建一些奇妙的效果。

            粒子奇妙的地方就在于粒子的大小實際上是任意的,原因在于可以創建一個縮放矩陣,使其同粒子多邊形的世界變換矩陣結合起來。也就是說,除非粒子紋理不同,否則只需要使用一個多邊形來繪制所有的粒子,無論如何,多邊形的數目都必須同紋理的數目保持一致。  閱讀全文

            posted @ 2007-07-04 14:52 lovedday 閱讀(1900) | 評論 (0)  編輯

            D3D中公告板的使用示例
                 摘要: 公告板(billboard)是一種允許在2D對象出現在3D中的很酷的技術,公告板的原理就是通過使用世界矩陣,根據觀察點來排列多邊形,因為觀察的角度已知(或能夠獲得一個觀察變換矩陣),就只需要使用相反的觀察角來構造矩陣。創建公告板世界矩陣的方法是從Direct3D獲取當前的觀察矩陣并將此矩陣轉置。這個轉置矩陣會將所有的東西進行恰當的定位,以朝向觀察點。接著就只需應用網格的平移矩陣,在世界中正確地確定網格的位置。  閱讀全文

            posted @ 2007-07-03 22:37 lovedday 閱讀(2900) | 評論 (0)  編輯

            D3D中的字體繪制示例
                 摘要: 字體的繪制需要使用ID3DXFont對象和 D3DXCreateFontIndirect函數。

            DirectX SDK文檔對ID3DXFont做了簡要的說明:

            The ID3DXFont interface encapsulates the textures and resources needed to render a specific font on a specific device.

            The ID3DXFont interface is obtained by calling D3DXCreateFont or D3DXCreateFontIndirect.  閱讀全文

            posted @ 2007-07-03 19:33 lovedday 閱讀(3398) | 評論 (1)  編輯

            光照示例
                 摘要: 在設置可變頂點格式時加入法線和漫反色,如下所示:

            // The 3D vertex format and descriptor
            typedef struct
            {
            float x, y, z; // 3D coordinates
            float nx, ny, nz; // normals
            D3DCOLOR diffuse; // color
            } VERTEX;

            #define VERTEX_FVF (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE)  閱讀全文

            posted @ 2007-07-03 01:10 lovedday 閱讀(259) | 評論 (0)  編輯

            ALPHA混合示例
                 摘要: 設置可變頂點格式時增加一個D3DCOLOR類型的漫反射分量,其中的alpha值指定了alpha混合因子。

            // The 2D vertex format and descriptor
            typedef struct
            {
            float x, y, z; // 2D coordinates
            float rhw; // rhw
            D3DCOLOR diffuse; // diffuse color component
            } VERTEX;  閱讀全文

            posted @ 2007-07-02 22:56 lovedday 閱讀(436) | 評論 (0)  編輯

            D3D中用3D方法繪制2D圖象的例子
                 摘要: 思路與"一個用D3D繪制2D圖形的例子"相差不多,主要的區別在頂點的數據結構定義不一樣。

            2D的VERTEX結構定義為:

            // The 2D vertex format and descriptor
            typedef struct
            {
            float x, y, z; // 2D coordinates
            float rhw; // rhw
            float u, v; // texture coordinates
            } VERTEX;

            #define VERTEX_FVF (D3DFVF_XYZRHW | D3DFVF_TEX1)  閱讀全文

            posted @ 2007-07-02 19:50 lovedday 閱讀(2416) | 評論 (0)  編輯

            一個用D3D繪制2D圖形的例子
                 摘要: 思路如下:

            (1)函數Do_Init初始化D3D,D3D設備,頂點緩沖,紋理;主要調用這幾個函數:
            Direct3DCreate9,GetAdapterDisplayMode,CreateDevice,CreateVertexBuffer, Lock,Unlock,D3DXCreateTextureFromFile。

            (2)函數Do_Frame繪制一幀,主要調用這幾個函數:
            Clear,BeginScene,EndScene,SetStreamSource,SetFVF,SetTexture, DrawPrimitive。

            (3)函數Do_Shutdown釋放D3D資源。  閱讀全文

            posted @ 2007-07-01 23:06 lovedday 閱讀(4530) | 評論 (0)  編輯

            【ZT】D3D中的骨骼動畫
                 摘要: 相信這里沒有人沒玩過采用骨骼動畫技術的游戲,看看那些熱門的動作游戲,例如《波斯王子》、《分裂細胞》和《戰神》,你就知道骨骼動畫的威力了(我承認是猜的)。骨骼動畫技術用來使我們的3D模型在屏幕上動起來,通過和動作捕捉技術結合,可以讓模型做出非常逼真的動作。而這樣一個極具威力的技術,其原理卻相當簡單。

            假設我們要讓游戲主角做出一個動作,例如波斯王子拿彎刀往前一劈。最簡單的方法,就是讓模型師建一個動畫序列,然后在程序中逐幀播放,就像放電影一樣。不過這樣一來工作量就太大了,玩家也需要N個G的硬盤來安裝這個游戲。與此不同,骨骼動畫技術采用了一種很聰明的方式。首先,建模師完成一個標準姿勢的3D模型,通常是雙手沿著肩的方向伸展平放,雙腳打開。所有的后繼動作將由這個基礎動作演變得到。  閱讀全文

            posted @ 2007-05-24 00:03 lovedday 閱讀(5182) | 評論 (8)  編輯

            運行DxTex.exe碰到的問題

            posted @ 2007-05-15 15:49 lovedday 閱讀(1769) | 評論 (0)  編輯

            D3D中的材質和光照處理
                 摘要: 物體表面光澤是由于表面的反射光刺激人的眼睛視網膜而引起的一種視官感覺,這種色覺實際上是由光的波長決定的。每種波長的光在光譜中占據一定的位置,具有特定的色澤和亮度。

            對于任意波長為s的光,由于s可分解為s = aR + bG + cB,其中R,G,B為紅色光,綠色光和藍色光的波長,于是在RGB為基底的情況下,光波長由三元數(a, b, c)來決定。因此光的顏色值量化可以這樣來進行:首先用顏色值(1, 0, 0)表示紅色R,用顏色值(0, 1, 0)表示綠色G,用(0, 0, 1)表示藍色B,而任意波長的光的顏色值C則可用(r, g, b)表示,以表明顏色s = aR + bG + cB 是用RGB三色通過混色而得來的,其中r, g和b取區間的浮點數。  閱讀全文

            posted @ 2007-05-12 23:28 lovedday 閱讀(2962) | 評論 (0)  編輯

            【ZT】D3D中簡單的截圖方法

            posted @ 2007-05-11 21:36 lovedday 閱讀(2860) | 評論 (0)  編輯

            D3D中基本立體面的繪制
                 摘要: 在世界空間中,面向攝影機的三維物體的剖分三角形面為前面,是可視的;背向攝影機的三角形面稱為背面,是不可視的。對于可視的前面進行渲染顯示,對于不可視的背面則不進行渲染處理,這就是所謂的背面剔除。

            為了省去繁雜的前面和背面的計算判斷,DirectX將依據寫入頂點緩沖區的三角形面3個頂點的順(逆)時針方向來定義該面為前面或背面,以直接規定三角形面是否顯示。在DirectX的默認情形下,如果寫入頂點緩沖區的三角形面的3個頂點為順時針方向,那么這3個頂點構成的三角形面被認為是前面,必須進行渲染顯示。相反,如果3個頂點的順序為反時針,則為背面三角形,不需要渲染處理。  閱讀全文

            posted @ 2007-05-11 17:02 lovedday 閱讀(4620) | 評論 (0)  編輯

            D3D中基本三角形面的繪制
                 摘要: DirectX Graphics提供的編程接口包括Direct3D組件和D3DX擴展組件,利用DirectX Graphics可以一致地處理二維和三維的圖形渲染,而不再需要應用早期DirectX版本下的DirectDraw組件進行二維圖形的顯示處理。

            首先來看看三維物體的成像過程。三維物體可通過建模的微分方法,把彎曲的表面切分為一個個的三角形面,這樣三維物體表面的繪制,就轉化為物體表面中所有三角形面的繪制。要渲染由眾多三維物體組成的三維場景,需要先引入局部坐標系,為場景中的各個三維物體進行三角形頂點的坐標量化。  閱讀全文

            posted @ 2007-05-09 18:36 lovedday 閱讀(6798) | 評論 (0)  編輯

            游戲中時間的封裝
                 摘要: 時鐘類GE_TIMER可用來取得游戲已進行的時間,計算出兩個時間點之間的時間片大小,從而可在某一時間點處,自動更新某些游戲狀態。此外,還可用來獲取程序的幀頻FSP(Frame Per Second)大小,檢驗3D渲染的速度,即游戲速度。  閱讀全文

            posted @ 2007-05-07 21:33 lovedday 閱讀(916) | 評論 (0)  編輯

            主窗口和DirectInput的封裝
                 摘要: 注:GE是GameEngine的縮寫。

            GE_APP類解決應用程序的窗口創建問題,為了突出消息處理,這個類并沒有更抽象地將窗口程序地消息循環體代碼進行封裝。因此,這里的應用程序架構是創建窗口(包括注冊窗口類,創建窗口,顯示窗口,設置窗口回調函數的默認處理),然后繼續使用消息循環體,讀取鍵盤和鼠標的輸入等,進行一幀的渲染或其他處理。  閱讀全文

            posted @ 2007-05-07 01:42 lovedday 閱讀(1639) | 評論 (0)  編輯

            【ZT】DirectInput 鼠標編程入門
                 摘要: 前回同大家簡單介紹了如何用 DirectInput 來進行鍵盤編程,本回所要講述的就該是關于如何使用 DirectInput 來對另一個非常重要的輸入設備----鼠標的編程問題。

              鼠標的編程同鍵盤編程的過程是非常相似的,有了上次的基礎,你很快就能看出兩者在形式上其實完全是大同小異的。  閱讀全文

            posted @ 2007-05-06 19:34 lovedday 閱讀(693) | 評論 (0)  編輯

            【ZT】DirectInput里的鍵盤鼠標的應用
                 摘要: 設計一個PC游戲,鍵盤鼠標的輸入是絕不能少。Windows也提供了諸如 WM_LBUTTONDOWN、WM_RBUTTONUP等鼠標消息以及WM_KEYDOWN、WM_KEYUP等鍵盤輸入消息。但是 DirectInput中仍然提供了對鼠標鍵盤的支持,其原因就是DirectInput提供一個更直接更快捷的對輸入設備的訪問方法。就象我們在DOS 下直接接管鍵盤中斷,而不是去用什么討厭的INT16來處理鍵盤輸入一樣。  閱讀全文

            posted @ 2007-05-06 17:17 lovedday 閱讀(633) | 評論 (0)  編輯

            【ZT】DirectInput 鍵盤編程入門
                 摘要: 游戲編程可不僅僅是圖形程序的開發工作,實際上包含了許多方面,本文所要講述的就是關于如何使用 DirectInput 來對鍵盤編程的問題。

            在 DOS 時代,我們一般都習慣于接管鍵盤中斷來加入自己的處理代碼。但這一套生存方式在萬惡的 Windows 社會下是行不通的,我們只能靠領 API 或者 DirectInput 的救濟金過活。

            在 Windows 的 API 中,有一個 GetAsyncKeyState() 的函數可以返回一個指定鍵的當前狀態是按下還是松開。這個函數還能返回該指定鍵在上次調用 GetAsyncKeyState() 函數以后,是否被按下過。雖然這個函數聽上去很不錯,但現在領這種救濟金的程序員是越來越少了。原因無它,只因為 DirectInput 的救濟金比這豐厚,而且看上去似乎更專業?  閱讀全文

            posted @ 2007-05-06 16:30 lovedday 閱讀(452) | 評論 (0)  編輯

            DirectInput8初探 - 鍵盤篇
                 摘要: DirectInput是Directx的一個組件接口,提供了大量的接口函數處理用戶在鍵盤,鼠標,游戲桿以及力反饋等游戲裝置上的輸入,而且 DirectInput是直接與硬件驅動程序打交道,因此DirectInput可較快的處理用戶的輸入。另一方面,正是由于DirectInput直接與驅動程序進行通信,所以在控制面板上所作的任何鍵盤和鼠標的屬性設置(如鍵盤按鍵的延遲重復率和鼠標的左右手習慣等),都不會對應用 DirectInput的程序起作用,除非是修改由驅動程序提供的屬性設置。  閱讀全文

            posted @ 2007-05-05 01:33 lovedday 閱讀(5796) | 評論 (0)  編輯

            DirectX 9的坐標系統變換
                 摘要: 攝影坐標系的原點為世界坐標系中的觀察位置eye點,z軸與觀察方向(從eye點出發到at點的向量)一致。
            由于僅由一個坐標原點的位置和一個z坐標軸的方向不足以完全確定一個坐標系,因此,還需要指定一個up向量來定位攝影坐標系的y軸方向。這個在世界坐標系中給出的up向量是不必與觀察方向垂直的,只是指明攝影坐標系應該以向上的方向還是以向下的方向作為y軸。  閱讀全文

            posted @ 2007-05-04 02:09 lovedday 閱讀(3726) | 評論 (0)  編輯

            DirectX 9的一些數學計算函數:平面
                 摘要: 將三維物體表面剖分為一系列的三角形面,物體的光照亮度處理就轉化為對這些平面三角形的照明處理,從而可簡單地通過平面三角形的法向量與光的入射方向的夾角,來確定各種入射光對平面上每一點說貢獻的亮度值。

            對于三角形3個頂點p0,p1,p2構成的平面,選取一個垂直于該平面的法向量n。假設點p為平面上的任意一點,由于n . (p - p0) = 0,從而n . p - n . p0 = 0,由此展開向量的點積運算可知,平面程序具有如下的一般形式:ax+by+cz+d=0。如果要具體求出平面的方程,可取n=(p1-p0) x (p2 - p0)計算出來。  閱讀全文

            posted @ 2007-05-04 01:18 lovedday 閱讀(1915) | 評論 (1)  編輯

            【ZT】Direct3D幾何流水線
                 摘要: 大家都知道,一個3D 場景中,我們見到的任何光輝燦爛的物體,都是由一個一個面片組成的。而裝載面片位置信息的就是其各個定點的三維坐標。這是用來在模型中存儲的,而要把物體顯示在屏幕上,還需要將它們轉換成顯示器上的二維坐標。這就需要對每個點實施一套 3 to 2 的轉換公式,在Direct3D中叫做“幾何流水線”(Geometry Pipeline)。  閱讀全文

            posted @ 2007-05-03 23:20 lovedday 閱讀(1187) | 評論 (1)  編輯

            DirectX 9的一些數學計算函數:矩陣,坐標變換。
                 摘要: 向量的運算已超了傳統意義上的數的運算,因為向量并不是一般的數字。這意味著一切可用符號表示出來的事物,都可以對其進行各種關系運算,而不必關心事物的本身。這種符號運算的觀點,推動了近代數學對一般的集合元素進行的抽象代數方面的研究。

            在線性方程組的求解上,變元較少的方程組(如僅有兩個未知數x和y的方程組)的解很容易表達出來,但是推廣到較為復雜的更多變元的情形,如何推測方程組的解以及如何用確定的式子表達出來,引發了對行列式的提出和研究。行列式實質上是方陣數據的一種運算,由此自然地想到,可對一般行列數據定義代數運算,就像對向量定義運算一樣,這就是矩陣運算的產生歷史。  閱讀全文

            posted @ 2007-04-27 20:04 lovedday 閱讀(2361) | 評論 (0)  編輯

            DirectX 9的一些數學計算函數:向量篇
                 摘要: 首先來看看向量,向量的坐標表示對于DirectX游戲開發來說是必須的,在世界坐標系或投影坐標系下的三角形面的法線,光線的方向和觀察者的方向等都是通過向量的坐標形式來準確給出的。

            DirectX的頭文件D3DX9Math.h給出了兩個結構體來支持向量的計算:  閱讀全文

            posted @ 2007-04-27 18:53 lovedday 閱讀(1779) | 評論 (0)  編輯

            找不到d3dx9_25.dll
                 摘要: 今天在學習DirectX 9 SDK的時候,碰到了一個問題,提示我:

            This application has failed to start because d3dx9_25.dll was not found.

            上網查了下,找到了原因,英文就不翻譯了,再也找不到英文比我還爛的人了 ^_^  閱讀全文

            posted @ 2007-04-26 13:01 lovedday 閱讀(3845) | 評論 (2)  編輯

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            国产A级毛片久久久精品毛片| 久久精品无码午夜福利理论片| 麻豆av久久av盛宴av| 久久精品国产色蜜蜜麻豆| 国产精品久久久久久久久免费| 欧美熟妇另类久久久久久不卡| 国内精品久久久久影院薰衣草 | 欧美亚洲国产精品久久蜜芽| 久久亚洲欧美国产精品 | 蜜臀久久99精品久久久久久小说| 日本五月天婷久久网站| 久久久久久久精品成人热色戒| 影音先锋女人AV鲁色资源网久久| 中文无码久久精品| 国产精品一区二区久久精品| 久久99热狠狠色精品一区| 99热都是精品久久久久久| 久久久久亚洲AV无码专区桃色| 久久精品综合网| 伊人伊成久久人综合网777| 久久丝袜精品中文字幕| 狠狠色丁香久久婷婷综合_中 | 久久精品成人欧美大片| 思思久久99热免费精品6| 国产成人精品久久| 久久这里只有精品久久| 亚洲精品无码久久毛片| 久久不见久久见免费视频7| 久久综合狠狠色综合伊人| 亚洲国产成人久久精品99 | 久久996热精品xxxx| 大香伊人久久精品一区二区 | AV色综合久久天堂AV色综合在| 国产午夜精品久久久久九九电影 | 婷婷久久综合九色综合九七| 伊人久久大香线焦AV综合影院| 久久综合九色综合精品| 18禁黄久久久AAA片| 99久久人人爽亚洲精品美女| 亚洲精品美女久久777777| 日韩久久久久中文字幕人妻|