Buenas, ando liado con un sistema de animacion esqueletal.
Hasta ahora he conseguido:
- Leer toda la informacion del modelo, con sus bones, helpers, attachements, ... con sus correspondientes interpoladores.
- Leer las diferentes secuencias.
- Mostrar el modelo en estatico.
Ahora estoy renderizando las secuencias, y las rotaciones y las traslaciones creo que las hago bien. Pero el escalado de los distintos geosets no lo hace bien.
El codigo que uso es:
TranslationVector = Translation.GetValue(Time);
RotationVector = Rotation.GetValue(Time);
ScalingVector = Scaling.GetValue(Time);
Matrix mPivotPoint = Matrix.CreateTranslation(PivotPoint);
Matrix mScaling = Matrix.CreateScale(ScalingVector);Matrix mRotation = Matrix.CreateFromQuaternion(RotationVector.ToQuaternion());
Matrix mTranslation = Matrix.CreateTranslation(TranslationVector);Matrix mPivotPointInverse = Matrix.Invert(mPivotPoint);
Transform = mPivotPointInverse * mScaling * mRotation * mPivotPoint * mTranslation;
if (Parent != null && Parent.NodeId != -1) {
Transform= Matrix.Multiply(Parent.Transform, Transform);
}foreach (BaseNode child in Children) {
child.BuildTransformMatrix(Time);
}
¿Es correcto esto?
Para mas datos, si visualizo el modelo en estatico, es decir, sin transformar los vertices. Sale todo correcto.
Incluso si visualizo los bones, estos se corresponden mas o menos con el modelo, pero cuando transformo los nodos, las escalas se van a tomar por ...
Tb agradeceria noticias de alguna documentacion sobre el tema.
Un saludo.
PD: Creo q voy a acostarme, quizas mañana con la cabeza despejada....