Blender的顶点动画导出器?

时间:2012-02-04 05:22:55

标签: python blender

我真的想为Blender编写一个导出矢量动画的导出脚本(比如md2),但我似乎无法抓住被骨骼修改的椎体......我写过静态导出器,但得到了转换顶点积分远远超出了我......

有没有办法轻松抓住某些帧处骨骼动画的顶点位置?目前我正在制作搅拌器动画,将每个帧导出到* .obj,将每个帧导入到一个新场景中,并使用我的静态模型脚本导出每个新模型以导出新的矢量位置......必须更容易(并且更快) )方式!

有没有人知道任何教程或指出任何可能有帮助的命令/方法?

我对python真的不太好,所以我当前的导出器编写得有点糟糕......我希望在代码框中显示代码,但我无法弄清楚如何在python中显示python代码这里有一个代码块......很抱歉。

1 个答案:

答案 0 :(得分:0)

首先,来源。它假设你的骨架动画对象被称为'立方体'。

import bpy

o = bpy.data.objects['Cube']

frame_start = bpy.context.scene.frame_start
frame_end = bpy.context.scene.frame_end

for i in range(frame_start, frame_end):
    bpy.context.scene.frame_set(i)
    bpy.context.scene.update()

    m = o.to_mesh(bpy.context.scene, True, 'PREVIEW')

    print("Frame %d:" % i)

    for v in m.vertices:
        print("    (%f %f %f)" % (v.co.x, v.co.y, v.co.z))

    print("\n")

然后我们将通过每一行。我们首先导入Blender Python模块。

import bpy

我们检索要导出其顶点的对象。

o = bpy.data.objects['Cube']

我们检索动画的开始和结束帧;这两个值是显示在屏幕底部的值,默认为“Start:1”和“End:250”。

frame_start = bpy.context.scene.frame_start
frame_end = bpy.context.scene.frame_end

然后我们迭代第一帧和最后一帧之间的每一帧。

for i in range(frame_start, frame_end):

我们设置当前帧;请注意,看似等效的电话(* bpy.ops.anim.change_frame(frame = i)*会正常工作。如果有人对此有解释,请随时分享:-))

    bpy.context.scene.frame_set(i)

似乎没有必要调用更新,但最好拥有它,因为它会强制所有更新都依赖于帧位置(即动画)。

    bpy.context.scene.update()

我们将对象转换为网格,根据预览设置应用所有修改器(包括Armature)。

    m = o.to_mesh(bpy.context.scene, True, 'PREVIEW')

我们打印当前帧编号。

    print("Frame %d:" % i)

我们打印该帧的所有顶点,每行一个。

    for v in m.vertices:
        print("    (%f %f %f)" % (v.co.x, v.co.y, v.co.z))

我们用换行符分隔不同帧的顶点。

    print("\n")