We can apply texture images to materials.
First some application settings are changed, such as the title. We also disable the display of stats and fps. We had earlier used a different method.
// *** 1. Start (Application settings, start) AppSettings setting= new AppSettings(true); setting.setTitle("Brick Texture!"); JMonkey26 app = new JMonkey26(); app.setDisplayFps(false); app.setDisplayStatView(false); app.setSettings(setting); app.start(); // *** 1. End
The background is set as white. A box of dimension 2 by 2 by 2 is created. The material is unshaded. It next obtains a texture.
// *** 2. Start (Background, box, material) viewPort.setBackgroundColor(ColorRGBA.White); Box b = new Box(1, 1, 1); Geometry geom = new Geometry("Box", b); Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); // *** 2. End
The texture provides a color map so it is not a single color. The file 'brick.jpg' is copied to the Interface folder in the project.
// *** 3. Start (Texture) Texture tex = assetManager.loadTexture("Interface/brick.jpg"); mat.selectTechnique("Default", renderManager); mat.setColor("Color", ColorRGBA.White); mat.setTexture("ColorMap", tex); geom.setMaterial(mat); // *** 3. End
In the simpleUpdate, which is run for every frame, the rotation angle is slightly changed, randomly in either x, y, or z direction.
// *** 4. Start (Random Rotate) switch (FastMath.nextRandomInt(0, 2)) { case 0: rootNode.rotate(30*tpf*FastMath.DEG_TO_RAD,0,0); break; case 1: rootNode.rotate(0, 30*tpf*FastMath.DEG_TO_RAD, 0); break; case 2: rootNode.rotate(0,0,30*tpf*FastMath.DEG_TO_RAD); break; } // *** 4. End
// JMonkey26.java package mygame; import com.jme3.app.SimpleApplication; import com.jme3.material.Material; import com.jme3.math.ColorRGBA; import com.jme3.math.FastMath; import com.jme3.renderer.RenderManager; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.system.AppSettings; import com.jme3.texture.Texture; public class JMonkey26 extends SimpleApplication { public static void main(String[] args) { // *** 1. Start (Application settings, start) AppSettings setting= new AppSettings(true); setting.setTitle("Brick Texture!"); JMonkey26 app = new JMonkey26(); app.setDisplayFps(false); app.setDisplayStatView(false); app.setSettings(setting); app.start(); // *** 1. End } @Override public void simpleInitApp() { flyCam.setEnabled(false); // *** 2. Start (Background, box, material) viewPort.setBackgroundColor(ColorRGBA.White); Box b = new Box(1, 1, 1); Geometry geom = new Geometry("Box", b); Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); // *** 2. End // *** 3. Start (Texture) Texture tex = assetManager.loadTexture("Interface/brick.jpg"); mat.selectTechnique("Default", renderManager); mat.setColor("Color", ColorRGBA.White); mat.setTexture("ColorMap", tex); geom.setMaterial(mat); // *** 3. End rootNode.attachChild(geom); } @Override public void simpleUpdate(float tpf) { // *** 4. Start (Random Rotate) switch (FastMath.nextRandomInt(0, 2)) { case 0: rootNode.rotate(30*tpf*FastMath.DEG_TO_RAD,0,0); break; case 1: rootNode.rotate(0, 30*tpf*FastMath.DEG_TO_RAD, 0); break; case 2: rootNode.rotate(0,0,30*tpf*FastMath.DEG_TO_RAD); break; } // *** 4. End } @Override public void simpleRender(RenderManager rm) { //TODO: add render code } }
Output:
No comments:
Post a Comment