热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

正向运动学和反向运动学

正向运动学和反向运动学上次制作的骨骼动画例子程序并不完美,我在程序里面也说了,因为没有牵涉到反向运动学的知识,所以人物运动起来感觉脚无法收

正向运动学和反向运动学

 

         上次制作的骨骼动画例子程序并不完美,我在程序里面也说了,因为没有牵涉到反向运动学的知识,所以人物运动起来感觉脚无法收缩、头发无法飘逸的感觉。其实在现实中这样的情况是要避免的,但是由于在动画设计的时候要指定每一个关节,显得非常费事。所以引入了反向运动学这个概念。在介绍反向运动学之前,首先让我们看一下正向运动学。

 

原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/13991063

         正向运动学,通俗来说是给定父骨骼位置以及它的变换来得出子骨骼的位置以及变换,打一个比方,就像运动手臂,可以带动手肘,进而带动手掌运动。正向运动学的概念是非常容易理解的,实现起来也比较方便,即在场景中先绘制父骨骼,应用父骨骼的变换,然后根据这个变换绘制子骨骼,以此类推。我们可以用下面伪代码来表示:

 

PushMatrix( );RenderParentBone( );ApplyParentTransform( );PushMatrix( );RenderChildBone( );ApplyChildTransform( );……PopMatrix( );
PopMatrix( );

 

         反向运动学(InverseKinematics),又称逆运动学,与正向运动学的概念不同,是以子骨骼的位置和变换反推父骨骼的位置和变换,相比正向运动学来说,概念稍难理解。同样打一个比方,我们拽着玩具机械臂的一头进行运动,可以看到机械臂的各个关节都跟着进行运动。下面有几个视频介绍了反向运动学,大家可以看看。

         反向运动学的概念知道了后,我们该思考一下如何实现反向运动学,即给定n个骨骼以及n-1个关节形成一个关节链,已知末端关节的位置和首端关节的位置求出中间关节的位置。目前网络上有关反向运动学的资料偏少,可能这是一个存在时间并不长的课题吧。我所看到的中文资料仅限于二维的AS3相关实现,于是开始研究在三维条件下反向运动学的实现。

         这里有一些参考资料,如果大家感兴趣的话,可以下载,我也是在研究这么多资料之后才开始着手实现的。

         解决三维中反向运动学的问题的方法是分析型(一称解析型)的和数值型方法。分析型的方法给出了一个完整的求解思路,可是求解的效率不高,尤其是反向运动学的关节链很长的时候,在实时演算的领域(比如说游戏领域)就不是一个可行的方法。数值型方法是一个好方法,它类似于启发式搜索的方法,即先试错然后逐步修正,最终得到近似解。下面简单介绍一下数值型方法中两种解法:循环坐标下降(cyclic coordinate decent)法和雅可比矩阵(Jacobian matrix)法。

         雅可比矩阵法描述了整个关节链,每一个矩阵的列表示了每个关节的末端变化。解雅可比矩阵可不是一件容易事情,所以这只在非实时领域或者高级IK解算器中会得到使用。

         循环坐标下降法是一种简单而可行的办法,它由关节链的末端出发,层层向上递推旋转到目标位置,而且层层迭代以确保准确性,但是效果可能并不好,常常发生在与末端关节连接的关节上,导致的是扭转变形的关节链。但是速度还是有保证的。

         我在研究了几种方法之后觉得还是从循环坐标下降方法开始研究,于是在参考资料和前辈们的源码帮助下制作出了下面的演示程序。


 



推荐阅读
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • VSCode与Gitee集成:项目提交的高效实践
    本文介绍如何利用VSCode内置的Git工具将项目提交到Gitee,简化Git命令的使用,提升代码管理效率。同时分享一些常见的踩坑经验和解决方案。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
author-avatar
573079756_3618db
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有