# JME 3 - API / Feature Mapping

This page provides a quick answer to the questions “I want my game to do X, where do I find that in jME 3 ??”

Knowing exactly what you are looking for allows you to search more efficiently, find documentation more quickly, and ask clearer questions on the
. This intermediate page assumes that you already went through the beginner tutorials. Feel free to add APIs, tutorials and javadoc links that helped you understand and use a feature!

## Applications and SceneGraph

How do I…? | Use this JME 3 Feature! | Learn more here…
--- | --- | ---
Start with a preconfigured game | com.jme3.app.SimpleApplication | Hello SimpleApplication
Make an object appear in the scene | Attach nodes and geometries to the rootNode: rootNode.attachChild(geo); com.jme3.scene.Node, com.jme3.scene.Geometry node.setCullHint(CullHint.Never); | The Scene Graph Hello Asset Hello Node
Make an object disappear from the scene | Detach nodes and geometries from the rootNode: rootNode.detachChild(geo); node.setCullHint(CullHint.Always); | The Scene Graph Hello Asset Hello Node
Use third-person view | Use default camera `cam` com.jme3.renderer.Camera | ChaseCam WIP
Use first-person view | Use camera `flyCam` com.jme3.input.FlyByCamera | Hello Collision
Increase camera speed | `flyCam.setMoveSpeed(50f);` | –
Only draw outline of the scene | Use a wireframe material, e.g. for debugging. | Debugging
Change the background color | Call viewPort.setBackgroundColor(ColorRGBA.Blue); | N/A
Customize the applicaton class | Extend com.jme3.app.SimpleApplication (or com.jme3.app.Application) and set Application Settings | SimpleApplication AppSettings
Disable the logger output | Logger.getLogger(””).setLevel(Level.SEVERE); java.util.logging.* | Logging

## Creation and Manipulation of Objects

How do I…? | Use this JME 3 Feature! | Learn more here…
--- | --- | ---
Make simple shapes like cubes, spheres | com.jme3.scene.Geometry, com.jme3.scene.shape.* | Hello Node, Shape , ,
Create a 3-D model | Create the model in a 3-D mesh editor (for example Blender) and export it as Ogre XML mesh. | , , 3D Models
Load a 3-D model | Import asset as Ogre XML mesh. jMonkeyPlatform: Converting Ogre to j3o binary format speeds up model loading. AssetManager, com.jme3.scene.plugins.ogre.*, com.jme3.scene.Geometry | Hello Asset jMonkeyPlatform j3o converter ,
Move or turn or resize an object | Use transformations: geo.setLocalTranslation(), geo.rotate(), geo.scale() geo.updateGeometricState(); | Hello Node Spatial
Concatenate transformations (e.g. rotations around several axes in one step) | com.jme3.math.Quaternion, slerp() com.jme3.math.Transform, interpolateTransforms() | rotate, rotate_about_a_point, quaternion, math_for_dummies
Make an object move by itself | Change the geo's translation in the update phase of the main loop. Or remote-control the motion using cinematics. com.jme3.scene.Geometry, setLocalTranslation(), setWalkDirection() for physical objects. | Hello Loop Update Loop Custom Controls Cinematics ,
Manipulate the color or shininess of an object | Materials, AssetManager | Hello Material Materials Overview ,
Manipulate the surface of an object (wood vs stone vs metal etc) | Textures, AssetManager. | Hello Material Materials Overview
Make objects cast a shadow | com.jme3.shadow.BasicShadowRenderer, com.jme3.light.DirectionalLight setShadowMode() | Light and Shadow ,
Render transparent objects (glass, window panes, water, tree leaves) | Assign a transparent texture to the Material and set material.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); | Hello Material Materials Overview
Force or disable Backface culling | com.jme3.material.RenderState.FaceCullMode: Back, Front, FrontAndBack, Off e.g. material.getAdditionalRenderState(). setFaceCullMode(FaceCullMode.FrontAndBack); | N/A
Make procedural or custom shapes | com.jme3.scene.Mesh | Custom Meshes
Keep my models, textures, sound files in order | Put all assets in subdirectories of a project directory named `assets` and use the assetManager to load them. | Hello Asset, Asset Manager
Identify Named Sub-Mesh in Model | Geometry result = spatial.getName().startsWith(name); | Spatial

## Actions, Interactions, Physics

How do I…? | Use this JME 3 Feature! | Learn more here…
--- | --- | ---
Implement the game logic and game mechanics | Use Controls to define behaviours of types of Spatials. Use Application States to implement global behaviours. Use the `simpleUpdate()` loop for the remaining tests and interactions. Use Cinematics to remote-control objects in scenes. | Hello Loop Update Loop Custom Controls Application States Cinematics
Let players interact by pressing keyboard keys | com.jme3.input.KeyInput, com.jme3.input.binding.BindingListener | Hello Input Input Handling
Let players interact by clicking, e.g. picking up objects, opening doors, shooting | Intersect a Ray from the player with the Bounding Volume of the target: com.jme3.bounding.*, com.jme3.math.Ray, com.jme3.collision.CollisionResults. | Hello Picking Collision and Intersection
Animate objects and characters | Create an animated OgreMesh model with Bones in a 3-D editor (e.g. Blender). com.jme3.animation.* | Hello Animation Animation ,
Keep players walking on floors of scenes | Collision detection – raycasting or physics. | Hello Collision Physics
Prevent players from walking through walls in scenes | Collision detection using physics and bounding volumes. com.jme3.bullet.*, CapsuleCollisionShape / CompoundCollisionShape, PhysicsCharacterNode / PhysicsNode geo.setModelBound(); geo.updateModelBound(); | Hello Collision Physics
Let balls, cars, etc bounce off obstacles and roll on floors | Use physics nodes and bounding volumes: com.jme3.bounding.*, com.jme3.bullet.collisions, com.jme3.bullet.nodes.PhysicsNode etc geo.setModelBound(); geo.updateModelBound(); | Hello Physics Physics ,
Steer cars, motorcycles, etc | Use physics characters and vehicles: com.jme3.bullet.*, PhysicsCharacterNode, PhysicsVehicleNode | Vehicles , (Press HUJK keys to steer, spacebar to jump.)
Let an object swing like a pendulum or chain links | Use physics joints: com.jme3.bullet.joints.PhysicsHingeJoint | Hinges and Joints (Press HK keys to turn, spacebar to swing.)

## GUI Display

How do I…? | Use this JME 3 Feature! | Learn more here…
--- | --- | ---
Get rid of default debug display (fps etc) in SimpleApplication | guiNode.detachAllChildren(); | N/A
Display text (score, health), flat mini-maps or status icons | Attach a picture to the orthogonal `guiNode` to create a heads-up display ( ). com.jme3.font.*, com.jme3.ui.Picture. guiNode.attachChild() | HUD ,
Display buttons to let the player switch between the game/settings/score screens | Nifty GUI | Nifty GUI

## Environment Effects: Sound, Landscape

How do I…? | Use this JME 3 Feature! | Learn more here…
--- | --- | ---
Play sounds and noises | AudioRenderer, Listener, and AudioNode from com.jme3.audio.* | Hello Audio Audio
Simulate fire, flames, smoke, explosions, swarms, dust, magic spells | Use particle emitters: com.jme3.effect.EmitterSphereShape, com.jme3.effect.ParticleEmitter | Hello Effects Particle Emitters Bloom and Glow Effects Overview ,
Simulate water, waves, reflections | com.jme3.water.* | Water Post-Processor Water
Generate a terrain | com.jme3.terrain.* | Hello Terrain Terrain
Simulate a sky | rootNode.attachChild(SkyFactory.createSky( assetManager, “Textures/Sky/Bright/BrightSky.dds”, false)); skyGeo.setQueueBucket(Bucket.Sky) | Sky

## Back-End Properties

How do I…? | Use this JME 3 Feature! | Learn more here…
--- | --- | ---
Check graphic card capabilities | com.jme3.renderer.Caps Collection<Caps> caps = renderer.getCaps(); Logger.getLogger(HelloJME3.class.getName()).log(Level.INFO, “Caps: {0}” + caps.toString()); | N/A
Optimize the heck out of the scenegraph | jme3tools.optimize.GeometryBatchFactory GeometryBatchFactory.optimize(rootNode); | N/A

view online version