blender Matrices

Blender处理对象中心

Blender提供两种选项,可以自动将网格的原点居中到其形状,原点为几何原点为质心。必须小心使用这两个选项来确定机器人部件的实际质心。Origin to Geometry计算网格的所有顶点的平均值,这意味着一侧密集且另一侧稀疏的网格将具有计算中心的偏差,而不是基于物理学。因此,这仅适用于具有均匀顶点分布的对象或简单的常规形状(例如框或球体)。起源于弥撒中心 假设网格是一个空心壳,并计算质心作为所有面中心点的加权(通过面面积)平均值,这对于空心壳是物理精确的,但是与空心壳形状相同的固体物体确实如此不一定有相同的质心。

Blender Transformation Matrices

如果您想深入了解Blender或Phobos的代码并将其用于您自己的脚本,以下内容非常重要。
matrix_local = matrix_parent_inverse @ matrix_basis
matrix_world = parent.matrix_world @ matrix_local
在Blender中,每个物体都拥有四个不同的变换矩阵,以保存其当前位置,旋转和空间尺度。这些是:

  • matrix_basis
  • matrix_local
  • matrix_world
  • matrix_parent_inverse

这些矩阵允许在Blender中以父子关系分层次地构造对象。因此,可以观察到这些矩阵的不同行为,这取决于它们是属于全局对象还是 对象。

全局对象是没有父对象的对象,它们的位置,旋转和比例是相对于世界完全定义的。因此,他们的matrix_basismatrix_localmatrix_world都是相同的。因为它们没有父级,所以matrix_parent_inverse是标识变换(或者它们在从某个对象取消父级之前的最后一个matrix_parent_inverse,但是它被忽略)。

在作为其他对象的子对象(即具有父对象)的对象中,三个矩阵用于不同的功能,如下所述。

matrix_basis

matrix_basis是对象在自己的坐标空间中的变换。它表示 边栏和对象属性中Blender的Transform值中显示的变换。这些值通常是一个混淆点,因为matrix_basis不一定是指对象在空间中的实际位置和方向(例外是全局对象,它总是这样做)。相反,这是对象在没有父对象时将拥有的全局变换到另一个对象。例如,如果将对象沿X方向移动1.0个单位,则向量(X:1,Y:0,Z:0)将显示在侧边栏中,即使您之后将该对象父对象移动到另一个对象并移动该父对象Blender场景中的物体。

matrix_local

局部矩阵定义了从父世界变换到子世界变换的变换。因此,如果将子项的局部矩阵应用于其基点,则该点将位于其父项的原点。同样,如果移动对象相对于其父对象,则此矩阵将更新。

matrix_world

这个矩阵是世界上对象的绝对变换(有时你希望这是在侧边栏而不是matrix_basis中显示的那个)。这是在搅拌机中显示对象的位置,方向和比例。

matrix_parent_inverse

父逆矩阵在父母教育时设置,之后永远不会改变,无论对父母或孩子进行什么样的转换(实际上,在父子关系被取消后它甚至都没有改变,并且被忽略通过Blender,直到对象再次成为一个孩子,此时它被简单地覆盖)。正是这种转变,如果应用于儿童,则会改变因建立父子关系而导致的儿童坐标系起源的变化。因此,它等于父母教养时父母世界变换的倒数。最后一点很重要!由于父对象可能是另一个对象的子对象,因此局部变换和基础变换不会反映父对象的原点变化,因此必须使用世界变换来导出父对象。

摘要

  • matrix_basis:对象在其自己的坐标系中的“自己的”变换
  • matrix_local:将对象从其父级原点带到其在世界中的位置的变换
  • matrix_world:对象相对于世界的绝对变换
  • matrix_parent_inverse:父母时父母世界变换的倒数

实用功能

虽然Blender不能轻易显示所有这些矩阵,但Phobos有这样的功能:utils.blender.printMatrices您可以从Blender的终端或脚本中运行。

你可能感兴趣的:(blender Matrices)