| 12345678910111213141516171819202122232425262728293031 |
- <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Asciidoctor 1.5.4"><title>Technical comparison between jME2 and jME3</title><link rel="stylesheet" href="./asciidoctor.css">
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
- <link rel="stylesheet" href="./coderay-asciidoctor.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css"></head><body class="article toc2 toc-left"><div id="header"><div id="toolbar"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/src/docs/asciidoc/compare-jme2-jme3.adoc"><i class="fa fa-pencil-square" aria-hidden="true"></i></a><a href="https://github.com/jMonkeyEngine/wiki/new/master/src/docs/asciidoc/"><i class="fa fa-plus-square" aria-hidden="true"></i></a><input dir="auto" style="position: relative; vertical-align: top;" spellcheck="false" autocomplete="off" class="searchbox__input aa-input" id="doc-search" name="search" placeholder="Search in the doc" required="required" type="search"></div><h1>Technical comparison between jME2 and jME3</h1><div class="details"><span class="author" id="author"></span><br><span id="revnumber">version ,</span> <span id="revdate">2016/03/17 20:48</span></div><div id="toc" class="toc2"><div id="toctitle">Table of Contents</div><ul class="sectlevel1"><li><a href="#shaders">Shaders?</a></li><li><a href="#resource-management">Resource management?</a></li><li><a href="#input-handling">Input handling?</a></li><li><a href="#gl-object-handling">GL Object handling?</a></li><li><a href="#collision-picking">Collision/Picking?</a></li><li><a href="#native-library-handling">Native library handling?</a></li><li><a href="#post-processing">Post processing?</a></li><li><a href="#shadow-effects">Shadow effects?</a></li><li><a href="#geometry-handling">Geometry handling?</a></li><li><a href="#scene-graph-updates">Scene graph updates?</a></li><li><a href="#renderstate-material">RenderState/Material</a></li><li><a href="#support-for-fixed-function-old-gpus">Support for fixed-function/old gpus?</a></li><li><a href="#renderer-capabilities">Renderer capabilities?</a></li><li><a href="#math-object-pooling-vector-matrix-etc">Math object pooling (Vector, Matrix, etc)?</a></li><li><a href="#text">Text?</a></li><li><a href="#user-interface">User interface?</a></li><li><a href="#animation">Animation?</a></li><li><a href="#spatial-partitioning">Spatial partitioning?</a></li><li><a href="#model-formats">Model formats?</a></li><li><a href="#import-export">Import/Export?</a></li><li><a href="#physics">Physics?</a></li><li><a href="#canvas-support">Canvas support?</a></li><li><a href="#particles">Particles?</a></li><li><a href="#terrain">Terrain?</a></li></ul></div></div><div id="content"><div class="sect1"><h2 id="shaders">Shaders?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Shaders are integrated in the core and material system. JME3 supports shader libraries and permutations through defines. User-friendly post-processor filters, scene processors, and <a href="jme3/advanced/jme3_shadernodes.html">shader node system</a> (you don’t need to know shaders to be able to use them).</p></li><li><p>jME2: Full access to shader support through a RenderState, requires user to know and understand shaders. No support for libraries or permutations.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="resource-management">Resource management?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Integrated in core. All data loaded from files is cached inside AssetManager. User customizable. Supports threaded loading. Can load from ZIP/JAR files on the local harddrive and on an HTTP server.</p></li><li><p>jME2: Only textures are managed in TextureManager. ResourceLocatorTool is used for locating resources.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="input-handling">Input handling?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Designed for games. Abstracting keyboard, mouse and joystick into a single, binding based interface. Low level interface available for <abbr title="Graphical User Interface">GUI</abbr> access.</p></li><li><p>jME2: Layer over keyboard, mouse and joystick. Main input interface (InputManager) can cause bloat in user code. Binding system available separately through darkfrog’s input binding system.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="gl-object-handling">GL Object handling?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Unused GL objects are deleted when they are garbage collected by Java.</p></li><li><p>jME2: All objects are leaked unless manually cleaned up by the user.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="collision-picking">Collision/Picking?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: BIH (Bounding interleaved hierarchy) for static mesh picking and collision. Supports Volume vs. Tri collision.</p></li><li><p>jME2: Red-black tree over entire mesh data, less efficient collision than BIH but faster generation for animated objects. Supports Tri vs. Tri collision but not Volume vs. Tri which is more commonly used.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="native-library-handling">Native library handling?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Copies natives and loads them at runtime.</p></li><li><p>jME2: None, requires user to specify java.library.path property.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="post-processing">Post processing?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: HDR/Tonemapping, SSAO, Bloom, Radial Blur, Light Scattering, CartoonEdge.</p></li><li><p>jME2: Bloom, Basic Motion Blur</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="shadow-effects">Shadow effects?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Built in the core. Customizable shadow map method, supports basic and PSSM methods.</p></li><li><p>jME2: ShadowedRenderPass for stencil shadows, issues if camera goes inside shadow volume. DirectionalShadowMapPass for basic shadow mapping.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="geometry-handling">Geometry handling?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Geometry is a scene graph element, contains a Mesh object. Meshes contain VertexBuffers which specify # of components, type, float/int buffer. This allows a single mesh to be shared along many scene graph elements. Supports features like Level of Detail and animation internally.</p></li><li><p>jME2: Geometry/TriMesh a scene graph element contains float buffers and int buffers, VBO only supports static models, custom attributes are specified manually via GLSLShaderDataLogic and do not work if VBO is used.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="scene-graph-updates">Scene graph updates?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Refresh flags prevent unneeded scene updates.</p></li><li><p>jME2: All data updated in updateGeometricState. Every call updates entire scene graph, locking mechanism is used to reduce unneeded updates but requires used intervention.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="renderstate-material">RenderState/Material</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Only at leafs. Scriptable material system is used. materials contain techniques which contain shader & render state. Shader is customized with defines specified in material instance (by user). This is a data-driven approach to materials.</p></li><li><p>jME2: Each scene graph element contains an array of RenderStates. They are combined and stored in the leafs. No data-driven solution.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="support-for-fixed-function-old-gpus">Support for fixed-function/old gpus?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Supported via FixedFunc bindings in shader source.</p></li><li><p>jME2: Full support.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="renderer-capabilities">Renderer capabilities?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Queriable through cap system.</p></li><li><p>jME2: Queriable through the Renderer and the various renderstates.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="math-object-pooling-vector-matrix-etc">Math object pooling (Vector, Matrix, etc)?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: ThreadLocal-based system, defined as instance variables accessible by any class. Assertion-based “locking is used to prevent data corruption.</p></li><li><p>jME2: static declarations (kills multithreading in these classes) or no pooling at all.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="text">Text?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: AngelCode bitmap text</p></li><li><p>jME2: Fixed-length font, 3D text, AngelCode bitmap text</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="user-interface">User interface?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Simple text and ortho built-in, NiftyGui integration can be used for more advanced user interface.</p></li><li><p>jME2: Only simple text and ortho. jME-desktop (not working well under MacOS X), external libs available (FengGUI, GBUI, NiftyGui).</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="animation">Animation?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: OgreXML-based animation system with many features. Software skinning and hardware skinning are supported.</p></li><li><p>jME2: Too many systems, creating a big mess. jME-xml and collada use one system, md2/md3 use another, milkshape models use another, ogrexml uses another and md5 uses another.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="spatial-partitioning">Spatial partitioning?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: None.</p></li><li><p>jME2: None.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="model-formats">Model formats?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Ogre3D Mesh.XML and OBJ.</p></li><li><p>jME2: Static/VertexAnim: ase, obj, 3ds, md2, md3, ms3d, x3d. Skeleton: (broken) collada, ogre3d, jme-xml (md5 as a seperate lib)</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="import-export">Import/Export?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Same as jME2. Don’t fix what’s not broken.</p></li><li><p>jME2: Input/Output capsules and Savable. Binary and XML.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="physics">Physics?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Full JBullet integration.</p></li><li><p>jME2: External libs available: jME-physics, jbullet-jme, SimplePhysics.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="canvas-support">Canvas support?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Yes.</p></li><li><p>jME2: Yes, although the <abbr title="Application Programming Interface">API</abbr> could have been a little less convoluted.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="particles">Particles?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Yes.</p></li><li><p>jME2: Yes but <abbr title="Application Programming Interface">API</abbr> could be a little less convoluted.</p></li></ul></div></div></div>
- <div class="sect1"><h2 id="terrain">Terrain?</h2><div class="sectionbody"><div class="ulist"><ul><li><p>jME3: Image based heightmap, supports dynamic terrain loading, geomipmapping (LOD), and texture splatting. Can import Ogre3D dotScene files for non-heightmap terrain.</p></li><li><p>jME2: Image based or randomly generated heightmap. Quadtree support.</p></li></ul></div></div></div></div><div id="footer"><div id="footer-text">Version <br>Last updated 2018-04-17 20:42:10 +00:00</div></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.js"></script><script>docsearch({
- apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
- indexName: 'jmonkeyengine',
- inputSelector: '#doc-search',
- debug: false // Set debug to true if you want to inspect the dropdown
- });</script></body></html>
|