gamebryo的Badsushi例子學習

估計是我看的順序不對還是咋的。這個例子實在是包含太多了。搞得我研究了半天。但是發現太多以至於要是把全部弄清楚細節。那可以等到來年花開時。。。所以大概研究了一下他這個例子的框架和想要表達的主要東西。

例子根據用戶指定來產生很多魚。所有魚按照異性的曲線遊動。屏幕正中心有一個NiMeshScreenElements用來pick這些魚。

被pick到的會播放一個動畫。(漲起來)比較好玩。

主要用到的幾個技術:

1.屏幕到世界的射線拾取。

2.動畫。沒看是頂點變換動畫。還是骨骼動作。以後專門在專門寫一篇吧。

3.紋理效果。環境貼圖。就是簡單的環境映射了。

4.那麼多的魚居然不是instance。GB還真牛。這一切都是NiFloodgate這個東西的效果。具體沒研究。一樣專門寫一篇吧。

 

這裏說一下這4點的相關GB類和接口調用流程吧。

1.Nipick

   m_pkPick = NiNew NiPick;
    m_pkPick->SetQueryType(NiPick::QUERY_FIRST);
    m_pkPick->SetIntersectType(NiPick::INTERSECT_BOUND);
    m_pkPick->SetFrontOnly(false);
    m_pkPick->SetReturnNormal(false);
    m_pkPick->SetObserveAppCullFlag(false)

可以看出有很豐富的屬性來pick.基本都是字面意思沒啥需要在解釋了。

通過

NiCamera::WindowPointToRay()可以換算出屏幕到的射線

NiPick::SetTarget 來設置pick檢查的範圍。爲這個節點開始找

NiPick::PickObjects 就是查詢剛纔設置的目標是否被點到了

可以通過設定自己的pick策略來自己實現拾取PickObjectPolicy

可以用Nipick::GetResults來得到所有拾取結果。感覺pick設置的還行差不多也夠用了.

1.動畫.這裏所講述動畫只包括這個例子所表達的。不代表整個GB.

GB的動畫保存在.kfm文件裏面。看見寫貌似是關鍵幀模型的意思。

他讀取動畫使用NiActorManager::Create

得到一個NiActorManager他就是動畫管理器。

NiActorManager::SetTargetAnimation用來設置當前使用啥動作。

3.紋理特效這個例子展示了環境貼圖

NiTextureEffect::SetTextureType 設置紋理使用啥技術

NiTextureEffect::SetTextureCoordGen 設置使用什麼紋理座標方式。(以後詳細研究)

4. 很牛的Nifloodgate......下回分解

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章