换装基本上是每个网游都必须有的一个功能,每种网游的做法都各有不同,有些是换掉整个模型,有些则是通过可以换掉模型的一个部分完成。前者属于整体换,相对简单些;后者则是通过部分替换实现,目前用的比较多,本文主要描述后者的。

在开始描述换装前,首先要具备骨骼动画的知识,如果对骨骼动画的原理不熟悉,换装是比较难以理解的。换装的核心其实并不在换上,而是要理解为什么能换,而这些都和骨骼动画密不可分。骨骼动画是通过关键帧驱动骨骼运动,随之依次调整每块骨头的朝向和坐标,骨头再带动顶点运动(为了高效,现在很多都使用GPU加速,这样就不需要修改顶点缓冲区了),蒙皮信息就描述了了每个顶点受哪些骨头的影响,以及他们的权重,这样骨骼动画就运动起来了。其他的原理先略过,google上解释比我的好,^_^。

目前一般网游的换装都是采用替换掉模型某个部分来实现的,脸型、头发、衣服、手套、裤子、裙子、鞋子等一般都和人物肉身做在一起,可以在需要时显示或隐藏对应部分。这里一般有一个原则,如果对应部分需要支持形变,则必须和肉身做到一起,因为必需要有蒙皮信息才能实现形变。

在我这个设计中,人物分成六个部分,分别是头发,头,上身,手,腿,脚。骨骼只采用一套,男女共用,动作也分开来,每个动作都可以驱动骨架。每个部分都需要包含蒙皮信息,但不需要骨架,因为骨架可以共用,不需要保存多份,动作也一样,也只要一份就可以了,想要实现高效的换装,骨架和动作一定要支持共享。在Ogre中,骨骼和动作被合起来放到一个skeleton文件中,为了换装,自然要把这些东西分拆掉,难道天龙八部就是这个原因?(^_^,我猜的,可能是)

分成六个部分后,就可以在需要是把对应部分替换掉实现换装,刚才说了,换装的难点在于为什么能换。能换的原因是在接缝的地方,只要没有接缝,这个部分就好像被换掉了,那怎么保证没有接缝呢,那就要使接缝处的顶点受到骨头影响的权重保持一致,只要一致了,换装就可以实现了。

再说点题外话,一般手里拿的武器属于挂接物体,不属于换装范畴,挂接相对来说更简单一点,创建一个节点绑定到某块骨头就可以了,这类物体的共性是物体只有刚性变化。还有一些换装是通过换模型的贴图来完成。总之,换装如果不考虑效率和资源共享并不难,换装的原理是何骨骼动画相关的,当然这只适用于本文提到的换装方式,如果你有其他更巧妙的换装方法,请告诉我,一起分享啊,^_^。

最新文章

  1. MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL
  2. 【Python】pymongo使用
  3. python entrypoint
  4. springMVC创建基础变量
  5. HBase参数配置及说明(转)
  6. gpgcheck
  7. JMeter重要知识点汇总
  8. 如何 对 Windows 窗体控件进行线程安全调用
  9. 剑指offier第三题
  10. gulp使用心得
  11. java遍历hashMap、hashSet、Hashtable
  12. gsoap入门实例
  13. HDU 1317XYZZY spfa+判断正环+链式前向星(感觉不对,但能A)
  14. FBV和CBV装饰器
  15. django框架使用mysql报错,及两种解决方法
  16. 安卓开发中SpannableString之富文本显示效果
  17. sourceInsight工具移除不掉项目 source Insight Add and Remove Project Files
  18. hdu 3829 Cat VS Dog 二分图匹配 最大点独立集
  19. js上传文件(可自定义进度条)
  20. 53.storm简介

热门文章

  1. httpurlconnection模拟post提交form表单(普通文本和上传文件) (
  2. .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点
  3. 谈谈加载(Loading)的那点事
  4. CentOS 7 yum安装路径查询方法
  5. poi 处理excel 小数问题 整数不保留小数位 整数多.0
  6. Struts2中的数据类型转换
  7. [洛谷P3941] 入阵曲
  8. checkbox 背景图片 纯CSS处理办法
  9. HP叫魔术方法的函数
  10. 【LeetCode】Maximum Depth of Binary Tree