2011-05-25 11 views
11

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://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

de agradecimiento-tanto!

+0

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

Respuesta

0

Esto se ve bastante complicado. Supongo que puedes arruinar fácilmente el orden de cómo aplicar las transformaciones matriciales. Intenta comenzar con un sistema muy simple, donde puedes guardar todo en tu cabeza.

+0

Sí, creo que ese es el problema.He tratado de simplificar esto al mínimo. Tal vez lo eche un vistazo sin el código de skinning ... Gracias por la respuesta. :) – ashleysmithgpu

Cuestiones relacionadas