private TrailManager(final Node root) { this.root = root; trails = new HashMap<Spatial, TrailMesh>(); Renderer r = DisplaySystem.getDisplaySystem().getRenderer(); ts = r.createTextureState(); ts.setEnabled(true); Texture t1 = TextureManager.loadTexture( ResourceLocatorTool.locateResource(ResourceLocatorTool.TYPE_TEXTURE, "trail_y1.png"), Texture.MinificationFilter.Trilinear, Texture.MagnificationFilter.Bilinear); ts.setTexture(t1); bs = r.createBlendState(); bs.setBlendEnabled(true); bs.setSourceFunction(BlendState.SourceFunction.SourceAlpha); bs.setDestinationFunction(BlendState.DestinationFunction.One); bs.setTestEnabled(true); zs = r.createZBufferState(); zs.setWritable(false); cs = r.createCullState(); cs.setCullFace(CullState.Face.None); cs.setEnabled(true); }
/** * Load the texture linked by given file and set its wrap modes based on given values. * * @param file The <code>String</code> file location. * @param maxU The <code>Float</code> maximum u value. * @param maxV The <code>Float</code> maximum v value. * @return The loaded <code>Texture</code> instance. */ private Texture loadTexture(String file, float maxU, float maxV) { // Add a locator according to the texture string. int last = file.lastIndexOf("/") + 1; if (last < 0) last = file.length(); File path = new File(file.substring(0, last)); try { if (path != null) { SimpleResourceLocator locator = new SimpleResourceLocator(path.toURI().toURL()); ResourceLocatorTool.addResourceLocator(ResourceLocatorTool.TYPE_TEXTURE, locator); } } catch (URISyntaxException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } // Load URL. URL url = ResourceLocatorTool.locateResource(ResourceLocatorTool.TYPE_TEXTURE, file); // Load the texture and set the wrap mode. Texture map = TextureManager.loadTexture(url, this.miniFilter, this.magFilter, this.anisotropic, true); if (map != null) { if (maxU > 1) map.setWrap(Texture.WrapAxis.S, Texture.WrapMode.Repeat); else map.setWrap(Texture.WrapAxis.S, Texture.WrapMode.Clamp); if (maxV > 1) map.setWrap(Texture.WrapAxis.T, Texture.WrapMode.Repeat); else map.setWrap(Texture.WrapAxis.T, Texture.WrapMode.Clamp); } return map; }
/** creates the floor and two walls standing on the floor. */ private void createFloor(float width, float length) { Texture tex = TextureManager.loadTexture( ResourceLocatorTool.locateResource(ResourceLocatorTool.TYPE_TEXTURE, "floor.png"), false); tex.setScale(new Vector3f(10, 10, 10)); tex.setWrap(WrapMode.Repeat); TextureState tsCarpet = DisplaySystem.getDisplaySystem().getRenderer().createTextureState(); tsCarpet.setTexture(tex); StaticPhysicsNode floor = makeWall("floor", width, 0.5f, length, new Vector3f(0, -1, 0), null); floor.setRenderState(tsCarpet); rootNode.attachChild(floor); rootNode.attachChild( makeWall( "back wall", width / 2, 5, 1, new Vector3f(0, 5, -width / 2), MaterialType.GRANITE)); rootNode.attachChild( makeWall( "left wall", 1, 5, width / 2, new Vector3f(-width / 2, 5, 0), MaterialType.GRANITE)); }