gpt4 book ai didi

python - Blender 的顶点动画导出器?

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:11 26 4
gpt4 key购买 nike

我真的很想为 Blender 编写一个导出矢量动画(如 md2)的导出脚本,但我似乎无法获取由骨骼修改的顶点......我已经编写了静态导出器,但正在转换顶点积分有点超出我的范围......

有没有一种方法可以轻松地获取在特定帧中由骨骼动画的顶点的位置?目前我正在制作 blender 动画,将每一帧导出到 *.obj,将每一帧导入一个新场景并使用我的静态模型脚本导出每个新模型以导出新的矢量位置......必须有一个更容易(更快)的方法) 方式!

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

我真的不太会用 python,所以我现在的导出器写得有点糟糕......我希望在代码框中显示这里的代码,但我不知道如何在其中显示 python 代码这里有一个代码块……对此感到抱歉。

最佳答案

首先,来源。它假定您的骨骼动画对象称为“立方体”。

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']

我们检索动画的开始和结束帧;这两个值显示在屏幕底部,默认为“开始:1”和“结束: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)

调用 update 似乎不是必需的,但最好有它,因为它会强制所有更新依赖于帧位置(即动画)。

    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")

关于python - Blender 的顶点动画导出器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com