Я загружаю трехмерный объект в сцену Away3D, и я бы хотел переместить положение костей в код.
Загрузка актива все идет хорошо, я захватываю указатель на Mesh
и Skeleton
при загрузке:
private function onAssetComplete(evt:AssetEvent):void
{
if(evt.asset.assetType == AssetType.SKELETON){
_skeleton = evt.asset as Skeleton;
} else if (evt.asset.assetType == AssetType.MESH) {
_mesh = evt.asset as Mesh;
}
}
После того, как актив завершили загрузку, у меня есть действительный экземпляр Skeleton
и Mesh
, эта модель также видна в моей сцене. Следующее, что я пробовал, это следующее.
// create a matrix with the desired joint (bone) position
var pos:Matrix3D = new Matrix3D();
pos.position = new Vector3D(60, 0, 0);
pos.invert();
// get the joint I'd like to modifiy. The bone is named "left"
var joint:SkeletonJoint = _skeleton.jointFromName("left");
// assign joint position
joint.inverseBindPose = pos.rawData;
Этот код работает без ошибок, но новая позиция не применяется к видимой геометрии, например. положение кости не изменяется вообще.
Есть ли еще один шаг, который мне не хватает? Должен ли я переписывать скелет в Mesh
каким-то образом? Или мне нужно явно указать сетке, что изменилось положение костей?