/** This method adds lighting to the game world. */ private void setupLights() { // Add simple light so we can see the world com.jme3.light.DirectionalLight sun = new com.jme3.light.DirectionalLight(); sun.setColor(com.jme3.math.ColorRGBA.White.mult(0.5f)); sun.setDirection(new com.jme3.math.Vector3f(-0.2f, -1.0f, -0.2f)); rootNode.addLight(sun); // Add ambient light for a more realistic look com.jme3.light.AmbientLight al = new com.jme3.light.AmbientLight(); al.setColor(com.jme3.math.ColorRGBA.White.mult(2.0f)); rootNode.addLight(al); }
Node createDebugGeometry() { Line l = new Line(from.getPlanet().getPosition(), to.getPlanet().getPosition()); line = new Geometry("Line #" + from.getPlanet().getID() + " to #" + to.getPlanet().getID(), l); Material material = new Material( SolarWarsApplication.getInstance().getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); Player p = from.getPlanet().getOwner(); ColorRGBA c; if (p == null) { c = ColorRGBA.White.clone(); c.a = 0.5f; material.setColor("Color", c); } else { c = p.getColor(); c.a = 0.5f; material.setColor("Color", c); } material.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha); line.setMaterial(material); createLabel(); Node lineNode = new Node(line.getName() + "_Node"); lineNode.attachChild(line); lineNode.attachChild(label); // Vector3f pos = to.getPlanet().getPosition(). // subtract(from.getPlanet().getPosition()); // lineNode.setLocalTranslation(pos.mult(0.5f)); return lineNode; }
public void simpleInitApp() { bulletAppState = new BulletAppState(); stateManager.attach(bulletAppState); flyCam.setMoveSpeed(100); setupKeys(); this.cam.setFrustumFar(2000); DirectionalLight dl = new DirectionalLight(); dl.setColor(ColorRGBA.White.clone().multLocal(2)); dl.setDirection(new Vector3f(-1, -1, -1).normalize()); rootNode.addLight(dl); AmbientLight am = new AmbientLight(); am.setColor(ColorRGBA.White.mult(2)); rootNode.addLight(am); // load the level from zip or http zip if (useHttp) { assetManager.registerLocator( "http://jmonkeyengine.googlecode.com/files/quake3level.zip", HttpZipLocator.class.getName()); } else { assetManager.registerLocator("basic.scene", ZipLocator.class.getName()); } // create the geometry and attach it MaterialList matList = (MaterialList) assetManager.loadAsset("Scene.material"); OgreMeshKey key = new OgreMeshKey("main.meshxml", matList); gameLevel = (Node) assetManager.loadAsset(key); gameLevel.setLocalScale(0.1f); // add a physics control, it will generate a MeshCollisionShape based on the gameLevel gameLevel.addControl(new RigidBodyControl(0)); player = new PhysicsCharacter(new SphereCollisionShape(5), .01f); player.setJumpSpeed(20); player.setFallSpeed(30); player.setGravity(30); player.setPhysicsLocation(new Vector3f(60, 10, -60)); rootNode.attachChild(gameLevel); getPhysicsSpace().addAll(gameLevel); getPhysicsSpace().add(player); }
/** * This method sets up the Node structure for Pot objects. * * @param parent The parent node of the PotNode. */ private void setupPots(Node parent) { CustomNode potNode = new CustomNode("PotNode"); // Pots are too light by default. A reverse ambient light fixes that AmbientLight al; al = new AmbientLight(); al.setColor(ColorRGBA.White.mult(-1.5f)); potNode.addLight(al); parent.attachChild(potNode); }
private void setupEnvironments() { // カメラ設定 cam.setFrustumPerspective(80f, 1f, 1f, 1000f); cam.setLocation(new Vector3f(0, 1.5f, 10)); // cam.lookAt(new Vector3f(0, 1.6f, 0), Vector3f.UNIT_Y); flyCam.setDragToRotate(true); // ライティング DirectionalLight dl = new DirectionalLight(); dl.setColor(ColorRGBA.White.mult(3.0f)); dl.setDirection(Vector3f.UNIT_XYZ.negate()); rootNode.addLight(dl); // マテリアル設定 Material textureMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); textureMat.setTexture("ColorMap", assetManager.loadTexture("myAssets/Textures/woodFloor.jpg")); Material whitemat = assetManager.loadMaterial("Common/Materials/WhiteColor.j3m"); // 床面 Box floor = new Box(Vector3f.ZERO, 20.0f, 0.01f, 20.0f); Geometry floorGeom = new Geometry("Floor", floor); floorGeom.setMaterial(textureMat); floorGeom.setLocalTranslation(0, 0, 0); rootNode.attachChild(floorGeom); // 壁面 wallGeom[0] = new Geometry("Wall1", new Box(Vector3f.ZERO, 20f, 4f, 0.1f)); wallGeom[1] = new Geometry("Wall2", new Box(Vector3f.ZERO, 20f, 4f, 0.1f)); wallGeom[2] = new Geometry("Wall3", new Box(Vector3f.ZERO, 20f, 4f, 0.1f)); wallGeom[0].setMaterial(whitemat); wallGeom[1].setMaterial(whitemat); wallGeom[2].setMaterial(whitemat); wallGeom[0].setLocalTranslation(0, 4, -2); wallGeom[1].setLocalTranslation(-20, 4, 0); wallGeom[2].setLocalTranslation(20, 4, 0); wallGeom[1].rotate(0, (float) (Math.PI / 2f), 0); wallGeom[2].rotate(0, (float) (Math.PI / 2f), 0); rootNode.attachChild(wallGeom[0]); rootNode.attachChild(wallGeom[1]); rootNode.attachChild(wallGeom[2]); // 女性をランダムに追加 for (int i = 0; i < girl.length; i++) { girl[i] = assetManager.loadModel("myAssets/Models/WalkingGirl/WalkingGirl.obj"); girlPos[i] = new Vector3f((float) (Math.random() * 16.0f - 8f), 0, (float) (Math.random() * 8f)); // 移動スピードをランダムに girlSpeed[i] = (float) (Math.random() * -0.02f) + 0.01f; if (girlSpeed[i] < 0) { girl[i].rotate(0, (float) (-Math.PI / 2.0f), 0); } else { girl[i].rotate(0, (float) (Math.PI / 2.0f), 0); } girl[i].setLocalTranslation(girlPos[i]); this.rootNode.attachChild(girl[i]); } }
protected void makeLight() { AmbientLight al = new AmbientLight(); al.setColor(ColorRGBA.White.mult(2)); reflectNode.addLight(al); DirectionalLight dl1 = new DirectionalLight(); dl1.setDirection(new Vector3f(0.98f, -0.98f, 0.94f).normalizeLocal()); dl1.setColor(new ColorRGBA(0.965f, 0.949f, 0.772f, 1f).mult(0.7f)); reflectNode.addLight(dl1); }
@Override public void setUpLight() { AmbientLight al = new AmbientLight(); al.setColor(ColorRGBA.White.mult(1.3f)); app.getRootNode().addLight(al); sun = new DirectionalLight(); sun.setColor(ColorRGBA.White); sun.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal()); app.getRootNode().addLight(sun); }
public void simpleInitApp() { renderManager.setAlphaToCoverage(true); cam.setLocation(new Vector3f(0.14914267f, 0.58147097f, 4.7686534f)); cam.setRotation(new Quaternion(-0.0044764364f, 0.9767943f, 0.21314798f, 0.020512417f)); // cam.setLocation(new Vector3f(2.0606942f, 3.20342f, 6.7860126f)); // cam.setRotation(new Quaternion(-0.017481906f, 0.98241085f, -0.12393151f, // -0.13857932f)); viewPort.setBackgroundColor(ColorRGBA.DarkGray); Quad q = new Quad(20, 20); q.scaleTextureCoordinates(Vector2f.UNIT_XY.mult(5)); Geometry geom = new Geometry("floor", q); Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m"); geom.setMaterial(mat); geom.rotate(-FastMath.HALF_PI, 0, 0); geom.center(); geom.setShadowMode(ShadowMode.Receive); rootNode.attachChild(geom); // create the geometry and attach it Spatial teaGeom = assetManager.loadModel("Models/Tree/Tree.mesh.j3o"); teaGeom.setQueueBucket(Bucket.Transparent); teaGeom.setShadowMode(ShadowMode.Cast); makeToonish(teaGeom); AmbientLight al = new AmbientLight(); al.setColor(ColorRGBA.White.mult(2)); rootNode.addLight(al); DirectionalLight dl1 = new DirectionalLight(); dl1.setDirection(new Vector3f(1, -1, 1).normalizeLocal()); dl1.setColor(new ColorRGBA(0.965f, 0.949f, 0.772f, 1f).mult(0.7f)); rootNode.addLight(dl1); DirectionalLight dl = new DirectionalLight(); dl.setDirection(new Vector3f(-1, -1, -1).normalizeLocal()); dl.setColor(new ColorRGBA(0.965f, 0.949f, 0.772f, 1f).mult(0.7f)); rootNode.addLight(dl); rootNode.attachChild(teaGeom); FilterPostProcessor fpp = new FilterPostProcessor(assetManager); CartoonEdgeFilter toon = new CartoonEdgeFilter(); toon.setEdgeWidth(0.5f); toon.setEdgeIntensity(1.0f); toon.setNormalThreshold(0.8f); fpp.addFilter(toon); viewPort.addProcessor(fpp); }
private void createLavaQuad() { Quad quad = new Quad(512, 512, true); Geometry geom = new Geometry("lava-terrain", quad); Material lavaMat = getAssetManager().loadMaterial("Materials/LavaTerrain.j3m"); geom.setMaterial(lavaMat); ((Node) getWorld().getWorldRoot().getChild("terrain")).attachChild(geom); geom.lookAt(Vector3f.UNIT_Y, Vector3f.UNIT_X); geom.setLocalTranslation(-256, -2, -256); AmbientLight ambientLight = new AmbientLight(); ambientLight.setColor(ColorRGBA.White.mult(0.3f)); getTerrainNode().getParent().addLight(ambientLight); }
// シーンを定義 private void setupScene() { // カメラの位置、向き、移動速度を設定 cam.setLocation(new Vector3f(0.0f, 1.6f, 24.0f)); cam.lookAt(new Vector3f(0f, 1.6f, 0f), Vector3f.UNIT_Y); flyCam.setMoveSpeed(5); flyCam.setDragToRotate(true); // 空を追加 Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); Spatial sky = SkyFactory.createSky(assetManager, west, east, north, south, up, down); rootNode.attachChild(sky); // 床面を生成 Material floor_mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); floor_mat.setColor("Color", ColorRGBA.Gray); Box floor = new Box(Vector3f.ZERO, 1500f, 0.01f, 1500f); Geometry floorGeom = new Geometry("Floor", floor); floorGeom.setMaterial(floor_mat); rootNode.attachChild(floorGeom); // 照明 DirectionalLight sun = new DirectionalLight(); sun.setColor(ColorRGBA.White.mult(3.0f)); sun.setDirection(new Vector3f(-.5f, -.5f, -.5f).normalizeLocal()); rootNode.addLight(sun); // 女性を追加 Spatial girl = assetManager.loadModel("myAssets/Models/WalkingGirl/WalkingGirl.obj"); girl.rotate(0, (float) (Math.PI), 0); girl.setLocalTranslation(0f, 0f, 20f); this.rootNode.attachChild(girl); }
public void simpleInitApp() { DirectionalLight dl = new DirectionalLight(); dl.setDirection(new Vector3f(-1, -1, -1).normalizeLocal()); rootNode.addLight(dl); AmbientLight al = new AmbientLight(); al.setColor(ColorRGBA.White.mult(0.6f)); rootNode.addLight(al); // model = (Node) assetManager.loadModel("Models/Sinbad/Sinbad.mesh.xml"); Spatial s = assetManager.loadModel(MODEL); if (s instanceof Node) { model = (Node) s; } else { model = new Node(); model.attachChild(s); } BoundingBox b = ((BoundingBox) model.getWorldBound()); model.setLocalScale(1.2f / (b.getYExtent() * 2)); // model.setLocalTranslation(0,-(b.getCenter().y - b.getYExtent())* model.getLocalScale().y, // 0); for (Spatial spatial : model.getChildren()) { if (spatial instanceof Geometry) { Geometry geom = (Geometry) spatial; Material mat = geom.getMaterial(); mat.setTransparent(true); mat.getAdditionalRenderState().setAlphaTest(true); mat.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha); geom.setQueueBucket(RenderQueue.Bucket.Transparent); listGeoms.add(geom); } } ChaseCamera chaseCam = new ChaseCamera(cam, inputManager); model.addControl(chaseCam); chaseCam.setLookAtOffset(b.getCenter()); chaseCam.setDefaultDistance(5); chaseCam.setMinVerticalRotation(-FastMath.HALF_PI + 0.01f); chaseCam.setZoomSensitivity(0.5f); // ch = model.getControl(AnimControl.class).createChannel(); // ch.setAnim("Wave"); SkeletonControl c = model.getControl(SkeletonControl.class); if (c != null) { c.setEnabled(false); } reductionvalue = 0.80f; lodLevel = 1; // for (final Geometry geometry : listGeoms) { // LodGenerator lodGenerator = new LodGenerator(geometry); // lodGenerator.bakeLods(LodGenerator.TriangleReductionMethod.PROPORTIONAL, // reductionvalue); // geometry.setLodLevel(lodLevel); // // } rootNode.attachChild(model); flyCam.setEnabled(false); guiFont = assetManager.loadFont("Interface/Fonts/Default.fnt"); hudText = new BitmapText(guiFont, false); hudText.setSize(guiFont.getCharSet().getRenderedSize()); hudText.setText(computeNbTri() + " tris"); hudText.setLocalTranslation(cam.getWidth() / 2, hudText.getLineHeight(), 0); guiNode.attachChild(hudText); inputManager.addListener( new ActionListener() { public void onAction(String name, boolean isPressed, float tpf) { if (isPressed) { if (name.equals("plus")) { // lodLevel++; // for (Geometry geometry : listGeoms) { // if (geometry.getMesh().getNumLodLevels() <= lodLevel) // { // lodLevel = 0; // } // geometry.setLodLevel(lodLevel); // } // jaimeText.setText(computeNbTri() + " tris"); reductionvalue += 0.05f; updateLod(); } if (name.equals("minus")) { // lodLevel--; // for (Geometry geometry : listGeoms) { // if (lodLevel < 0) { // lodLevel = geometry.getMesh().getNumLodLevels() - // 1; // } // geometry.setLodLevel(lodLevel); // } // jaimeText.setText(computeNbTri() + " tris"); reductionvalue -= 0.05f; updateLod(); } if (name.equals("wireFrame")) { wireFrame = !wireFrame; for (Geometry geometry : listGeoms) { geometry.getMaterial().getAdditionalRenderState().setWireframe(wireFrame); } } } } private void updateLod() { reductionvalue = FastMath.clamp(reductionvalue, 0.0f, 1.0f); makeLod(LodGenerator.TriangleReductionMethod.PROPORTIONAL, reductionvalue, 1); } }, "plus", "minus", "wireFrame"); inputManager.addMapping("plus", new KeyTrigger(KeyInput.KEY_ADD)); inputManager.addMapping("minus", new KeyTrigger(KeyInput.KEY_SUBTRACT)); inputManager.addMapping("wireFrame", new KeyTrigger(KeyInput.KEY_SPACE)); }