在【【HGE】繪圖底層】這個帖子里面有些地方需要更正。
為了不誤導別人,這里有必要補充一下:
HGE每次繪圖都需要鎖定一次緩沖區,只適合繪制大量相同的圖片,如果是各種不同的圖片,問題就出來了。如果繪制一百張圖片就需要鎖定和解鎖各一百次。了解D3DAPI編程的人明白這是個什么問題。所以現有的HGE繪圖算法是完全不適合大型游戲的。
有些人看到HGE自帶例子中繪制2000個sprite FPS達200-300以上就以為是正確的,不要忘記繪制的圖片都是同一張圖片。這個問題是網上一位朋友首先發現的。
這里給出解決方案:
首先刪除HGE原有的渲染函數,一個都不要留。
然后制作出一個添加數據的函數,函數調用之前,進行鎖定操作,但是只需要鎖定一次。
可以不斷調用這個函數把四邊形數據復制入頂點緩沖區里面。全部復制完畢解鎖。
也許你以為跟HGE原來的復制一次就鎖定一次是一樣的,那么就要仔細思考了。
這里只鎖定一次,以后的調用的是不需要鎖定的,但是需要在鎖定的狀態下復制數據。
全部復制完畢之后解鎖就行。因為對數據的更新就按照設定的時間來操作。
網絡游戲為了同步肯定需要設定一個同樣的數據更新時間。
那么在不需要更新的時間內,是不需要對數據進行復制的。
那么原來的一幀時間內鎖定一千次,一千張圖片需要繪制,現在我們在好幾幀的時間內才需要鎖定一次,而且是大批量地復制各種不同的圖元數據,這個數量的對比就可想而知了。
如果你不了解關於頂點緩沖區鎖定操作不當會帶來什么問題,可以在網上搜索,很容易得到結果。
而且我把頂點緩沖區的創建和鎖定方式全部修改了。以適合數據大批量地復制的要求。
在大部分渲染的時間內,顯卡GPU直接讀取緩沖區的所有數據進行批量地渲染,CPU只需要做很少的工作。使用高級着色和HLSL技術,也許CPU更空閑。
就是說渲染函數和邏輯函數分開處理。
客戶端的繪圖核心是繪圖算法架構。研究這方面的人很少,原因只有一個,大量程序員缺乏商業游戲實踐的開發經驗。
對游戲沒有深入地了解,哪怕你的編程技術世界上第一,在游戲開發的面前也只是白痴一個。
繪圖核心只有一個目的,在大量的場景中繪制大量的圖元和大量的特效的時候,游戲的流暢性完全不受到影響。
玩過盛大傳奇和傳奇世界的人都知道,在攻城的時候在皇宮里面那種走一步卡半天的感受就了解了。
不要認為二維游戲不值得研究,那么你永遠都不可能做成成功的三維游戲,因為實際繪圖核心是一致的。
不以為三維游戲就肯定不同了。哈哈~~
思路已經給出,大牛很容易修改出來。
當然修改成功之后,你可以不用HGE這個名稱了。因為其它方面其實都是D3D架構的常用設置。