irrlicht引擎:实现天龙八部的RPG换装

又是夜深人静时



看了看时间,已经3点过了,突然想写点什么,却又不知从何说起。

那就从今天这个用irrlicht做天龙八部的模型换装说起吧。

 

也不知道是为什么,最近又捣鼓起了OGRE和irrlicht. 并且,总想用irrlicht实现一些OGRE中的东西。

当然,这不是商业项目,也没有商业目的,纯属蛋疼而已。

 

一切行动的由来,都来自于vczh那天晚上的举动。

记得有一天晚上在群里聊天,大伙就称赞各位菊苣是多么的厉害。

最后vc发了一个自己的桌面截图说:让你们看看菊苣是如何练成的(这不是原话,和话的字眼有出入,在此不想负任何责任,如果真有想看的,去翻群的聊天记录)

那天晚上,我想了很久。想想自己自从转做页游以后,是如何虚渡光阴的。

终于忍不住了,翻开了自己的移动硬盘,看看自己曾经做过的小东西。90%是建好工程就没理了。

这才明白,我花在思考上的时间远远大于了行动。 于是,我决定改变自己,找回那个真的我。

 

3D游戏是我的真爱, 真爱到就算画面差一点,只要是3D,我也会很喜欢。

于是,我觉得自己还是应该接着先前的路走下去。 什么服务器,什么 AS3. 都是浮云, 不喜欢就是不喜欢。

私下又开始研究irrlicht了。

猛地一发现,自己是多么的搞笑, 从09年到11年,一直在做引擎开发, 也翻过irrlicht和ogre无数遍。 却从来就没有写完过一个完整的DEMO。

连功能测试用例都没有写过。突然觉得之前的一些设计似乎有些脱离了实际。没有真正使用过,又怎知如何是好,如何是坏呢?

 

这一次是真的玩irrlicht了, 中间也纠结过是不是OGRE更适合。 但在目前这个时间有限的空间下,我更愿意玩irrlicht.小巧,轻便。 当然,意味着更多东西要自己实现。 不过对于一个代码控来说,也反而更自得其乐。 正好可以在短路的时候,去参考一下其它引擎,用来扩充irrlicht.

我要做的不是把irrlicht整得牛B,而是想自己弄弄,加上移动平台的崛起,我觉得irrlicht更加适合吧。 据说gameloft也有使用(仅是据说)。

 

可能很多兄弟会说我这讲的东西,其实就是一坨屎了。 不过,我觉得再坏的评论,也表示一种关注。 批评好过于无视啊~~~~

 

我是多么多么的纠结



纠结1:换装需要场景节点配合

  在irrlicht中,并没有提供普通引擎中的submesh或者bodypart这种东西,用于直接支持换装。 在irrlicht中,如果想要换装,最直接的方法就是依赖于场景结点

比如,在我的示例中,可以更换头发,帽子,衣服,护腕,靴子,面容。 那就需要7个场景节点,1个作为根节点,用于控制整个角色的世界坐标,平移,缩放,旋转等属性。另外6个场景节点则分别绑有各个部件的模型

贴一下我的角色类的代码,行数不多

class CCharactor
{
    IrrlichtDevice* m_pDevice;
    IAnimatedMeshSceneNode* m_pBodyParts[eCBPT_Num];
    ISceneNode* m_pRoot;
public:
    CCharactor(IrrlichtDevice* pDevice)
        :m_pDevice(pDevice)
    {
        memset(m_pBodyParts,0,sizeof(m_pBodyParts));
        m_pRoot = pDevice->getSceneManager()->addEmptySceneNode(NULL,12345);
    }
    void changeBodyPart(ECharactorBodyPartType ePartType,stringw& meshPath,stringw& metrialPath)
    {
        ISceneManager* smgr = m_pDevice->getSceneManager(); 

        IAnimatedMeshSceneNode* pBpNode = m_pBodyParts[ePartType];
        IAnimatedMesh* pMesh = smgr->getMesh(meshPath.c_str());
        if(pMesh==NULL)
            return; 

        if(pBpNode==NULL)
        {
            pBpNode = smgr->addAnimatedMeshSceneNode(pMesh,m_pRoot);
            m_pBodyParts[ePartType] = pBpNode;
        }
        else
        {
            pBpNode->setMesh(pMesh);
        }
        ITexture* pTexture = m_pDevice->getVideoDriver()->getTexture(metrialPath.c_str());
        if(pTexture)
            pBpNode->setMaterialTexture(0,pTexture);
    }
};

//然后,我用了一个结构体来构建部件信息

struct SBodyPartInfo
{
    stringw Desc;
    ECharactorBodyPartType Type;
    stringw MeshPath;
    stringw MeterialPath;
};

 

 

纠结2:共享骨骼

首先,irrlicht 1.8中对OGRE模型的格式支持在代码中,最高只看到了1.40版本的解析,更高的就会被无视。 天龙八部的模型有几个是1.30的,而用于换装和主角的,都是1.40的。 可能是解析不全的原因,导致1.40的骨骼动画无法正常播放。 这个问题整了几个小时,没有解决,明天继续

其次,多个模型共享骨骼只能通过场景节点的useAnimationFrom来完成,并且传入的是一个Mesh参数。这点让人蛋疼, 天龙八部的角色动作是分开了的,不同的攻击动作是一个skeleton文件。 想要实现共享,有点麻烦。

 

纠结3:模型文件格式

irrlicht不像OGRE那样有一个强大且成熟的模型文件格式,虽然提供了.irr格式,但仅是用于irrEdit的场景信息输出。先看一张图

这张图是irrlicht samples中的MeshViewer的提示框内容。 上面列出了可以支持的模型文件类型。 大家可以看看,又有多少模型格式是可以直接拿来放到项目上用的呢? mdl和ms3d可以考虑,dae的话,我在开源游戏0 A.D. 中见到使用过。 其它的话,就完全不熟悉了。 OGRE的 .mesh支持也不完全。 难道真要自己整一个。

我能想到的,就是选一个插件完整和模型和动画格式都比较好的作为与美术工具交互的格式。 自己再写一个工具,转换成自己的格式。

 

纠结4:硬件蒙皮

我以为像NIKO那样的技术狂,怎么会放掉这一个特性。 很高兴地在场景节点上发现了硬件蒙皮的函数接口。但一看注释,把我咽着了。

//! (This feature is not implemented in irrlicht yet) 
virtual bool setHardwareSkinning(bool on);

 

成果展示



其它地方,还没有去整,就先不发表言论了。 继续着这个很傻B,很天真的捣鼓之路。

上个图,纪念一下我的irrlicht产物。

 

布衣

 

换了身盔甲

 

换了帽子和靴子

 

PS:头发没有纹理,所以是白的。

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/archive/2013/03/24/2978006.html

时间: 2024-09-20 08:11:45

irrlicht引擎:实现天龙八部的RPG换装的相关文章

irrlicht引擎:硬件蒙皮骨骼动画

这个东西很顺利,仅用了半小时就找到了方法,最应该感谢的还是Super TuxKart(简称STK,下面就都用这三字母了). 如果不明白STK,同时又对它感兴趣的童鞋,可以访问这里 http://supertuxkart.sourceforge.net/ 由于墙的原因,需要各位搭梯子.   上周末,在弄换装的时候,发现irrlicht引擎本身是不支持硬件蒙皮的,多少令人有些失望. 心里就一直寻思着怎么扩展一下,将它弄出来. 值得说明的是STK对irrlicht引擎的用法是很简单的,基本上可以说是裸

WPF案例(三) 模拟QQ“快速换装"界面

这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image平滑的向左或者向右 滑动,页面如下,有兴趣的朋友可以下载源码:http://files.cnblogs.com/5460600/Switch.rar 在构建这个示例的3D场景时,使用了ModelVisual3D和Model3DGroup元素,ModelVisual3D是一个3D容器类,用来包含 3D元素,在这里 使用Model3DGroup打包了3个GeometryMo

PS照片处理教程(二):证件照换装

自上周推出"PS照片处理教程-证件照换底"教程后收到很多网友的信息,主要问题集中在换白色背景及换装上,对此本周以"证件照换装"教程来解答,有需要的朋友可以看看! 原图.效果对比 另类效果图一 另类效果图二 原图一 分类: PS图片处理

WPF案例 (三) 模拟QQ“快速换装"界面

原文:WPF案例 (三) 模拟QQ"快速换装"界面    这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image平滑的向左或者向右滑动,页面如下,有兴趣的朋友可以下载源码         在构建这个示例的3D场景时,使用了ModelVisual3D和Model3DGroup元素,ModelVisual3D是一个3D容器类,用来包含3D元素,在这里使用Model3DGroup打包了3个GeometryModel3D

NetApp大换装:FAS和ONTAP双双升级

NetApp已经全面更新了自己全闪存的FAS阵列和混合型HFAS阵列,提高了性能.容量和可扩展性,并支持32Gbit/s光纤通道和40GbitE连接性.此外NetApp还升级了ONTAP,让ONTAP Cloud支持Azure. 本月初,NetApp刚刚发布了E系列的入门级全闪存和混合闪存/磁盘型E2800阵列,针对中型企业和远程办公点,还增加了付费即用的容量增加机制.NetApp称,E2800提供了最佳的性能(高达300000 IOPS),以及对全闪存阵列来说最低的采购价格. 这次发布了6款新

app-小偶这样的应用是怎么做的?加载3D模型和换装

问题描述 小偶这样的应用是怎么做的?加载3D模型和换装 小偶这样的应用是怎么做的? 加载3D模型和换装,播放动画 有好的工具吗 解决方案 用Unity,专门跨平台做这个的

[Unity3D]人物模型的换装

写一写今天的学习心得,保持每天不断的学习,今天写的是人物的换装的技术实现. 人物的换装是游戏开发的一个基本的技术,初来公司,老板就要我学习一下人物换装,也当是给我练练手吧,然后我接到一个需求之后,就要开始学习和搜集资料来实现这一功能,一下是学习心得,接下来我们就一起来学习一下,仅仅供新手参考. 首先 我们将从美工那儿获取到的人物模型资源加载到本地,然后通过写代码挂载到人物模型上面.以下是挂在在模型上面的js代码,也就是换装的脚本: var ME1 : Mesh; //网格 var MA1 : M

阿里巴巴上市前夜:纽交所全面换装(组图)

摘要: 阿里巴巴上市前夜:纽交所全面换装 阿里巴巴上市前夜:纽交所全面换装 阿里巴巴上市前夜:纽交所全面换装 阿里巴巴上市前夜:纽交所全面换装 北京时间9月19日早间消息,阿里巴巴 阿里巴巴上市前夜:纽交所全面换装 阿里巴巴上市前夜:纽交所全面换装 阿里巴巴上市前夜:纽交所全面换装 阿里巴巴上市前夜:纽交所全面换装 北京时间9月19日早间消息,阿里巴巴( 滚动资讯 )将于美国东部时间明早(北京时间今日晚间)在 纽约证券交易所 挂牌上市.上市前夜,纽交所已开始大规模的换装阿里巴巴橙色系的标识,用以

Win7“换装”催生安全隐患

专业人士指出,刷主板BIOS虽然相对可靠但风险很高,稍有不慎就可能导致系统不稳定甚至主板报废等风险.特别是对于企业用户而言,一旦使用了破解水平较低的Win7,数据将无法及时更新,后期产生的维护费用也将远远超出购买正版软件. ■本报记者 谢光飞 虽然微软Win7操作系统已全面推向市场,但国内的普通用户特别是中小企业至今仍旧青睐XP甚至陈旧的Win2000操作系统.不过在微软的步步紧逼下,这种为了省钱而不"换装"的保守行为开始演变成巨大的安全隐患. 破解版Win7"暗度陈仓&qu