gamebryo的Badsushi例子学习

来源:互联网 发布:fanuc plc编程软件 编辑:程序博客网 时间:2024/05/17 16:53

估计是我看的顺序不对还是咋的。这个例子实在是包含太多了。搞得我研究了半天。但是发现太多以至于要是把全部弄清楚细节。那可以等到来年花开时。。。所以大概研究了一下他这个例子的框架和想要表达的主要东西。

例子根据用户指定来产生很多鱼。所有鱼按照异性的曲线游动。屏幕正中心有一个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......下回分解

 

原创粉丝点击