gpt4 book ai didi

python - 从 blender 导出以在 ogl 中查看的正确骨骼数据?

转载 作者:太空狗 更新时间:2023-10-29 18:13:03 27 4
gpt4 key购买 nike

编辑(下面是原始帖子):

所以我想出了下面的代码。我可以导出网格、骨骼结构和动画。我可以为一个简单的骨架制作动画。但出于某种原因,如果我为不止一根骨骼制作动画,就会出现问题, ARM 会在错误的轴上移动。

我的 cpp 代码在这里:http://kyuu.co.uk/so/main.cpp

我的 python 导出代码在这里:http://kyuu.co.uk/so/test.py

有人可以告诉我我做错了什么吗?我认为这可能与 blender 中的骨头卷有关。我看过很多关于那个的帖子。

谢谢。

(原帖:)

我已经研究这个问题一段时间了,但仍然无法弄清楚我遗漏了什么,所以我希望有人能帮助我:3

是的,我的应用程序中有类似以下代码的内容:

class bone {
bone * child;
Eigen::Matrix4f local_bind_pose; // this i read from a file
Eigen::Matrix4f final_skinning_matrix; // i then transform each vertex by this matrix

// temporary variables
Eigen::Matrix4f inv_bind_pose;
Eigen::Matrix4f world_bind_pose;
}

即一个简单的骨骼层次结构。

我相信我可以通过以下方法计算出 inv_bind_pose:

world_bind_pose = bone.parent.world_bind_pose * local_bind_pose
inv_bind_pose = world_bind_pose.inverse()

我知道 bind_pose 必须相对于父骨骼。

我知道 blender 是 z = up 而我正在使用 y = up。

但是我无法从 blender 中导出这些信息。我使用的是 2.56.3 版本。

矩阵的旋转部分会是bone.matrix_local吗?翻译部分会是 bone.tail() - bone.head() 吗?

骨卷呢?看来确实影响了结果。

一些引用资料:

http://www.gamedev.net/topic/571044-skeletal-animation-bonespace

http://blenderartists.org/forum/showthread.php?209221-calculate-bone-location-rotation-from-fcurve-animation-data

http://www.blender.org/development/release-logs/blender-240/how-armatures-work

http://code.google.com/p/gamekit/source/browse/trunk/Engine/Loaders/Blender/gkSkeletonLoader.cpp?spec=svn482&r=482

非常感谢!

最佳答案

我们广泛使用 blender 骨头。我想你可能会找到 this snippet有用。

import gzip
import struct

import bpy

groups = [x.name for x in bpy.context.object.vertex_groups]
rig = bpy.context.object.parent

buf = bytearray()
buf.extend(struct.pack('ii', len(groups), 60))

for i in range(60):
bpy.context.scene.frame_set(i)
for name in groups:
base = rig.pose.bones[name].bone.matrix_local.inverted()
mat = rig.pose.bones[name].matrix @ base
x, y, z = mat.to_translation()
rw, rx, ry, rz = mat.to_quaternion()
buf.extend(struct.pack('3f4x4f', x, y, z, rx, ry, rz, rw))

open('output.rig.gz', 'wb').write(gzip.compress(buf))

这会直接为 GPU 导出 blender 骨骼。

Here we use it

此脚本可以在对象模式下运行。希望对您有所帮助。

关于python - 从 blender 导出以在 ogl 中查看的正确骨骼数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6129866/

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