@Override public Object load(AssetInfo assetInfo) throws IOException { this.currentAssetInfo = assetInfo; this.assetManager = assetInfo.getManager(); AssetKey<?> assetKey = assetInfo.getKey(); if(assetKey instanceof SceneKey) animList = ((SceneKey) assetKey).getAnimations(); InputStream stream = assetInfo.openStream(); final Node sceneNode = this.sceneNode = new Node(sceneName + "-scene"); try { sceneFilename = assetKey.getName(); sceneFolderName = assetKey.getFolder(); String ext = assetKey.getExtension(); sceneName = sceneFilename.substring(0, sceneFilename.length() - ext.length() - 1); if(sceneFolderName != null && sceneFolderName.length() > 0) sceneName = sceneName.substring(sceneFolderName.length()); loadScene(stream); linkScene(); if(warnings.size() > 0) logger.log(Level.WARNING, "Model load finished with warnings:\n" + join(warnings, "\n")); } finally { releaseObjects(); if(stream != null) stream.close(); } return sceneNode; }
private void loadScene(InputStream stream) throws IOException { logger.log(Level.FINE, "Loading scene {0}", sceneFilename); long startTime = System.currentTimeMillis(); FbxFile scene = FbxReader.readFBX(stream); for(FbxElement e : scene.rootElements) { // Is it possible for elements to be in wrong order? switch(e.id) { case "GlobalSettings": loadGlobalSettings(e); break; case "Objects": loadObjects(e); break; case "Connections": loadConnections(e); break; } } long estimatedTime = System.currentTimeMillis() - startTime; logger.log(Level.FINE, "Loading done in {0} ms", estimatedTime); }
break; case "Deformer": obj = loadDeformer(e); break; case "AnimationLayer":
private void linkScene() { logger.log(Level.FINE, "Linking scene objects"); long startTime = System.currentTimeMillis(); applySkinning(); buildAnimations(); for(FbxMesh mesh : geomMap.values()) mesh.clearMaterials(); // Remove bones from node structures : JME creates attach node by itself for(FbxNode limb : limbMap.values()) limb.node.removeFromParent(); long estimatedTime = System.currentTimeMillis() - startTime; logger.log(Level.FINE, "Linking done in {0} ms", estimatedTime); }
private void loadObjects(FBXElement element) { for(FBXElement e : element.children) { if(e.id.equals("Geometry")) loadGeometry(e); else if(e.id.equals("Material")) loadMaterial(e); else if(e.id.equals("Model")) loadModel(e); else if(e.id.equals("Pose")) loadPose(e); else if(e.id.equals("Texture")) loadTexture(e); else if(e.id.equals("Video")) loadImage(e); else if(e.id.equals("Deformer")) loadDeformer(e); else if(e.id.equals("AnimationLayer")) loadAnimLayer(e); else if(e.id.equals("AnimationCurve")) loadAnimCurve(e); else if(e.id.equals("AnimationCurveNode")) loadAnimNode(e); } }
@Override public Object load(AssetInfo assetInfo) throws IOException { this.assetManager = assetInfo.getManager(); AssetKey<?> assetKey = assetInfo.getKey(); if(assetKey instanceof SceneKey) animList = ((SceneKey) assetKey).getAnimations(); else if(!(assetKey instanceof ModelKey)) throw new AssetLoadException("Invalid asset key"); InputStream stream = assetInfo.openStream(); Node sceneNode = null; try { sceneFilename = assetKey.getName(); sceneFolderName = assetKey.getFolder(); String ext = assetKey.getExtension(); sceneName = sceneFilename.substring(0, sceneFilename.length() - ext.length() - 1); if(sceneFolderName != null && sceneFolderName.length() > 0) sceneName = sceneName.substring(sceneFolderName.length()); reset(); loadScene(stream); sceneNode = linkScene(); } finally { releaseObjects(); if(stream != null) { stream.close(); } } return sceneNode; }
FbxAnimNode animRotation = limb.animRotation(sourceLayerId); FbxAnimNode animScale = limb.animScale(sourceLayerId); boolean haveTranslation = haveAnyChannel(animTranslation); boolean haveRotation = haveAnyChannel(animRotation); boolean haveScale = haveAnyChannel(animScale);
private void linkScene() { logger.log(Level.FINE, "Linking scene objects"); long startTime = System.currentTimeMillis(); applySkinning(); buildAnimations(); for(FbxMesh mesh : geomMap.values()) mesh.clearMaterials(); // Remove bones from node structures : JME creates attach node by itself for(FbxNode limb : limbMap.values()) limb.node.removeFromParent(); long estimatedTime = System.currentTimeMillis() - startTime; logger.log(Level.FINE, "Linking done in {0} ms", estimatedTime); }
FbxAnimNode animRotation = limb.animRotation(sourceLayerId); FbxAnimNode animScale = limb.animScale(sourceLayerId); boolean haveTranslation = haveAnyChannel(animTranslation); boolean haveRotation = haveAnyChannel(animRotation); boolean haveScale = haveAnyChannel(animScale);
private void loadScene(InputStream stream) throws IOException { logger.log(Level.FINE, "Loading scene {0}", sceneFilename); long startTime = System.currentTimeMillis(); FBXFile scene = FBXReader.readFBX(stream); for(FBXElement e : scene.rootElements) { if(e.id.equals("GlobalSettings")) loadGlobalSettings(e); else if(e.id.equals("Objects")) loadObjects(e); else if(e.id.equals("Connections")) loadConnections(e); } long estimatedTime = System.currentTimeMillis() - startTime; logger.log(Level.FINE, "Loading done in {0} ms", estimatedTime); }
@Override public Object load(AssetInfo assetInfo) throws IOException { this.currentAssetInfo = assetInfo; this.assetManager = assetInfo.getManager(); AssetKey<?> assetKey = assetInfo.getKey(); if(assetKey instanceof SceneKey) animList = ((SceneKey) assetKey).getAnimations(); InputStream stream = assetInfo.openStream(); final Node sceneNode = this.sceneNode = new Node(sceneName + "-scene"); try { sceneFilename = assetKey.getName(); sceneFolderName = assetKey.getFolder(); String ext = assetKey.getExtension(); sceneName = sceneFilename.substring(0, sceneFilename.length() - ext.length() - 1); if(sceneFolderName != null && sceneFolderName.length() > 0) sceneName = sceneName.substring(sceneFolderName.length()); loadScene(stream); linkScene(); if(warnings.size() > 0) logger.log(Level.WARNING, "Model load finished with warnings:\n" + join(warnings, "\n")); } finally { releaseObjects(); if(stream != null) stream.close(); } return sceneNode; }
break; case "Deformer": obj = loadDeformer(e); break; case "AnimationLayer":
private void loadScene(InputStream stream) throws IOException { logger.log(Level.FINE, "Loading scene {0}", sceneFilename); long startTime = System.currentTimeMillis(); FbxFile scene = FbxReader.readFBX(stream); for(FbxElement e : scene.rootElements) { // Is it possible for elements to be in wrong order? switch(e.id) { case "GlobalSettings": loadGlobalSettings(e); break; case "Objects": loadObjects(e); break; case "Connections": loadConnections(e); break; } } long estimatedTime = System.currentTimeMillis() - startTime; logger.log(Level.FINE, "Loading done in {0} ms", estimatedTime); }