來源:http://bbs.bccn.net/thread-224560-1-1.html
在D3D沒有出現我滿意的版本之前我將一直學習和使用OpenGL。
哎...D3D實在太令我失望了...
我將列出D3D與OGL的對比,並且發一個OpenGl的教程給大家。
OpenGL主站:www.opengl.org
函數說明:http://www.opengl.org/sdk/docs/man/
先發一個:
OpenGL教程.rar
指出Direct3D9存在的一些問題:(以下DirectX等都是指最常見的第DX9版本)
1.無法移植,只能在微軟的作業系統上運行。要知道,在國外使用Linux系統的人是很多的,如果你用D3D做遊戲,那他們將無法運行。
大家不妨試著在baidu,google,yahoo等搜尋引擎下搜尋“Direct3D”和“D3D”,你將會發現比較有價值的資訊很少。
2.版本眾多。現在的DirectX組建是10版本的,可想而知其有多少個版本?光D3D常用的就有7,8,9三個版本。不同的版本之間的有些函數是不一樣的,這導致了從舊版本更新到新版本的一系列問題。而且版本多也對網路資源共用不利。
3.使用煩瑣。DX的所有成員都是以COM的形式存在的,這說明了其所有關鍵操作都是通過指標及成員函數來調用的。就不說其他的,滿滿一螢幕的指標就看得我眼花繚亂,談何遊戲開發??有時間的朋友不妨試試,Direct3D的初始化工作就夠你受的了。
4.裝置容易丟失。自從我學DirectX以來,我就發現不論是D3D也好,DDraw、DInput也罷,只要你對系統有一些劇烈的操作之後,它的裝置就丟失了。所以我總覺得DX是一個“漏口袋”,稍微抖抖就漏了,漏了就又要重新初始化裝置、重新讀取資源。
5.畫質不佳。我曾經拿D3D和OpenGL繪的圖象做了個對比,就是用同樣的參數繪製同樣的圖象。我發現D3D的顏色明顯不精確。這對於做遊戲來說或許影響不大,但是做專業繪圖工程就不行了。難怪D3D始終無法戰勝OpenGL,我想這或許就是原因之一吧。
5.功能雞肋。Direct3D的功能比OpenGL的多,這個我承認。但我發現D3D的這些OpenGL所沒有的功能都是一些“幾百年難得一用”的功能,而且當前多數顯卡都不支援這些功能,就算是那些D3D的遊戲開發這也很少用。
至於那些ID3DX***組建,我只想說,功能多,但不好用。要知道OpenGL提供了許多底層的操作函數,而D3D則沒有。
7.HWND和HDC的問題。Direct3D的初始化是一定要一個視窗的控制代碼(HWND)的,而OpenGL的初始化只需要一個裝置描述符(HDC)就可以了。瞭解介面編程和圖象編程的朋友應該都清楚這意味著什麼吧——你可以通過一個HWND獲得其HDC,而不能用一個HDC來得到其HWND。這說明OpenGL可以很方便地在任何有HDC的東西上繪圖(我見過許多人用MFC單文檔來做OpenGL),而用Direct3D做這個將變得複雜(我是測試了好久才知道怎樣用MFC做D3D的……在網路上根本沒有關於這方面的資料……)。
8.座標問題。D3D支援空間左手座標系和右手座標系,而OpenGL只有右手座標系。這看起來不是D3D比OGL更好嘛?其實不然,多了一種座標系的選擇,等於給新手多設了一個門檻,很多人就是因為這個而分不請東南西北上下左右的,曾經聽說過某遊戲公司裡的程式員們由於沒有商量清楚,一些是用左手座標系,一些是用右手座標系,搞得最後手指比得都抽筋了(數學上習慣用左手和右手來比座標系的xyz的方向)還沒有分清到底哪個座標系,大家都稀裡糊塗地。
上面這些不是暫且忍了,但是……以下這些問題是讓我決定放棄D3D的最主要原因:
9.取圖不精。在3D繪圖裡,都要把一張圖片上的某部分貼到一個片面上。但是問題來了,在D3D裡的圖片(紋理)座標是用float來計的,浮點都是有精度的,當精度不夠用時就會出現誤差。所以在貼圖過程中產生了誤差而使得最終顯示的圖片產生位移(雖然u、v座標只位移了1個像素)。這是很嚴重的問題,或許在繪製3D模型時這點小誤差不影響大局,但是我現在是用D3D來繪製2D圖象啊,哪怕是一點點誤差都不能容忍的!
10.半透明問題。在Direct3D中規定,繪製一系列透明和半透明物體時,要先畫不透明的,再畫透明的(OpenGL中有這個規定嗎?),好,那麼如果所有的物體都是透明的那該怎麼辦呢?先畫什麼呢?D3D又有個規定:先畫離攝象機近的,再畫離攝象機遠的(OpenGL中有這個規定嗎?)。原來D3D有這個規定啊,難怪玩了許多遊戲都發現有些地方的半透明處理得亂七八糟的,印象最深的是玩仙劍4時,在一個有黃色半透明光帶的地圖(這個光帶環繞了整個地圖,記不得那地圖叫什麼名字了),如果你有心的話,不難發現,透過某個光帶看另一個光帶,你將看到那個越遠的反而在近的那個光帶的上面,即越遠的看起來反而更近,近的反而跑到更遠去了!很嚴重的問題!!
這些問題看起來是小問題,但小問題往往決定了你的遊戲的品質。在微軟沒有解決這一系列問題之前,不用Direct3D。以前一直不解為什麼那些高手們總是用OpenGL,現在是瞭解了……還算不晚吧