通过替换 SubMesh 和 SubEntity 实现人物装备系统(翻译自OGRE论坛)

来源:互联网 发布:海天考研网络课程 编辑:程序博客网 时间:2024/04/29 21:51

原文链接:http://www.ogre3d.org/forums/viewtopic.php?f=5&t=7928&p=56299&hilit=equip#p56299

本人翻译水平很臭,本文仅供参考,建议查看原文.

Nauk:

我目 前正在研究在我们游戏中的人物装备技术。关于装备纹理(布 皮革 锁链),是很容易通过更换目标SubEntity的不同材质来实现的.但是在像盾牌之类的装备上,我遇到了一些问题, 而且在wiki 和论坛找不到相关的线索.将装备附加到骨骼上似乎不是个好主意.
是否有可能加载多个 mesh在一个submesh里,如果可以,它要如何实现?我是否应该在一开始就加载所有的装备,并且在需 要的时候显示出来.或者有谁有更好的方法来更换游戏装备.
感谢你的建议.

Bren:

你已 经在正确的方向上了.
附加到骨头不是作用于衣服之类的装备的.它可以很好地用于装备(枪,剑等),或许有些饰 品(帽子,皮套等),但无法很好的工作于盔甲之类的装备.
这里有一个好方法是建立模型的时候,把所有能想 象到的几何体(皮革,金属,长袍)分开在不同的subEntities里面,这样就可以在需要的时候显示或者隐藏掉.很多游戏都是这样实现的.
你也可以分开建立以上这些 组件,然后在需要的时候拼接在一起.同样有很多游戏采取这种方法,可能比上面那种还 要多.
两种方法各有利弊。第一种方法要多付出一些开销在模型动画和多边形 数量方面 不知道OGRE是如何“智能”的屏蔽/优化隐藏的SubEntities的(但我估计相当聪明)。
第二种方式在动画管理方面要难一些(如多边形崩 溃,接缝等),但在以下方面增加了一些好处:能够很容易地分离组件(即斩首和肢解^_^),再加上可以更容易的实现可定制功能。
如果你想要更加快速,那就 采用第一种方法,如果 你想要拥有健壮性/可扩展性,那就用第二种方法
Nauk:
很好,不过现在我找不到任 何对它的引用,谁能给我看几行代码样本,或指点一下正确的方向,如你是如何交换SubMesh的?

Falagard:
你不 能“交换”SubMesh,但你可以通过使用以下方法来设置它们显示或隐藏:entity->getSubEntity(0)->setVisible(false); 
如果你的模型数目不多,可以使用以上方法,但如 果你有上百件装备, it’s a bad idea.对于少量的模型这还是个不错的方法.
如果你有很多的模型组件, 我认为你最好的创建一个基础的角色模型,它拥有完整的骨骼和动画等,然后让它共享骨骼给附加的装备模型.
例如,如果可以使用一个赤裸的角色来作为基础的 Mesh,那就使用它.假设你希望给你的角色穿上盔甲,你可以在你的程序里建立盔甲模型,并且绑定到你 的基础模型上,让它们使用相同的骨骼结构.所有的骨头都存在相同的姓名,位置和方向。
然后,在OGRE您可以使 用:entity->shareSkeletonInstanceWith(otherEntity); 
这意味着在模型动画的相同时间里,它们会拥有同 样的动作.我在 使用这个方法时遇到了一些问题,不过已经不记得了,因为都是一些很小的问题.
最后,一个完整的系统,你可能需 要下列组合:
1、附加一些模型到某块骨头
2.在不同模型之间共享骨骼
3.附加装备到和基础模型相同的节点里, 然后播放同样的动画.例如,假设你有一个长袍,长袍拥有一个特殊动 画,您不能使用#2,因为它们拥有不同的骨骼和动画
无论如何,祝好运.您也应该看看自己的OGRE的文件, 可以找到有关SubEntity->setVisible 问题的答案.
Nauk:
酷,这是我正在寻找的正确 思路, 谢谢指明.

原创粉丝点击