估計是我看的順序不對還是咋的。這個例子實在是包含太多了。搞得我研究了半天。但是發現太多以至於要是把全部弄清楚細節。那可以等到來年花開時。。。所以大概研究了一下他這個例子的框架和想要表達的主要東西。
例子根據用戶指定來產生很多魚。所有魚按照異性的曲線遊動。屏幕正中心有一個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......下回分解