d3d

d3d

D3D,全稱為Direct3D,是微軟為提高3D遊戲在Windows中的顯示性能而開發的顯示程式接口,目前已經升級到12版本,它提供了豐富的3D功能庫,是遊戲廣泛採用的標準。

D3D的作用在於只需要調用D3D提供的接口函式和功能就能實現顯示功能,通過分工合作,極大的降低了軟體開發周期和成本。

基本介紹

  • 中文名:3D加速卡
  • 外文名:Direct3D 
  • 縮寫:d3d
  • 類屬:顯示程式接口
硬體簡介,相關參數,效果功能,GS的用途,

硬體簡介

3D加速卡就是硬體,也就是我們常說的顯示卡。
而作業系統和套用軟體通常不能直接去使用顯示卡和其中的3D加速功能,必須通過系統中的一個接口去調用,這就是OPENGL和D3D的作用了。
Direct3dDirect3d

相關參數

OPENGL和D3D對下可以通過顯示卡驅動程式操作顯示卡,對上可以為作業系統和各種應用程式提供各種顯示用的接口函式和顯示功能。
比如需要在顯示器上畫出一個三維的正方體,不需要程式人員針對不同的顯示卡去寫大段的代碼,只需要調用OPENGL或D3D的一個函式並把一些相關的參數發給他們,由他們去完成這個事情就可以了。
OPENGL和D3D本質雖然一樣,但卻是不同的兩個標準。
OpenGL是有著豐富經驗的一個性能卓越的三維圖形標準,它是在SGI等多家世界聞名的計算機公司的倡導下,以SGI的GL三維圖形庫為基礎制定的一個通用共享的開放式三維圖形標準。包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都採用了OpenGL做為三維圖形標準,許多軟體廠商也紛紛以OpenGL為基礎開發出自己的產品,其中比較著名的產品包括動畫製作軟體Soft Image和3D Studio MAX、仿真軟體Open Inventor、VR軟體World Tool Kit、CAM軟體ProEngineer、GIS軟ARC/INFO等等。
為DX10和Windows Vista提供的顯示硬體必須滿足DX10的所有硬體特性。這樣對於開發者就比較可以放心的使用各種硬體特性了,很類似Console平台的開發。

效果功能

1.狀態對象(State Object) "從100多個渲染狀態中解脫出來吧!"
D3D10對渲染狀態這個概念進行淡化,一方面使用全Shader化的架構使得狀態的前後設定和互相影響對渲染成功率降低到最少,另外對API架構也更為簡潔,另一方面對一些關鍵渲染狀態進行封裝和分類。主要分類有:
Input Layout Object 輸入層對象
這個東西很類似D3D9里的頂點聲明,也就是對用戶輸入數據進行整合和系統化
Rasterizer Object 光柵化對象
這部分主要控制光柵器的行為:填充模式(FILL_MODE),剔除模式(CULL_MODE),多採樣,DepthBias等等
DepthStencil Object 深度緩衝對象
主要控制深度緩衝的行為,像Z-buffer Enable之類的Blend Object 混合對象設定象素混合的方法,類似AlphaBlend SrcAlpha ,DestAlpha等等
Sampler Object 採樣器對象
設定紋理採樣狀態,包括過濾器和MipMap
2.新的資源訪問模式和資源視圖(View)概念 如果對比D3D9的Shader使用代碼和D3D10的類似代碼會發現一個不同。
D3D9 Shader需要對紋理進行操作時,需要將紋理設定到Shader就可以了,而D3D10里沒有那么簡單,設定前必須將各種資源整合後為資源創建一個視圖,再提交給Shader訪問。這種操作在環境貼圖里是很有好處的。對於CubeMap的6張紋理就可以採用一個視圖設定到設備,而自己要訪問每張貼圖只要輕鬆訪問視圖就可以了,也就是說把資源規整和集成化。
3.新的可程式圖形層(Stage)-幾何Shader(Geometry Shader)
原來的VS和PS只是對逐個頂點或象素進行處理,而新的GS可以對每個頂點或象素的臨近頂點設定Shader。也就是可以對批量幾何進行處理。
4.設備的創建要求對ViewPort進行設定
D3D9里無需對ViewPort進行設定就可以進行渲染,而且默認的RenderTarget就是後備緩衝,而在D3D10里,這個過程變得更為自主化。取出後備緩衝的格式,將RenderTarget設定為螢幕,這讓人感到D3D10設計更趨向於成熟的引擎設計。
5.流輸出層(Stream Output State)
這個層的功能是將VS和GS處理完成的數據輸出給用戶,由用戶進行處理後再反饋給管線繼續處理
6.多邊形拓撲結構從繪製代碼分離
現在可以單獨設定拓撲結構g_pd3dDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST )和使用Draw函式繪製了,很類似OpenGL。
7.嚴格的設備對象創建時間驗證
這裡的設備對象就是從設備創建出來的資源。為了減少CPU占用,D3D10重新設計了硬體資源調用調度,所有的設備對象都用面向對象的方法被設備管理。這種設計方法避免了在渲染期的資源創建操作。
8.去掉BeginScene和EndScene
這個對於圖形API確實多餘,Dec2005 sdk里提供的文檔讓人很快想到這只是一個過渡版本,在DXUT的Mesh.Create函式中可以看到一個很有趣的現象:
創建D3D9對象,使用D3DX9里的載入X模型檔案的函式載入X檔案,將D3D9的模型數據轉成D3D10的類型。這樣做無非是在告訴我們一個這樣的信息,D3D10很有可能提供一種新的模型格式來作為研究使用。Vista的圖形系統Avalon從一些視頻上分析,使用了大量的XML,所以新的模型格式很有可能使用XML,並且X格式的解析接口確實不方便。而XML的分析器可以由第三方提供。使得更多的研究人員能更方便的使用這種新格式。
順便提供一些縮寫對應的含義,這些在一些函式前綴會出現:
IA-Input Assembler State
SO-Stream Output State
OM-Output Merger State
VS-Vertex Shader
PS-Pixel Shader
GS-Geometry Shader

GS的用途

點精靈
動態粒子系統
皮毛系統
卷積陰影
單Pass渲染到球形貼圖
逐多邊形材質交換
逐多邊形材質設定

相關詞條

熱門詞條

聯絡我們