BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1576|回复: 0

blender-python 骨骼数据处理详解(bpy.data.armatures)

[复制链接]
发表于 2014-1-24 23:38:08 | 显示全部楼层 |阅读模式
本帖最后由 墨阳 于 2014-1-25 13:37 编辑

1.获得骨骼数据的一些基础操作
得到骨骼:
armature = bpy.data.armatures[0]
bone0 = armature.bones[0]      

bone1 = armature.bones[0]  

得到父子关系:
bone0.parent        #empty  bone0是root所以没有parent
bone1.parent       #bone0

得到骨骼数据本身(先把代码写在这,下面会描述这段代码具体的含义):
boneMat = mathutils.Matrix.Identity(4)
if bone.parent == None:
    boneMat = bone.matrix_local
else:
    boneMat = bone.parent.matrix_local.inverted() * bone.matrix_local
loc, quat, sca = boneMat.decompose()



2.理解骨骼的数据结构:
一根骨骼,在blender里面是一段可视化的线,而在程序里,它只是一个关键点(实际上是一个空间变换矩阵,其中包含了一个关键点),所以当场景中仅有一根骨骼的时候,无论如何缩放骨骼,描述该骨骼的矩阵都不会变化
QQ截图20140124231451.png

骨骼矩阵的说明:骨骼矩阵是一根4x4矩阵,可以被分解为:
为一个代表骨骼起始位置的三维向量(loc),
一个代表旋转变换的四元组(quat),
和一个代表相对父骨骼的缩放的三维向量(sca),貌似取值都是恒定在(1,1,1)误差很小   这个值 我非常的不理解!


3.坐标转换boneMat = bone.parent.matrix_local.inverted() * bone.matrix_local
上面的这句代码我含义我也不明确,在群里阳大、Noob讨论 ,感觉若方程两边同时乘以bone.parent.matrix_local
可以得到: boneMat * bone.parent.matrix_local = bone.matrix_local
所以猜想:boneMat是相对parent的,matrix_local是相对世界的,matrix_local*matrix_world是世界坐标

4. 骨骼的权重表示

5.FK和IK
blender是如何处理IK的? 这部分还没看 ,后面继续完善






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-12-8 10:29 , Processed in 0.015950 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表