/** * builds the trimesh. * * @see com.jme.app.SimpleGame#initGame() */ protected void simpleInitGame() { display.setTitle("Imposter Test"); cam.setLocation(new Vector3f(0.0f, 0.0f, 25.0f)); cam.update(); // setup the scene to be 'impostered' Md2ToJme converter = new Md2ToJme(); ByteArrayOutputStream BO = new ByteArrayOutputStream(); URL freak = TestMd2JmeWrite.class.getClassLoader().getResource(FILE_NAME); freakmd2 = null; try { long time = System.currentTimeMillis(); converter.convert(freak.openStream(), BO); logger.info("Time to convert from md2 to .jme:" + (System.currentTimeMillis() - time)); } catch (IOException e) { logger.info("damn exceptions:" + e.getMessage()); } try { long time = System.currentTimeMillis(); freakmd2 = (Node) BinaryImporter.getInstance().load(new ByteArrayInputStream(BO.toByteArray())); logger.info("Time to convert from .jme to SceneGraph:" + (System.currentTimeMillis() - time)); } catch (IOException e) { logger.info("damn exceptions:" + e.getMessage()); } ((KeyframeController) freakmd2.getChild(0).getController(0)).setSpeed(10); ((KeyframeController) freakmd2.getChild(0).getController(0)).setRepeatType(Controller.RT_WRAP); fakeScene = new Node("Fake node"); fakeScene.attachChild(freakmd2); // apply the appropriate texture to the imposter scene TextureState ts2 = display.getRenderer().createTextureState(); ts2.setEnabled(true); ts2.setTexture( TextureManager.loadTexture( TestImposterNode.class.getClassLoader().getResource(TEXTURE_NAME), Texture.MinificationFilter.Trilinear, Texture.MagnificationFilter.Bilinear)); fakeScene.setRenderState(ts2); ZBufferState buf = display.getRenderer().createZBufferState(); buf.setEnabled(true); buf.setFunction(ZBufferState.TestFunction.LessThanOrEqualTo); fakeScene.setRenderState(buf); fakeScene.updateRenderState(); // setup the imposter node... iNode = new ImposterNode("model imposter", 10, display.getWidth(), display.getHeight()); iNode.attachChild(fakeScene); iNode.setCameraDistance(100); iNode.setRedrawRate(.05f); // .05 = update texture 20 times a second on average // iNode.setCameraThreshold(15*FastMath.DEG_TO_RAD); // Now add the imposter to a Screen Aligned billboard so the deception is complete. BillboardNode bnode = new BillboardNode("imposter bbnode"); bnode.setAlignment(BillboardNode.SCREEN_ALIGNED); bnode.attachChild(iNode); rootNode.attachChild(bnode); }
@Override protected void cleanup() { iNode.getTextureRenderer().cleanup(); super.cleanup(); }