Editar (Publicación original a continuación):¿Los datos de hueso correctos para exportar de la licuadora para verlos en ogl?
Así que he encontrado el siguiente código. Puedo exportar la malla, estructura ósea y animaciones. Puedo animar un esqueleto simple. Pero por alguna razón, si animo más de un hueso, algo sale mal y el brazo se moverá en el eje equivocado.
Mi código CPP está aquí: http://kyuu.co.uk/so/main.cpp
Mi código de exportación pitón está aquí: http://kyuu.co.uk/so/test.py
Podría alguien decirme lo que estoy haciendo mal? Creo que podría ser algo relacionado con el rollo de hueso en la licuadora. He visto muchos mensajes sobre eso.
Gracias.
(post original :)
He estado trabajando en este problema desde hace un tiempo y todavía no puede averiguar lo que me falta, así que estoy esperando alguien amable me ayudará: 3
Derecho , Tengo algo así como el siguiente código en mi aplicación:
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;
}
Ie una jerarquía ósea simple.
Creo que puedo trabajar con el inv_bind_pose
:
world_bind_pose = bone.parent.world_bind_pose * local_bind_pose
inv_bind_pose = world_bind_pose.inverse()
sé que el bind_pose
debe ser relativa a la matriz ósea.
Sé que blender es z = up y estoy usando y = up.
Pero no puedo obtener esta información exportada de Blender. Estoy usando la versión 2.56.3.
¿La parte de rotación de la matriz sería bone.matrix_local
? ¿La parte de traducción sería bone.tail() - bone.head()
?
¿Qué hay del rollo de hueso? Parece que afecta el resultado.
Algunas referencias:
http://www.gamedev.net/topic/571044-skeletal-animation-bonespace
http://www.blender.org/development/release-logs/blender-240/how-armatures-work
de agradecimiento-tanto!
En la licuadora> 2.6, puede utilizar bpy_extras.io_utils.axis_conversion (ver: blender.org/documentation/blender_python_api_2_66a_release/...) para convertir al espacio de OpenGL. – sarahm