private void applySkinning() { for(FbxBindPose pose : bindMap.values()) pose.fillBindTransforms(); if(limbMap == null) return; List<Bone> bones = new ArrayList<>(); for(FbxNode limb : limbMap.values()) { if(limb.bone != null) { bones.add(limb.bone); limb.buildBindPoseBoneTransform(); } } skeleton = new Skeleton(bones.toArray(new Bone[bones.size()])); skeleton.setBindingPose(); for(FbxNode limb : limbMap.values()) limb.setSkeleton(skeleton); for(FbxSkin skin : skinMap.values()) skin.generateSkinning(); // Attach controls animControl = new AnimControl(skeleton); sceneNode.addControl(animControl); SkeletonControl control = new SkeletonControl(skeleton); sceneNode.addControl(control); }
node.addControl(new SkeletonControl(skeleton)); blenderContext.setNodeForSkeleton(skeleton, node); List<BlenderAction> actions = this.getActions(skeleton, animationMatchMethod);
@Override public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule in = im.getCapsule(this); skeleton = (Skeleton) in.readSavable("skeleton", null); HashMap<String, Animation> loadedAnimationMap = (HashMap<String, Animation>) in.readStringSavableMap("animations", null); if (loadedAnimationMap != null) { animationMap = loadedAnimationMap; } if (im.getFormatVersion() == 0) { // Changed for backward compatibility with j3o files generated // before the AnimControl/SkeletonControl split. // If we find a target mesh array the AnimControl creates the // SkeletonControl for old files and add it to the spatial. // When backward compatibility won't be needed anymore this can deleted Savable[] sav = in.readSavableArray("targets", null); if (sav != null) { // NOTE: allow the targets to be gathered automatically skeletonControl = new SkeletonControl(skeleton); spatial.addControl(skeletonControl); } } } }
SkeletonControl skeletonControl = new SkeletonControl(skeleton); model.addControl(skeletonControl);
jmeSpatial.addControl(new SkeletonControl(fbxNode.skeleton));
private void applySkinning() { for(FbxBindPose pose : bindMap.values()) pose.fillBindTransforms(); if(limbMap == null) return; List<Bone> bones = new ArrayList<>(); for(FbxNode limb : limbMap.values()) { if(limb.bone != null) { bones.add(limb.bone); limb.buildBindPoseBoneTransform(); } } skeleton = new Skeleton(bones.toArray(new Bone[bones.size()])); skeleton.setBindingPose(); for(FbxNode limb : limbMap.values()) limb.setSkeleton(skeleton); for(FbxSkin skin : skinMap.values()) skin.generateSkinning(); // Attach controls animControl = new AnimControl(skeleton); sceneNode.addControl(animControl); SkeletonControl control = new SkeletonControl(skeleton); sceneNode.addControl(control); }
SkeletonControl skeletonControl = new SkeletonControl(animData.skeleton);
SkeletonControl skeletonControl = new SkeletonControl(animData.skeleton);
SkeletonControl skeletonControl = new SkeletonControl(animData.skeleton);
SkinData skinData = new SkinData(); skinData.bones = bones; skinData.skeletonControl = new SkeletonControl(skeleton); skinData.animControl = new AnimControl(skinData.skeletonControl.getSkeleton()); addToCache("skins", index, skinData, nodes.size());
SkeletonControl control = new SkeletonControl(skeleton); sceneNode.addControl(control);
@Override public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule in = im.getCapsule(this); skeleton = (Skeleton) in.readSavable("skeleton", null); HashMap<String, Animation> loadedAnimationMap = (HashMap<String, Animation>) in.readStringSavableMap("animations", null); if (loadedAnimationMap != null) { animationMap = loadedAnimationMap; } if (im.getFormatVersion() == 0) { // Changed for backward compatibility with j3o files generated // before the AnimControl/SkeletonControl split. // If we find a target mesh array the AnimControl creates the // SkeletonControl for old files and add it to the spatial. // When backward compatibility won't be needed anymore this can deleted Savable[] sav = in.readSavableArray("targets", null); if (sav != null) { Mesh[] targets = new Mesh[sav.length]; System.arraycopy(sav, 0, targets, 0, sav.length); skeletonControl = new SkeletonControl(targets, skeleton); spatial.addControl(skeletonControl); } } } }
@Override public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule in = im.getCapsule(this); skeleton = (Skeleton) in.readSavable("skeleton", null); HashMap<String, Animation> loadedAnimationMap = (HashMap<String, Animation>) in.readStringSavableMap("animations", null); if (loadedAnimationMap != null) { animationMap = loadedAnimationMap; } if (im.getFormatVersion() == 0) { // Changed for backward compatibility with j3o files generated // before the AnimControl/SkeletonControl split. // If we find a target mesh array the AnimControl creates the // SkeletonControl for old files and add it to the spatial. // When backward compatibility won't be needed anymore this can deleted Savable[] sav = in.readSavableArray("targets", null); if (sav != null) { // NOTE: allow the targets to be gathered automatically skeletonControl = new SkeletonControl(skeleton); spatial.addControl(skeletonControl); } } } }
public Control cloneForSpatial(Spatial spatial) { Node clonedNode = (Node) spatial; AnimControl ctrl = spatial.getControl(AnimControl.class); SkeletonControl clone = new SkeletonControl(); clone.skeleton = ctrl.getSkeleton(); clone.setSpatial(clonedNode); // Fix attachments for the cloned node for (int i = 0; i < clonedNode.getQuantity(); i++) { // go through attachment nodes, apply them to correct bone Spatial child = clonedNode.getChild(i); if (child instanceof Node) { Node clonedAttachNode = (Node) child; Bone originalBone = (Bone) clonedAttachNode.getUserData("AttachedBone"); if (originalBone != null) { Bone clonedBone = clone.skeleton.getBone(originalBone.getName()); clonedAttachNode.setUserData("AttachedBone", clonedBone); clonedBone.setAttachmentsNode(clonedAttachNode); } } } return clone; }
@Override public Control cloneForSpatial(Spatial spatial) { Node clonedNode = (Node) spatial; SkeletonControl clone = new SkeletonControl();
jmeSpatial.addControl(new SkeletonControl(fbxNode.skeleton));