在blender python中导出关键帧

时间:2009-08-13 17:54:32

标签: python 3d blender

我正在尝试从搅拌机中导出动画,这是我到目前为止所做的事情:
---这只是为了让你知道我在做什么,而且我已经遗漏了很多东西以保持简短 ---如果它太混乱或者需要它我可以发布整个来源。

# Get the armature  
arm = ob.getData()  
# Start at the root bone  
for bone in bones:  
    if not bone.parent:  
        traceBone(bone)  

def traceBone(bone):
  # Get the channel for this bone
  channel=action.getChannelIpo(bone.name);

  # Get the loc x, y, z channels
  c_locx=channel[Ipo.OB_LOCX].bezierPoints
  frameCount=len(c_locx)

  # Write each location frame
  for frameIndex in  range(frameCount):
    frame_x=c_locx[frameIndex].pt
    frameTime=int(frame_x[0]-1)
    # Write the time of the frame
    writeInt(frameTime)
    # Write the x, y and z coordinates
    writeFloats(frame_x[1], frame_z[1], frame_y[1])

  # Iv'e done the same for rotation
  c_quatx=channel[Ipo.PO_QUATX].bezierPoints
  # Write the quaternion w, x, y and z values
  writeFloats(frame_w[1], frame_x[1], frame_z[1], frame_y[1])

  # Go through the children
  for child in bone.children:
    traceBone(child)  

据我所知,一切正常,问题是这些值是抵消的, 代表变化,但我需要的是绝对值,表示骨骼相对于它的父亲的位置和旋转值。

如何获得相对于父母的位置和轮换?

1 个答案:

答案 0 :(得分:2)

应将通道数据应用于绑定姿势矩阵之上。

完整的公式如下:

Mr = Ms * B0 * P0 * B1 * P1 ... Bn * Pn

其中:

先生 =骨骼'n'的结果矩阵

Ms = skeleton-> world matrix

Bi =骨骼'i'的绑定姿势矩阵

Pi =构建从存储的通道构建的实际矩阵(您正在导出)

'n-1'是'n'的父骨骼,'n-2'是'n-1'的父亲,...,'0'是'1'的父亲