阅读一款3D引擎的方法备忘
生活随笔
收集整理的這篇文章主要介紹了
阅读一款3D引擎的方法备忘
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
要帶著引擎系統所共有的問題去閱讀,不要被具體引擎的實現思路牽著走,要思考這個引擎如何實現或繞過(如不考慮低端機)這些必然要面臨的問題.
首先,最重要的必須,在Debug模式下調試起來一個主場景程序,然后沿著代碼流走幾遍,在代碼里閑逛,生成第一印象,留意基礎工具設施類(如字符串內存管理),大約3小時.
然后帶著如下每一個問題(不分先后)去走流程,走邏輯,弄清引擎的業務處理方法.
1.SetStreamSource,SetIndices,DrawIndexedPrimitive的調用是在哪里(哪個cpp哪個類的哪個函數),整個工程有幾個DrawIndexedPrimitve,DrawPrimitveUp,DrawXXX,被統一管理了嗎,還是零零散散地分布在各個cpp各個類?
2.紋理資源是如何管理的?句柄,ID,指針? 按使用時間,按使用計數? 模型頂點資源是如何管理的,是否有Buffer分配上的優化(比如頂點緩沖整合)? 渲染的實例數據如何管理,如何與資源概念區分的? 純3D資源如Shader/RenderTarget是如何管理的?
3.場景管理是怎樣搭建的,如何包含區分節點實例數據和資源數據?鏡頭是如何被各模塊訪問的?剔除不可見物件的代碼行在哪里?兼容各種算法嗎,使用了具體的算法是什么?不論使用何種算法,場景管理模塊是否提供了清晰的需求定義接口?
4.骨骼動畫是在哪里計算的,具體到頂點乘以矩陣是在哪個cpp的哪個代碼行里?Socket實現在哪里?如果有高級動畫系統,骨架在哪里,有什么功能?動作融合的矩陣間過渡代碼在哪一行?
5.異步數據加載是怎樣做的,在哪個cpp里,由哪個模塊管理?各個資源的加載讀取cpp代碼行在哪里?
6.渲染管線如何為ShadowMap提供深度圖,如何為CubeMap,水面反射提供場景RenderTarget?如何管理固定流水線狀態RasterState的?
7.材質管理系統是如何運作的(通常都是technique + multipass),如何并入管線的,如何從理論上保證可以實現各式各樣的效果的?如何抽象兼容固定和可編程流水線的? 如果是抽象管理的,如何抽象掉不同的technique下的不同的數據?管線里是否有獨立的后期效果,還是用材質表達出來?材質是否可以腳本化?材質是要分組的,排序的代碼段在哪個cpp的哪里?
8.特效如粒子系統到最后是使用哪個DrawXXX畫出來的? 粒子系統是動態公式計算(不要理會具體公式)還是幀動畫?
9.界面2D Texture Draw是如何被支持的?文字渲染是如何被支持的,特別是如何支持中文的,字體資源如何被管理?是否使用Freetype,是否支持東亞文字?
10.物理系統的接口是如何定義引擎的需求的?或者就是亂糟糟地直接用上.
首先,最重要的必須,在Debug模式下調試起來一個主場景程序,然后沿著代碼流走幾遍,在代碼里閑逛,生成第一印象,留意基礎工具設施類(如字符串內存管理),大約3小時.
然后帶著如下每一個問題(不分先后)去走流程,走邏輯,弄清引擎的業務處理方法.
1.SetStreamSource,SetIndices,DrawIndexedPrimitive的調用是在哪里(哪個cpp哪個類的哪個函數),整個工程有幾個DrawIndexedPrimitve,DrawPrimitveUp,DrawXXX,被統一管理了嗎,還是零零散散地分布在各個cpp各個類?
2.紋理資源是如何管理的?句柄,ID,指針? 按使用時間,按使用計數? 模型頂點資源是如何管理的,是否有Buffer分配上的優化(比如頂點緩沖整合)? 渲染的實例數據如何管理,如何與資源概念區分的? 純3D資源如Shader/RenderTarget是如何管理的?
3.場景管理是怎樣搭建的,如何包含區分節點實例數據和資源數據?鏡頭是如何被各模塊訪問的?剔除不可見物件的代碼行在哪里?兼容各種算法嗎,使用了具體的算法是什么?不論使用何種算法,場景管理模塊是否提供了清晰的需求定義接口?
4.骨骼動畫是在哪里計算的,具體到頂點乘以矩陣是在哪個cpp的哪個代碼行里?Socket實現在哪里?如果有高級動畫系統,骨架在哪里,有什么功能?動作融合的矩陣間過渡代碼在哪一行?
5.異步數據加載是怎樣做的,在哪個cpp里,由哪個模塊管理?各個資源的加載讀取cpp代碼行在哪里?
6.渲染管線如何為ShadowMap提供深度圖,如何為CubeMap,水面反射提供場景RenderTarget?如何管理固定流水線狀態RasterState的?
7.材質管理系統是如何運作的(通常都是technique + multipass),如何并入管線的,如何從理論上保證可以實現各式各樣的效果的?如何抽象兼容固定和可編程流水線的? 如果是抽象管理的,如何抽象掉不同的technique下的不同的數據?管線里是否有獨立的后期效果,還是用材質表達出來?材質是否可以腳本化?材質是要分組的,排序的代碼段在哪個cpp的哪里?
8.特效如粒子系統到最后是使用哪個DrawXXX畫出來的? 粒子系統是動態公式計算(不要理會具體公式)還是幀動畫?
9.界面2D Texture Draw是如何被支持的?文字渲染是如何被支持的,特別是如何支持中文的,字體資源如何被管理?是否使用Freetype,是否支持東亞文字?
10.物理系統的接口是如何定義引擎的需求的?或者就是亂糟糟地直接用上.
總結
以上是生活随笔為你收集整理的阅读一款3D引擎的方法备忘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个好的MIS系统应该考虑哪些内容
- 下一篇: 当adobe flash player不