2005-12-17

雜記

這幾天一直在做Optimization的動作, 目前效能大概是卡在matrix update的部分, bone越多整個效能越是卡在CPU. 暫時也找不出更有效率的方好, 所以最佳化的工作先到這邊.
另外也做了美術位移的處理. 接下來要測試motion blending的功能.
要花點時間做個簡單控制人物移動切換動作的測試程式 .

MS剛推出的12月號的DirectX SDK也下載安裝了. 這一版本竟然提供 DX 10 Technique Preview的範例和相關文件. 等有7000塊左右的DX10的卡在來研究好了...現在先想辦法能活用SM3.0吧.

看到Owen用R2VB的10000人demo. 突然也想試試看nvidia的卡如何使用Vertex texure 來做類似的效果...思考中.....

從大學時代就開始研究電腦圖學, 常常看到茶壺成為各種rendering技術的最佳展示model.
不過一直也是知其然, 而不知其所以然..偶然看到這個網站. 總算對茶壺在圖學界的歷史有更完整的了解了.

2005-12-08

Tiny 101

這是放了101隻tiny跑出來的結果. 為了測試到底現在hierarchy animation物件的效能到底如何, 於是想說和DirectX SDK的範例MultiAnimation 作對照. 為了能夠載入tiny模型. 在網路上找到.X file的importer(Xporter). 本來以為醜醜的tiny應該不會很多面數, 沒想到竟然有6800多面. 果然審美觀念不同. 為了提升效能, 程式也加入Mesh Optimization的機制. 這部分是利用D3DXMesh::Optimize()來完成.
目前是有比MultiAnimation快, 不過基本上這是不公平的比較, 因為MultiAnimation做比較多animation的處理, 不過在Graphcis這部分效能倒是OK

還在想要如何進一步作Optimize. 不曉得到底極限在哪裡呢...

2005-12-03

終於搞懂 smart pointer

最近開始使用boost 的smart pointer. 倒也不是第一次使用smart pointer. 但是經過這次的研究, 發現原來我之前用smart pointer沒用到精隨.... 現在一般的smart poiner都是實作reference counter的機制來管理pointer的生命週期. 以前也有用過reference counter的機制..但是並沒有和smart pointer的機制結合在一起. 變成當我想要作share的時候, 我才使用smart pointer...一般的時候..就是使用標準C/C++ pointer..然後自己管理這個pointer的生命( 自己呼叫delete ptr或是如果有reference counter機制, 就呼叫 ptr->Release()之類) 如下

class Obj: RefCounted{
};

Obj *pOldSchool = get_ptr_from_somewhere();
pOldSchool->AddRef();
....//do somthing
//delete the ptr
pOldSchool->Release();

------------------------------------------------------
以前大概對Reference counter的機制也不是很完整的理解吧. (老實說一開始我對這樣的架構不是很習慣...會覺得..為何new完物件之後, 卻要呼叫Release來刪除呢...腦筋一時轉不過來, 覺得new/delete是天生一對) 現在懂得使用smart pointer之後, 其實就可以這樣寫

smart_ptr< Obj > pNewSchool = get_ptr_from_somewhere();
...//do something
-------------------------------------------------------
smart pointer 會管理pointer的生命. 這樣就可以只要負責new就好, smart pointer會去管理刪除的問題了..所以其實物件不管會不會跟其他物件share, 用smart pointer都可以得到好處. 比如說class有要物件的pointer, 宣告成smart pointer, 這樣在destructor就不用去處理該pointer.不過smart pointer使用上要注意A reference B, 同時B reference A的問題. 想想若是沒有好好研究boost 的smart pointer, 可能一時也不會發覺會有這個問題. (因為目前公司的專案有用開發自己的smart pointer, 在使用過程並未想到有這個問題說..)
現在全面把程式改成使用 smart pointer. 把"delete xxx"的code想辦法拿掉..希望不會走火入魔...Orz

boost smart pointer不錯的入門說明