JMonkey Engine
From Wikipedia, the free encyclopedia
- The correct title of this article is jMonkeyEngine. The initial letter is shown capitalized due to technical restrictions.
jMonkeyEngine (jME) is a Java scenegraph API. Its primary focus is high performance 3D gaming. jME itself is 100% Java and uses an abstraction layer for communicating natively with the platform's hardware. Currently, OpenGL via LWJGL is supported with plans for JOGL support in the near future. For sound, OpenAL and FMOD are supported. Input via the keyboard, mouse, and other controllers is also supported.
jME is an open source project based on the BSD license and is community driven.
[edit] A Brief History
jME was started in 2003 by Mark Powell (aka MojoMonkey) as a side project to see if a fully featured graphics api could be written in Java. Much of the early work on the api was inspired by David Eberly's C++ book 3D Game Engine Design. Mark was joined by Joshua Slack (aka Renanse) in late January 2004 and together over the following two years, with the help of other community contributors (see external links for full list), a commercially viable api was developed. On August 1st, 2005, Three Rings Design announced a game called Bang! Howdy built using jME. In February of 2006, NCsoft hired Mark and Joshua to continue work on Java 3d gaming technology.
[edit] Features
The most recent version of the api (point ten) was released on April 29, 2006. The following is feature list of that release:
Sample applications
- Game system allows for maintenance of the main game loop
- SimpleGame provides a quick entry point for proof of concepts
- GameState provides ability to change game states (menu, game, credits, etc)
Visual Debugger
- Can visualize normals and boundings in scene.
Bounding System
- All geometry can be enclosed in a bounding system.
- Boxes and Spheres.
Curves
- Bezier curves can be used for node controlling.
Bezier Mesh
- For smooth curved surfaces.
Effects
- Transition from on scene to another.
- Lens Flare.
- Particle System.
- Vertex and Fragment Program Support.
- Cloth Simulation.
Image Loading
- Support BMP, uncompressed TGA, DDS, JPG, PNG, GIF.
Texture System
- Supports mipmapping, environmental mapping, multitexturing.
Input System
- Robust system allows for easy creation of input actions.
Collision and Picking
- Bounding volume and triangle accuracy.
Lighting System
- Handles up to eight lights at a time with utilities for optimal light selection.
- Supports directional light, spot light and point light.
Shadow System
- Z-Pass Shadow Volumes.
Math Library
- Provides faster system for linear algebra
- Use of look up tables.
Level of Detail
- Discrete Level of Detail using a switching mechanism for fast model switching.
- Continuous Level of Detail dynamically collapses triangles of a single model.
Model Loading
- 3DS, Obj, MD2, MD3, Milkshape, ASE support.
Prebuilt Shapes
- Box, Cylinder, Cone, Disk, Hexagon, Octahedron, Dodecahedron, PQTorus, Pyramid, Quad, Arrow, Sphere and Torus support.
State System
- Minimizes OpenGL state changes.
- Allows merging of Texture and Light states in the tree.
Camera System
- Maintains camera as a separate object or a node in the scene.
- Frustum culling for efficiency.
Renderer Abstraction
- Allows for any rendering API to be implemented.
- Currently LWJGL implemented.
Render Queue
- Sorts scene elements based on Opacity. Opaque are sorted front to back and rendered first, then transparent is sorted back to front, last screen elements are sorted by z depth.
Render to Texture
- Render any scene to a texture object.
Imposters
- Render to texture used to display a single model to a texture, can be animated as slow as needed to increase frame rate.
Billboard Node
- Keeps a node facing the camera
Shader Support
- GLSL
- Vertex and Fragment Shaders (GL ARB)
Sound
- Supports OpenAL and FMod with sounds organized in a tree, similar to the Graphics.
Terrain
- Terrain blocks act as single geometry.
- Terrain Pages implements a Quad tree of Terrain blocks.
User Interface
- JMEDesktop System allows rendering of Swing components in jME scenes.