摘要: 添加像素霧化效果也需要對Direct3D渲染設備進行三方面的設置:啟用霧化效果、設置霧化混合因子計算公式、設置霧化參數。添加像素霧化效果和添加頂點霧化效果基本相同,唯一的區別是霧化混合因子計算公式的設置。像素霧化混合因子計算公式也是采用函數IDirect3DDevice9:: SetRenderState()設置,不同的是第一個參數需要設置為D3DRS_FOGTABLEMODE。
閱讀全文
摘要: 霧化效果是計算機圖形學中應用最廣的效果之一,它不僅能顯著地增加視覺效果的真實感,并可以提供一定的深度感。在實時圖形程序,特別是游戲設計程序中,為了確保圖形系統的運行速度,圖形開發人員往往在位于觀察點遠處的場景使用較為簡單的三維模型,甚至不繪制物體,而在近處使用復雜模型,這樣就可能造成物體變形、突然出現或突然消失等失真現象,霧化效果可以有效地避免這種失真現象。
在Direct3D圖形系統中,霧化是通過將景物顏色與霧的顏色,以隨物體到觀察點距離增加而衰減的混合因子混合而實現的。距離觀察點越近,混合因子越大,場景內的物體顏色越大,霧的顏色越小,景物就越清晰;隨著觀察點拉遠,混合因子逐漸變小,場景中物體的顏色變小,而物的顏色變大,景物越來越模糊。Direct3D計算霧化的方法如下:
color = f * colorscene + (1-f) * colorfog
其中,color表示最終經過霧化處理的顏色,colorscene表示物體原來的顏色,colorfog表示應用程序中定義的霧的顏色,f表示霧化混合因子。
閱讀全文
摘要: 在繪制復雜的三維場景時,不可避免地會出現物體間的相互遮擋,在這種情況下,為了正確地繪制場景需要使用深度測試。半透明物體的繪制不同于不透明物體, Direct3D通過alpha混合實現半透明物體的繪制。深度測試可以簡化復雜場景的繪制,alpha混合可以使繪制的三維場景更完整、更逼真。
在復雜的場景中,通常有多個物體需要繪制,這些物體之間通常會存在遮擋關系,離觀察點較遠的物體會因為近處物體的者的遮擋而不可見或只有部分可見,Direct3D圖形系統提供了深度測試功能來實現這種效果。
閱讀全文
摘要: 透過那些透明度非常高的物體看其他物體,例如透過幾乎完全透明的玻璃看其他物體,會感到玻璃好像不存在,在三維圖形程序中渲染時就可以不渲染這些透明度非常高的物體,從而可以提高渲染速度,這可以通過alpha測試來實現。
alpha測試根據當前像素是否滿足alpha測試條件(即是否達到一定的透明度)來控制是否繪制該像素,圖形程序應用alpha測試可以有效地屏蔽某些像素顏色。與alpha混合相比,alpha測試不將當前像素的顏色與顏色緩沖區中像素的顏色混合,像素要么完全不透明,要么完全透明。由于無需進行顏色緩沖區的讀操作和顏色混合,因此alpha測試在速度上要優于alpha混合。
閱讀全文
摘要: 當對物體表面使用了紋理之后,像素的alpha值就是紋理alpha混合之后的值,所以這又取決于紋理的 alpha混合方法,紋理alpha混合方法決定了紋理alpha混合之后的alpha值是取自材質,還是取自紋理,或者取自二者的某種運算。像素 alpha值的具體計算過程是這樣的,首先得到頂點alpha值,頂點alpha值可能是直接指定的,也可能是光照計算得到,然后根據著色模式對頂點 alpha值進行插值,得到的結果再根據紋理alpha混合方法和紋理采樣得到的alpha值進行指定的運算,得到最終每個像素的alpha值。
閱讀全文
摘要: alpha源混合系數通常設置為D3DBLEND_SRCALPHA,即當前繪制像素的alpha值。目標混合系數設置為D3DBLEND_INVSRCALPHA,即1減去當前繪制像素的alpha值。那么當前繪制像素的alpha值又是如何得到的呢?如果沒有使用材質和紋理,當前繪制像素的alpha值來自每個頂點顏色設置的alpha值;如果使用光照和材質,則當前像素的alpha值來自物體表面材質;如果為物體表面使用了紋理,則alpha值還與紋理有關。
閱讀全文
摘要: 在前面介紹的示例程序中,繪制圖形的顏色總是替換當前顏色緩沖區中存在的顏色,這樣后面的物體總是覆蓋在原有的物體上。但是當想要繪制類似于玻璃、水等具有透明效果的物體時,這種方法顯然滿足不了要求。通過定義一個表示物體半透明度的alpha值和一個半透明計算公式,可以將要繪制的物體顏色與顏色緩沖區中存在的顏色相混合,從而繪制出具有半透明效果的物體。Direct3D計算alpha顏色混合的方法如下:
color = (RGBsrc * Ksrc) OP (RGBdst * Kdst)
閱讀全文
摘要: 在繪制復雜的三維場景時,不可避免地會出現物體間的相互遮擋,在這種情況下,為了正確地繪制場景需要使用深度測試。半透明物體的繪制不同于不透明物體, Direct3D通過alpha混合實現半透明物體的繪制。深度測試可以簡化復雜場景的繪制,alpha混合可以使繪制的三維場景更完整、更逼真。
在復雜的場景中,通常有多個物體需要繪制,這些物體之間通常會存在遮擋關系,離觀察點較遠的物體會因為近處物體的者的遮擋而不可見或只有部分可見,Direct3D圖形系統提供了深度測試功能來實現這種效果。
閱讀全文
摘要: 利用.x文件模型渲染三維模型,首先需要將.x文件中的各種數據分別加載到內存中,主要包括頂點數據、材質數據和紋理數據等。
Direct3D擴展實用庫定義了多邊形網格模型接口ID3DXMesh來表示一個復雜的三維物體模型,它是一個COM接口,繼承自ID3DXBaseMesh。
Direct3D擴展實用庫函數D3DXCreateMesh()可用于創建一個Direct3D網格模型對象。
閱讀全文
摘要: 早在1843年,William Roman Hamilton爵士就已經發明了作為復數擴展的四元數(quaternion),但是直到1985年才有一個叫Ken ShoeMake的人在SIGGRAPH(Special Interest Group on Computer Graphics,美國計算機協會的圖形專業組)把四元數引入計算機圖形處理領域。
四元數將三維空間中旋轉的概念擴展到四維空間,這對于表示和處理3D中點的旋轉很有用。四元數還可以用于以下地方:
(1)骨骼動畫(skeletal animation)
(2)反向動力學動畫(inverse cinimatic)
(3)3D物理學
閱讀全文