估计是我看的顺序不对还是咋的。这个例子实在是包含太多了。搞得我研究了半天。但是发现太多以至于要是把全部弄清楚细节。那可以等到来年花开时。。。所以大概研究了一下他这个例子的框架和想要表达的主要东西。
例子根据用户指定来产生很多鱼。所有鱼按照异性的曲线游动。屏幕正中心有一个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......下回分解
本文深入探讨游戏开发中动画、纹理效果等关键技术,包括屏幕到世界的射线拾取、动画管理、纹理贴图及Nifloodgate组件的作用。通过实例分析,展示如何在游戏场景中高效实现交互与视觉效果。

209

被折叠的 条评论
为什么被折叠?



