• 2D Skinned Mesh(3D的完全翻版 带旋转)


    由下面几个文章引发的欲望,让我自己也试着实现了一个基于2D的骨骼动画。

    一篇讲述骨骼动画数学运算的文章

    http://www.cnblogs.com/neoragex2002/archive/2007/09/13/891945.html

    两篇讲述骨骼动画原理和实现的文章 一篇也是用的2D,老外的那篇用的是DX

    http://www.cppblog.com/Leaf/archive/2010/12/31/137818.html

    空明流转用C#写的一个,当然也可以下载源码。只是在他的BLOG中,他未解释任何东西。并且我也未曾下载任何源码,不知是否源码中有文档

    http://www.cppblog.com/lingjingqiu/archive/2008/06/07/52463.aspx

    很不爽的是,许多例子或原理讲的时候没有带旋转。 其实那才是重头戏。 空明流转的貌似有旋转,可惜C#我也看不懂。还不如自己来一个。

    为了迎合广大人民群众的取向,先上图和上码。

    image

    源码下载地址 (所有源码和执行程序)

    本来按照某种意义上来讲,这就算完事儿了。 但还是要简单介绍一下。

    白色方块:骨骼位置

    白色线条:骨骼空间的X轴(注意这是2D,因此只有X和Y轴)

    蓝色方块:顶点

    (要跟大家说一下对不起,因为我实在是不想仔细地去给一个让它们看起来会很美的数据。凑合着能表达意思就行)

    按键:1 2 3 4 5 6 7 8(非小键盘)你自己按了就知道。

    环境:C++ VS 2005 HGE(仅是用于渲染)。

    关于那些代码

    对于骨骼数据的存储,我并未采用兄弟+孩子节点的表示法。 而是将他们存在了一个数组里。 并标记一个骨骼的父骨骼在数组中的索引。

    这样不管是从数据存储还是访问上,都很方便。

    另外,骨骼数据并未存放着“它影响了哪些顶点,影响权重”等信息,这些则交由模型持有。 这样一来,骨骼数据本身就是一堆矩阵的数

    据运算,并不涉及其它结构。 放哪都是一样的。 目前是2D的数据运算。 若有兄弟有蛋疼,将它换成3D数据试试。本想出一个很好的演示

    样例,突然发现数据构建太费劲了,只好省去! 此次也没有做动画,而是做了一个手动控制。

    关于这次蛋疼的目的

    这次蛋疼的目的仅是想充分理解一下骨骼运算。因为公司的骨骼动画并非由我完成的,所以自己没有实际操刀做过。由此想自己实现一次,而3D

    数据构造又太麻烦。 既然仅是数学运算,何必要找3D呢,2D即可。

    关于这次的收获

    这次写了顺便写了一个2D的向量和一个2D矩阵运算类。矩阵求逆那里很费了一下时间,后来才发现是一个地方写错了。 不过纠结总归有好处,至

    少映像更深。 其间参考了许多原码,由此不得不说明一下我遇到的一些TIP

    一、骨骼数据的存放一般是分开存放的。分为“位移,缩放,旋转”。 在动画插值时分别插值。 因为矩阵的线性插值形成的旋转效果是不对的。

    (因为SIN COS)并非线性。而位移和缩放通常情况下是固定的常量。不需要进行插值,由此还能省去不少运算。

    二、骨骼权重和要为1 (这句有点废)

    三、用SHADER进行骨骼运算时,由于全都是世界矩阵。 由此可省掉一个(0,0,0,1)。 于是,一个骨骼矩阵可以节约一个寄存器。(这

    也是老生常淡了)

    四、能有耐心地看完DX的例子的人,一定是强人。 因为我一个也没坚持看完过。

    五、多看看DX SDK,即使同一页,每一次你都会有新收获。

    关于下一次蛋疼计划

    整理一下先前写的那个3D例子。虽然与VCZH那个比起来很逊,但毕竟是自己生的。

    有兴趣的朋友就下载来看看吧,一切尽在不言中,我自我感觉那代码比较好懂。不而要我多解释。 加上上面好几篇文章作为“巨人的肩膀”。

    谢谢。

    GMAIL: BOYUEGAME

    时间到,洗洗睡!各位晚安。

  • 相关阅读:
    正则表达式元字符完整列表及行为说明
    吐槽满肚子的负能量
    又一个月了
    关于SVNcommit时强制写注释方法
    SVN源码服务器搭建
    一个 quick set 驱动费了我一下午
    spring自动注入是单例还是多例?单例如何注入多例?
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
    springmvc+hibernate
    oracle 表 库实例 空间
  • 原文地址:https://www.cnblogs.com/qilinzi/p/1935121.html
Copyright © 2020-2023  润新知