- Update SDK manual

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10104 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 12 years ago
parent 0ff6cb8fc3
commit 733ad2fdbe
  1. 1
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/core-toc.xml
  2. 33
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/application_states.html
  3. 94
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html
  4. 103
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/audio.html
  5. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/camera.html
  6. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/capture_audio_video_to_a_file.html
  7. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/cinematics.html
  8. 18
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html
  9. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/combo_moves.html
  10. 8
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html
  11. 8
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_meshes.html
  12. 31
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/debugging.html
  13. 68
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html
  14. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/endless_terraingrid.html
  15. 12
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/headless_server.html
  16. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hinges_and_joints.html
  17. 8
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hud.html
  18. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/input_handling.html
  19. 8
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html
  20. 16
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/jme3_shaders.html
  21. 20
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/light_and_shadow.html
  22. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html
  23. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/localization.html
  24. 87
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/logging.html
  25. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/making_the_camera_follow_a_character.html
  26. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/material_definitions.html
  27. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html
  28. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html
  29. 24
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/monkey_zone.html
  30. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mouse_picking.html
  31. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/multiple_camera_views.html
  32. 8
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/multithreading.html
  33. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/networking.html
  34. 12
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui.html
  35. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_interaction.html
  36. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_layout.html
  37. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_overlay.html
  38. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_scenarios.html
  39. 27
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_xml_layout.html
  40. 8
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/particle_emitters.html
  41. 121
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics.html
  42. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics_listeners.html
  43. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html
  44. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ragdoll.html
  45. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/read_graphic_card_capabilites.html
  46. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html
  47. 34
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html
  48. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/sky.html
  49. 46
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html
  50. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/swing_canvas.html
  51. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html
  52. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain_collision.html
  53. 16
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/update_loop.html
  54. 16
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/vehicles.html
  55. 31
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/walking_character.html
  56. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/water.html
  57. 14
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html
  58. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html
  59. 52
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_asset.html
  60. 26
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html
  61. 16
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html
  62. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html
  63. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html
  64. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html
  65. 22
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_material.html
  66. 36
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html
  67. 48
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_physics.html
  68. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html
  69. 22
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_simpleapplication.html
  70. 22
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html
  71. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/1.png
  72. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-0.png
  73. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-1.png
  74. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-10.png
  75. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-11.png
  76. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-12.png
  77. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-2.png
  78. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-3.png
  79. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-4.png
  80. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-5.png
  81. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-6.png
  82. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-7.png
  83. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-8.png
  84. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-9.png
  85. 616
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax.html
  86. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_2.png
  87. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_3_1.png
  88. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_4.png
  89. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_5.png
  90. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_6.png
  91. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_7.png
  92. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_8.png
  93. 18
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html
  94. 148
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html
  95. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html
  96. 109
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html
  97. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html
  98. 19
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html
  99. 24
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html
  100. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/optimization.html
  101. Some files were not shown because too many files have changed in this diff Show More

@ -47,6 +47,7 @@
<tocitem text="Filters" target="sdk.filters"/>
<tocitem text="Blender File Support" target="sdk.blender"/>
<tocitem text="Creating compatible models in Blender" target="jme3.external.blender"/>
<tocitem text="Creating compatible models in 3DS Max" target="jme3.external.3dsmax"/>
<tocitem text="Vehicle Creator" target="sdk.vehicle_creator"/>
</tocitem>
<tocitem text="Working with Materials">

@ -4,7 +4,7 @@
<p>
The <code>com.jme3.app.state.AppState</code> class is a customizable jME3 interface that allows you to control the global game logic the overall game mechanics. (To control the behaviour of a Spatial, see <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a> instead. Controls and AppStates can be used together.)
The <code>com.jme3.app.state.AppState</code> class is a customizable jME3 interface that allows you to control the global game logic ??? the overall game mechanics. (To control the behaviour of a Spatial, see <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a> instead. Controls and AppStates can be used together.)
</p>
</div>
@ -51,7 +51,7 @@ You can! This is what AppStates are there for. An AppState class is subset of (o
</li>
<li><div> a subset of other AppStates and Controls</div>
</li>
<li><div> or combinations thereof. </div>
<li><div> ??? or combinations thereof. </div>
</li>
</ul>
@ -190,7 +190,7 @@ stateDetached(asm)</td><td>The AppState knows when it is attached to, or detache
<p>
The AbstractAppState class already implements some common methods (<code>isInitialized(), setActive(), isActive()</code>) and makes creation of custom AppStates a bit easier. We recommend you extend AbstractAppState and override the remaining AppState methods: <code>initialize(), setEnabled(), cleanUp()</code>.
The AbstractAppState class already implements some common methods (<code>isInitialized(), setActive(), isActive()</code>) and makes creation of custom AppStates a bit easier. We recommend you extend AbstractAppState and override the remaining AppState methods: <code>initialize(), setEnabled(), cleanup()</code>.
</p>
<p>
@ -263,7 +263,7 @@ You define what an AppState does when Paused or Unpaused, in the <code>setEnable
<p>
The com.jme3.app.state.AppStateManager holds the list of AppStates for an application. AppStateManager ensures that activate AppStates can modify the scene graph, and that the update() loops of active AppStates is executed. There is one AppStateManager per application. You typically attach several AppStates to one AppStateManager, but the same state can only be attached once.
The com.jme3.app.state.AppStateManager holds the list of AppStates for an application. AppStateManager ensures that active AppStates can modify the scene graph, and that the update() loops of active AppStates is executed. There is one AppStateManager per application. You typically attach several AppStates to one AppStateManager, but the same state can only be attached once.
</p>
<div><table>
@ -277,19 +277,32 @@ The com.jme3.app.state.AppStateManager holds the list of AppStates for an applic
<td>getState(MyAppState.class)</td><td>Returns the first attached state that is an instance of a subclass of <code>MyAppState.class</code>.</td>
</tr>
</table></div>
<!-- EDIT12 TABLE [9730-9940] -->
<!-- EDIT12 TABLE [9728-9938] -->
<p>
The AppStateManager&#039;s <code>render(), postRender(), cleanUp()</code> methods are internal, ignore them, users never call them directly.
The AppStateManager&#039;s <code>render(), postRender(), cleanup()</code> methods are internal, ignore them, users never call them directly.
</p>
<ul>
<li><div> If a detached AppState is attached then initialize() will be called on the following render pass.</div>
</li>
<li><div> If an attached AppState is detached then cleanup() will be called on the following render pass.</div>
</li>
<li><div> If you attach an already-attached AppState then the second attach is a no-op and will return false.</div>
</li>
<li><div> If you both attach and detach an AppState within one frame then neither initialize() or cleanup() will be called, although if either is called both will be.</div>
</li>
<li><div> If you both detach and then re-attach an AppState within one frame then on the next update pass its cleanup() and initialize() methods will be called in that order.</div>
</li>
</ul>
</div>
<!-- EDIT11 SECTION "AppStateManager" [9321-10069] -->
<!-- EDIT11 SECTION "AppStateManager" [9321-10704] -->
<h2><a>Best Practices</a></h2>
<div>
</div>
<!-- EDIT13 SECTION "Best Practices" [10070-10097] -->
<!-- EDIT13 SECTION "Best Practices" [10705-10732] -->
<h3><a>Communication Among AppStates</a></h3>
<div>
@ -305,7 +318,7 @@ You can use custom accessors to get data from AppStates, to set data in AppState
<pre>this.app.getStateManager&#40;&#41;.getState&#40;MyAppState.class&#41;.doSomeCustomStuffInThisState&#40;&#41;;</pre>
</div>
<!-- EDIT14 SECTION "Communication Among AppStates" [10098-10853] -->
<!-- EDIT14 SECTION "Communication Among AppStates" [10733-11488] -->
<h3><a>Initialize Familiar Class Fields</a></h3>
<div>
@ -336,5 +349,5 @@ public class MyAppState extends AbstractAppState &#123;
&#125;</pre>
</div>
<!-- EDIT15 SECTION "Initialize Familiar Class Fields" [10854-] -->
<!-- EDIT15 SECTION "Initialize Familiar Class Fields" [11489-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:application_states?do=export_xhtmlbody">view online version</a></em></p>

@ -4,7 +4,25 @@
<p>
JME3 has an integrated an asset manager that helps you keep your project assets organized. By assets we mean media files, such as 3D models, materials, textures, scenes, shaders, sounds, and fonts. Think of the asset manager as the filesystem of your game, independent of the actual deployment platform. It also manages the appropriate managing of OpenGL objects like textures so that they are e.g. not uploaded to the graphics card multiple times when multiple models use them.
By assets we mean multi-media files, such as 3D models, materials, textures, scenes, custom shaders, music and sound files, and custom fonts. JME3 has an integrated asset manager that helps you keep your project assets organized. Think of the asset manager as the filesystem of your game, independent of the actual deployment platform. By default, store your assets in the <code>MyGame/assets/ </code> directory of your project.
</p>
<p>
Advantages of the AssetManager:
</p>
<ul>
<li><div> The paths stay the same, no matter whether the game runs on Windows, Mac, Linux, etc!</div>
</li>
<li><div> The AssetManager automatically optimizes the handling of OpenGL objects. <br/>
For example, the same textures are not uploaded to the graphics card multiple times when multiple models use them.</div>
</li>
<li><div> The <a href="/com/jme3/gde/core/docs/sdk/default_build_script.html">default build script</a> automatically bundles the contents of the <code>assets</code> directory into the executable. </div>
</li>
</ul>
<p>
Advanced users can write a custom build and packaging script, and can register custom paths to the AssetManager, but this is up to you then.
</p>
</div>
@ -25,7 +43,7 @@ See also <a href="/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html"
</p>
</div>
<!-- EDIT1 SECTION "AssetManager" [1-1167] -->
<!-- EDIT1 SECTION "AssetManager" [1-1691] -->
<h2><a>Usage</a></h2>
<div>
@ -45,7 +63,7 @@ Here is an example how you load assets using the AssetManager. This lines loads
new AssetKey&#40;&quot;Common/Materials/RedColor.j3m&quot;&#41;&#41;;</pre>
<p>
This Material is &quot;somewhere&quot; in the jME3 JAR; the default Asset Manager is configured to handle a <code>Common/</code> path correctly, so you don&#039;t have to specify the whole path when referring to built-in assets (such as default Materials).
This Material is &quot;somewhere&quot; in the jME3 JAR; the default Asset Manager is configured to handle a <code>Common/???</code> path correctly, so you don&#039;t have to specify the whole path when referring to built-in assets (such as default Materials).
</p>
<p>
@ -53,31 +71,41 @@ Additionally, you can configure the Asset Manager and add any path to its root.
</p>
</div>
<!-- EDIT2 SECTION "Usage" [1168-2325] -->
<!-- EDIT2 SECTION "Usage" [1692-2849] -->
<h2><a>Asset Directory</a></h2>
<div>
<p>
By default, jME3 searches for models in a directory named <code>assets</code>. <strong>In Java projects created with the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>, an assets folder is created by default.</strong> Using any other IDE or the command line, you have to create this assets directory as an extra step (see the Codeless Project tip below).
By default, jME3 searches for models in a directory named <code>assets</code>.
</p>
<p>
<p><div>In Java projects created with the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>, an <code>assets</code> folder is created by default in your project directory. If you are using any other IDE, or the command line, you simply create an <code>assets</code> directory manually (see the Codeless Project tip below).
</div></p>
</p>
<p>
This is our recommended directory structure for storing assets:
</p>
<pre>jMonkeyProjects/MyGame/src/... # Packages, .java source code.
jMonkeyProjects/MyGame/assets/... # The assets directory:
jMonkeyProjects/MyGame/assets/Interface/ # .font, .jpg, .png, .xml
jMonkeyProjects/MyGame/assets/MatDefs/ # .j3md
jMonkeyProjects/MyGame/assets/Materials/ # .j3m
jMonkeyProjects/MyGame/assets/Models/ # .j3o
jMonkeyProjects/MyGame/assets/Scenes/ # .j3o
jMonkeyProjects/MyGame/assets/Shaders/ # .j3f, .vert, .frag
jMonkeyProjects/MyGame/assets/Sounds/ # .ogg, .wav
jMonkeyProjects/MyGame/assets/Textures/ # .jpg, .png; also .mesh.xml+.material, .mtl+.obj, .blend (!) </pre>
<pre>jMonkeyProjects/MyGame/src/... # Packages, .java source code.
jMonkeyProjects/MyGame/assets/... # The assets directory:
jMonkeyProjects/MyGame/assets/Interface/ # .font, .jpg, .png, .xml
jMonkeyProjects/MyGame/assets/MatDefs/ # .j3md
jMonkeyProjects/MyGame/assets/Materials/ # .j3m
jMonkeyProjects/MyGame/assets/Models/ # .j3o
jMonkeyProjects/MyGame/assets/Scenes/ # .j3o
jMonkeyProjects/MyGame/assets/Shaders/ # .j3f, .vert, .frag
jMonkeyProjects/MyGame/assets/Sounds/ # .ogg, .wav
jMonkeyProjects/MyGame/assets/Textures/ # .jpg, .png; also .mesh.xml+.material, .mtl+.obj, .blend (!) </pre>
<p>
These are just the most common examples. <strong>You can rename/delete/add directories and subdirectories inside the <code>assets</code> directory</strong> in any way you like. Note however that there is no automatic refactoring for asset paths in the <acronym title="Software Development Kit">SDK</acronym>, so if you modify them late in the development process, you have to refactor all paths manually.
These subdirectories are just the most common examples.
</p>
<p>
<p><div>You can rename/delete/add (sub)directories inside the <code>assets</code> directory in any way you like. Note however that there is no automatic refactoring for asset paths in the <acronym title="Software Development Kit">SDK</acronym>, so if you modify them late in the development process, you have to refactor all paths manually.
</div></p>
</p>
<p>
@ -91,7 +119,7 @@ After the conversion, you move the .j3o file into the <code>assets/Models/</code
</p>
</div>
<!-- EDIT3 SECTION "Asset Directory" [2326-4667] -->
<!-- EDIT3 SECTION "Asset Directory" [2850-5279] -->
<h2><a>Example Code: Loading Assets</a></h2>
<div>
@ -148,7 +176,7 @@ jME3 also offers a ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, an
</p>
</div>
<!-- EDIT4 SECTION "Example Code: Loading Assets" [4668-6140] -->
<!-- EDIT4 SECTION "Example Code: Loading Assets" [5280-6752] -->
<h2><a>Common AssetManager Tasks</a></h2>
<div>
<div><table>
@ -175,9 +203,9 @@ rootNode.attachChild&#40;scene&#41;;</pre>
</td>
</tr>
</table></div>
<!-- EDIT6 TABLE [6180-7108] -->
<!-- EDIT6 TABLE [6792-7720] -->
</div>
<!-- EDIT5 SECTION "Common AssetManager Tasks" [6141-7109] -->
<!-- EDIT5 SECTION "Common AssetManager Tasks" [6753-7721] -->
<h2><a>NullPointerException: Cannot locate resource?</a></h2>
<div>
@ -200,7 +228,7 @@ java.lang.NullPointerException</pre>
</p>
<p>
If you use the default build script, <strong>original models and scenes, and ZIP files, are excluded from the distribution</strong> automatically. A stand-alone executable includes <strong>converted .j3o models and scenes only</strong>. The default build script makes sure to include existing .j3o files in the distribution, but you need to convert the models manually.
If you use the default build script, <strong>original models and scenes (.mesh.xml, .obj, .blend, .zip), are excluded</strong> from the distribution automatically. A stand-alone executable includes converted <strong>.j3o files</strong> (models and scenes) only. The default build script makes sure to bundle existing .j3o files in the distribution, but you need to remember to convert the models (from mesh.xml???&gt;.j3o, or .obj???&gt;.j3o, etc) yourself.
</p>
<p>
@ -211,28 +239,34 @@ If you use the default build script, <strong>original models and scenes, and ZIP
Before building the executable, you must use the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>&#039;s context menu action to <a href="/com/jme3/gde/core/docs/sdk/model_loader_and_viewer.html">convert 3D models to .j3o binary format</a>.
</p>
<ol>
<li><div> Open the jME3 Project in the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>.</div>
<li><div> Save your original models (.mesh.xml, .scene, .blend, or .obj files, plus textures) into <code>assets/Textures/</code>. (!)</div>
</li>
<li><div> Open the jME3 project in the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>.</div>
</li>
<li><div> Browse to the <code>assets</code> directory in the Projects window. </div>
</li>
<li><div> Right-click a .mesh.xml/.scene/.obj file, and choose &quot;convert to JME3 binary&quot;. </div>
<li><div> Right-click an original model in <code>assets/Textures/</code>, and choose &quot;Convert to JME3 binary&quot;.</div>
</li>
<li><div> The converted file appears in the same directory as the .mesh.xml file. It has the same name and a .j3o suffix. </div>
<li><div> The converted file appears in the same directory as the original file. It has the same name and a <code>.j3o</code> suffix. </div>
</li>
<li><div> Move the .j3o file into the <code>assets/Models/</code> or <code>assets/Scenes/</code> directories.</div>
<li><div> Move the .j3o file into the <code>assets/Models/</code> or <code>assets/Scenes/</code> directory.</div>
</li>
<li><div> Update the file name in the <code>load()</code> code to access the .j3o file.</div>
<li><div> Use the assetManager&#039;s <code>load()</code> method to load the <code>.j3o</code> file.</div>
</li>
</ol>
<p>
<p><div>If you load the scene from a non-.j3o ZIP file, ammend the <a href="/com/jme3/gde/core/docs/sdk/default_build_script.html">default_build_script</a> manully to copy the ZIP files into the distribution.
This ensures that the model&#039;s Texture paths keep working between your 3D mesh editor and JME3.
</p>
<p>
<p><div>If you must load custom assets from a non-.j3o ZIP file, you must manually ammend the <a href="/com/jme3/gde/core/docs/sdk/default_build_script.html">default build script</a> to copy ZIP files into your distribution. ZIPs are skipped by default.
</div></p>
</p>
</div>
<!-- EDIT7 SECTION "NullPointerException: Cannot locate resource?" [7110-8833] -->
<!-- EDIT7 SECTION "NullPointerException: Cannot locate resource?" [7722-9798] -->
<h2><a>Asset Handling For Other IDEs: Codeless Projects</a></h2>
<div>
@ -261,7 +295,7 @@ Store your assets there as described above.</div>
</li>
<li><div> Download and install the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>.</div>
</li>
<li><div> In the <acronym title="Software Development Kit">SDK</acronym>, go to File → Import Projects → External Project Assets.</div>
<li><div> In the <acronym title="Software Development Kit">SDK</acronym>, go to File ??? Import Projects ??? External Project Assets.</div>
</li>
<li><div> Select your (Eclipse or whatever) project and your assets folder in the Import Wizard.</div>
</li>
@ -282,5 +316,5 @@ Convert assets as described above.</div>
</p>
</div>
<!-- EDIT8 SECTION "Asset Handling For Other IDEs: Codeless Projects" [8834-] -->
<!-- EDIT8 SECTION "Asset Handling For Other IDEs: Codeless Projects" [9799-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:asset_manager?do=export_xhtmlbody">view online version</a></em></p>

@ -36,13 +36,13 @@ The main jME audio class to look at is <code>com.jme3.audio.AudioNode</code>. Wh
AudioNode boom = new AudioNode&#40;assetManager, &quot;Sound/boom.wav&quot;, false&#41;;</pre>
</div>
</li>
<li><div> <strong>Streamed:</strong> If it is a long file such as music or a dialog, you stream the audio. Streaming means, you load and play in parallel until the sound is done. You create a streamed sound by setting the boolean to true:<pre>AudioNode music = new AudioNode&#40;assetManager, &quot;Sound/music.wav&quot;, true&#41;;</pre>
<li><div> <strong>Streamed:</strong> If it is a long file such as music or a dialog, you stream the audio. Streaming means, you load and play in parallel until the sound is done. You cannot loop streams. You create a streamed sound by setting the boolean to true:<pre>AudioNode music = new AudioNode&#40;assetManager, &quot;Sound/music.wav&quot;, true&#41;;</pre>
</div>
</li>
</ul>
</div>
<!-- EDIT3 SECTION "Creating Audio Nodes: Streamed or Buffered" [892-1814] -->
<!-- EDIT3 SECTION "Creating Audio Nodes: Streamed or Buffered" [892-1839] -->
<h2><a>Getting AudioNode Properties</a></h2>
<div>
<div><table>
@ -59,14 +59,14 @@ AudioNode boom = new AudioNode&#40;assetManager, &quot;Sound/boom.wav&quot;, fal
<td>getPitch()</td><td>Returns the pitch. </td>
</tr>
</table></div>
<!-- EDIT5 TABLE [1857-2029] -->
<!-- EDIT5 TABLE [1882-2054] -->
<p>
Note: There are other obvious getters to poll the status of all corresponding setters listed here.
</p>
</div>
<!-- EDIT4 SECTION "Getting AudioNode Properties" [1815-2130] -->
<!-- EDIT4 SECTION "Getting AudioNode Properties" [1840-2155] -->
<h2><a>Setting AudioNode Properties</a></h2>
<div>
<div><table>
@ -74,24 +74,27 @@ Note: There are other obvious getters to poll the status of all corresponding se
<th>AudioNode Method</th><th>Usage</th>
</tr>
<tr>
<td>setVolume(1)</td><td>Sets the volume gain. 1 is the default volume, 2 is twice as loud, etc. 0 is silent/mute. </td>
<td>setTimeOffset(0.5f)</td><td>Play the sound starting at a 0.5 second offset from the beginning. Default is 0.</td>
</tr>
<tr>
<td>setPitch(1)</td><td>Makes the sound play in a higher or lower pitch. Default is 1. 2 is twice as high, .5f is half as high. </td>
</tr>
<tr>
<td>setTimeOffset(0.5f)</td><td>Play the sound starting at a 0.5 second offset from the beginning. Default is 0.</td>
<td>setVolume(1)</td><td>Sets the volume gain. 1 is the default volume, 2 is twice as loud, etc. 0 is silent/mute. </td>
</tr>
<tr>
<td>setRefDistance(50f)</td><td>The reference distance controls how far a sound can still be heard at 50% of its original volume (<em>this is assuming an exponential fall-off!</em>). A sound with a high RefDist can be heard loud over wide distances; a sound with a low refDist can only be heard when the listener is close by. Default is 10 world units.</td>
</tr>
<tr>
<td>setMaxDistance(100f)</td><td>Maximum distance the sound can be heard, in world units. Default is 20.</td>
<td>setMaxDistance(100f)</td><td> The &#039;maximum attenuation distance&#039; specifies how far from the source the sound stops growing more quiet (sounds in nature don&#039;t do that). Set this to a smaller value to keep the sound loud even at a distance; set this to higher value to let the sound fade out quickly. Default is 20 world units.</td>
</tr>
<tr>
<td>setLooping(false)</td><td>Configures the sound so that, if it is played, it plays once and stops. This is the default.</td>
<td>setLooping(false)</td><td>Configures the sound so that, if it is played, it plays once and stops. No looping is the default.</td>
</tr>
</table></div>
<!-- EDIT7 TABLE [2173-2733] -->
<!-- EDIT7 TABLE [2198-3327] -->
</div>
<!-- EDIT6 SECTION "Setting AudioNode Properties" [2131-2734] -->
<!-- EDIT6 SECTION "Setting AudioNode Properties" [2156-3328] -->
<h3><a>Looping &amp; Ambient Sounds</a></h3>
<div>
<div><table>
@ -100,16 +103,16 @@ Note: There are other obvious getters to poll the status of all corresponding se
</tr>
<tr>
<td>setPositional(false) <br/>
setDirectional(false)</td><td>All 3D effects switched off. This sound is global and comes from everywhere. Good for environmental ambient sounds and background music.</td>
setDirectional(false)</td><td>All 3D effects switched off. This sound is global and plays in headspace (it appears to come from everywhere). Good for environmental ambient sounds and background music.</td>
</tr>
<tr>
<td>setLooping(true)</td><td>Configures the sound to be a loop: When it is played, it repeats from the beginning, until stop() or pause() are called. Good for music and ambient background noises. <br/>
Looping does not work on streamed sounds! </td>
<td>setLooping(true)</td><td>Configures the sound to be a loop: After the sound plays, it repeats from the beginning, until you call stop() or pause(). Good for music and ambient background noises. <br/>
<strong>Looping does not work on streamed sounds.</strong> </td>
</tr>
</table></div>
<!-- EDIT9 TABLE [2771-3212] -->
<!-- EDIT9 TABLE [3365-3846] -->
</div>
<!-- EDIT8 SECTION "Looping & Ambient Sounds" [2735-3213] -->
<!-- EDIT8 SECTION "Looping & Ambient Sounds" [3329-3847] -->
<h3><a>Positional 3D Sounds</a></h3>
<div>
<div><table>
@ -118,20 +121,21 @@ Looping does not work on streamed sounds! </td>
</tr>
<tr>
<td>setPositional(true) <br/>
setLocalTranslation()</td><td>Activates 3D audio: The sound appears to come from a certain position, where it is loudest. Position the AudioNode in the 3D scene, or move it with mobile players or NPCs.</td>
setLocalTranslation(???)</td><td>Activates 3D audio: The sound appears to come from a certain position, where it is loudest. Position the AudioNode in the 3D scene, or move it with mobile players or NPCs.</td>
</tr>
<tr>
<td>setReverbEnabled(true)</td><td>A 3D echo effect that only makes sense to use with positional AudioNodes. The reverb effect is influenced by the environment that the audio renderer is in. See &quot;Setting Environment Properties&quot; below. </td>
<td>setReverbEnabled(true)</td><td>Reverb is a 3D echo effect that only makes sense with positional AudioNodes. Use Audio Environments to make scenes sound as if they were &quot;outdoors&quot;, or &quot;indoors&quot; in a large or small room, etc. The reverb effect is defined by the <code>com.jme3.audio.Environment</code> that the <code>audioRenderer</code> is in. See &quot;Setting Audio Environment Properties&quot; below. </td>
</tr>
</table></div>
<!-- EDIT11 TABLE [3246-3718] -->
<!-- EDIT11 TABLE [3880-4496] -->
<p>
Note: 3D sounds require an audio listener.
<p><div>Positional 3D sounds require an <code>AudioListener</code> object in the scene (representing the player&#039;s ears).
</div></p>
</p>
</div>
<!-- EDIT10 SECTION "Positional 3D Sounds" [3214-3763] -->
<!-- EDIT10 SECTION "Positional 3D Sounds" [3848-4625] -->
<h3><a>Directional 3D Sounds</a></h3>
<div>
<div><table>
@ -140,21 +144,22 @@ Note: 3D sounds require an audio listener.
</tr>
<tr>
<td>setDirectional(true) <br/>
setDirection() </td><td>Activates 3D audio: This sound can only be heard from a certain direction. Specify the direction and angle in the 3D scene if you have setDirectional() true. Use this to restrict noises that should not be heard, for example, through a wall.</td>
setDirection(???) </td><td>Activates 3D audio: This sound can only be heard from a certain direction. Specify the direction and angle in the 3D scene if you have setDirectional() true. Use this to restrict noises that should not be heard, for example, through a wall.</td>
</tr>
<tr>
<td>setInnerAngle() <br/>
setOuterAngle()</td><td>Set the angle in degrees for the directional audio. The angle is relative to the direction. Note: By default, both angles are 360° and the sound can be heard from all directions!</td>
setOuterAngle()</td><td>Set the angle in degrees for the directional audio. The angle is relative to the direction. Note: By default, both angles are 360?? and the sound can be heard from all directions!</td>
</tr>
</table></div>
<!-- EDIT13 TABLE [3797-4324] -->
<!-- EDIT13 TABLE [4659-5186] -->
<p>
Note: 3D sounds require an audio listener.
<p><div>Directional 3D sounds require an AudioListener object in the scene (representing the player&#039;s ears).
</div></p>
</p>
</div>
<!-- EDIT12 SECTION "Directional 3D Sounds" [3764-4369] -->
<!-- EDIT12 SECTION "Directional 3D Sounds" [4626-5313] -->
<h2><a>Play, Pause, Stop</a></h2>
<div>
@ -176,29 +181,29 @@ You can also start playing instances of an AudioNode. Use the <code>playInstance
<pre>myAudioNode.playInstance&#40;&#41;;</pre>
</div>
<!-- EDIT14 SECTION "Play, Pause, Stop" [4370-5074] -->
<h2><a>The Listener</a></h2>
<!-- EDIT14 SECTION "Play, Pause, Stop" [5314-6018] -->
<h2><a>The Audio Listener</a></h2>
<div>
<p>
The default listener object is the user&#039;s ear in the scene. If you use 3d audio (positional and directional sounds), you have to move the listener with the player: For example, for a first-person player, you move the listener with the camera. For a third-person player, you move the listener with the player avatar Geometry.
The default AudioListener object <code>listener</code> in <code>SimpleApplication</code> is the user&#039;s ear in the scene. If you use 3D audio (positional or directional sounds), you must move the AudioListener with the player: For example, for a first-person player, you move the listener with the camera. For a third-person player, you move the listener with the player avatar Geometry.
</p>
<pre> @Override
public void simpleUpdate&#40;float tpf&#41; &#123;
// keep the audio listener moving with the camera
// first-person: keep the audio listener moving with the camera
listener.setLocation&#40;cam.getLocation&#40;&#41;&#41;;
listener.setRotation&#40;cam.getRotation&#40;&#41;&#41;;
&#125;</pre>
</div>
<!-- EDIT15 SECTION "The Listener" [5075-5647] -->
<h2><a>Setting Environment Properties</a></h2>
<!-- EDIT15 SECTION "The Audio Listener" [6019-6655] -->
<h2><a>Setting Audio Environment Properties</a></h2>
<div>
<p>
Optionally, You can choose from the following environmental presets from <code>com.jme3.audio.Environment</code>. This presets influence subtle echo effects that evoke associations of different environments in your users. You use it together with setReverbEnabled(true) mentioned above.
Optionally, You can choose from the following environmental presets from <code>com.jme3.audio.Environment</code>. This presets influence subtle echo effects (reverb) that evoke associations of different environments in your users. That is, it makes you scene sound &quot;indoors&quot; or &quot;outdoors&quot; etc. You use Audio Environments together with <code>setReverbEnabled(true)</code> on positional AudioNodes (see above).
</p>
<div><table>
@ -221,22 +226,38 @@ Optionally, You can choose from the following environmental presets from <code>c
<td>Closet </td><td>1.00f</td><td>1.0f</td><td>1.0f</td><td>1.00f</td><td>0.15f</td><td>1.0f</td><td>0.600f</td><td>0.0025f</td><td>0.500f</td><td>0.0006f</td>
</tr>
</table></div>
<!-- EDIT17 TABLE [5971-6460] -->
<!-- EDIT17 TABLE [7098-7587] --><ol>
<li><div> Activate a Environment preset</div>
<ul>
<li><div> Either use a default, e.g. make you scene sounds like a dungeon environment: <pre>audioRenderer.setEnvironment&#40;new Environment&#40;Environment.Dungeon&#41;&#41;;</pre>
</div>
</li>
<li><div> Or activate <a href="/com/jme3/gde/core/docs/jme3/advanced/audio_environment_presets.html">custom environment settings</a> in the Environment constructor:<pre>audioRenderer.setEnvironment&#40;
new Environment&#40; density, diffusion, gain, gainHf, decayTime, decayHf,
reflGain, reflDelay, lateGain, lateDelay &#41; &#41;;</pre>
</div>
</li>
</ul>
</li>
<li><div> Activate 3D audio for certain sounds: <pre>footstepsAudio.setPositional&#40;true&#41;;
footstepsAudio.setReverbEnabled&#40;true&#41;;</pre>
</div>
</li>
</ol>
<p>
Activate the preset with setEnvironment(). E.g. in a dungeon environment:
<p><div>A sound engineer can create a custom <code>com.???jme3.???audio.Environment</code> object and specify custom environment values such as density, diffusion, gain, decay, delay??? You can find many <a href="/com/jme3/gde/core/docs/jme3/advanced/audio_environment_presets.html">examples of custom audio environment presets</a> here.
</div></p>
</p>
<pre>audioRenderer.setEnvironment&#40;new Environment&#40;Environment.Dungeon&#41;&#41;;</pre>
<p>
A sound engineer can create a custom <code>com.jme3.audio.Environment</code> object and specify custom environment factors. You can find many <a href="/com/jme3/gde/core/docs/jme3/advanced/audio_environment_presets.html">examples of audio environment presets</a> here. Activate your custom environment settings in the Environment constructor:
Advanced users find more info about OpenAL and its features here: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://connect.creativelabs.com/openal/Documentation/OpenAL%201.1%20Specification.pdf"><param name="text" value="<html><u>OpenAL 1.1 Specification</u></html>"><param name="textColor" value="blue"></object>.
</p>
<pre>audioRenderer.setEnvironment&#40;
new Environment&#40; density, diffusion, gain, gainHf, decayTime, decayHf,
reflGain, reflDelay, lateGain, lateDelay &#41; &#41;;</pre>
<p>
You can find more info about OpenAL and its advanced features here: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://connect.creativelabs.com/openal/Documentation/OpenAL%201.1%20Specification.pdf"><param name="text" value="<html><u>OpenAL 1.1 Specification</u></html>"><param name="textColor" value="blue"></object>. It depends on the hardware whether audio effects are supported (if not, you get the message <code>OpenAL EFX not available! Audio effects won&#039;t work.</code>)
<p><div>It depends on the hardware whether audio effects are supported (if not, you get the message <code>OpenAL EFX not available! Audio effects won&#039;t work.</code>)
</div></p>
</p>
<div><span>
<a href="/wiki/doku.php/tag:sound?do=showtag&amp;tag=tag%3Asound">sound</a>,
@ -245,5 +266,5 @@ You can find more info about OpenAL and its advanced features here: <object clas
</span></div>
</div>
<!-- EDIT16 SECTION "Setting Environment Properties" [5648-] -->
<!-- EDIT16 SECTION "Setting Audio Environment Properties" [6656-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:audio?do=export_xhtmlbody">view online version</a></em></p>

@ -20,7 +20,7 @@ The camera object is created with the following defaults:
</li>
<li><div> Frustum Perspective:</div>
<ul>
<li><div> Frame of view angle of 45° along the Y axis</div>
<li><div> Frame of view angle of 45?? along the Y axis</div>
</li>
<li><div> Aspect ratio of width divided by height</div>
</li>

@ -59,7 +59,7 @@ That&#039;s all!
<p><div>This way of A/V recording is still in development.
It works for all of jMonkeyEngine&#039;s test cases.
If you experience any problems or
if something isn&#039;t clear, please <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/members/bortreb/"><param name="text" value="<html><u>let me know</u></html>"><param name="textColor" value="blue"></object>. bortreb
if something isn&#039;t clear, please <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/members/bortreb/"><param name="text" value="<html><u>let me know</u></html>"><param name="textColor" value="blue"></object>. ??? bortreb
</div></p>
</p>

@ -384,7 +384,7 @@ You can extend individual CinematicEvents. The <object classid="java:org.netbean
</p>
<p>
You can also create new CinematicEvent by extending <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/cinematic/events/AbstractCinematicEvent.java"><param name="text" value="<html><u>AbstractCinematicEvent</u></html>"><param name="textColor" value="blue"></object>. An AbstractCinematicEvent implements the CinematicEvent interface and provides duration, time, speed, etc management. Look at the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/animation/TestCinematic.java"><param name="text" value="<html><u>TestCinematic.java example</u></html>"><param name="textColor" value="blue"></object> is to use this for a custom fadeIn/fadeOut effect in combination with a com.jme3.post.filters.FadeFilter.
You can also create new CinematicEvent by extending <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/cinematic/events/AbstractCinematicEvent.java"><param name="text" value="<html><u>AbstractCinematicEvent</u></html>"><param name="textColor" value="blue"></object>. An AbstractCinematicEvent implements the CinematicEvent interface and provides duration, time, speed, etc??? management. Look at the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/animation/TestCinematic.java"><param name="text" value="<html><u>TestCinematic.java example</u></html>"><param name="textColor" value="blue"></object> is to use this for a custom fadeIn/fadeOut effect in combination with a com.jme3.post.filters.FadeFilter.
</p>
</div>

@ -12,7 +12,7 @@ Non-physical collision detection is interesting because it uses less computing r
</p>
<p>
<strong>Example:</strong> One example for an optimization is a physical vehicle&#039;s wheels. You could make the wheels fully physical disks, and have jME calculate every tiny force sounds very accurate? It&#039;s total overkill and too slow for a racing game. A more performant solution is to cast four invisible rays down from the vehicle and calculate the intersections with the floor. These non-physical wheels require (in the simplest case) only four calculations per tick to achieve an effect that players can hardly distinguish from the real thing.
<strong>Example:</strong> One example for an optimization is a physical vehicle&#039;s wheels. You could make the wheels fully physical disks, and have jME calculate every tiny force ??? sounds very accurate? It&#039;s total overkill and too slow for a racing game. A more performant solution is to cast four invisible rays down from the vehicle and calculate the intersections with the floor. These non-physical wheels require (in the simplest case) only four calculations per tick to achieve an effect that players can hardly distinguish from the real thing.
</p>
</div>
@ -93,7 +93,7 @@ The following code snippet can be triggered by listeners (e.g. after an input ac
CollisionResults results = new CollisionResults&#40;&#41;;
a.collideWith&#40;b, results&#41;;
System.out.println&#40;&quot;Number of Collisions between&quot; +
a.getName&#40;&#41;+ &quot; and &quot; + b.getName&#40;&#41; &quot;: &quot; + results.size&#40;&#41;&#41;;
a.getName&#40;&#41;+ &quot; and &quot; + b.getName&#40;&#41; + &quot;: &quot; + results.size&#40;&#41;&#41;;
// Use the results
if &#40;results.size&#40;&#41; &gt; 0&#41; &#123;
// how to react when a collision was detected
@ -133,7 +133,7 @@ Knowing the distance of the collisions is useful for example when you intersect
</p>
</div>
<!-- EDIT5 SECTION "Code Sample" [3038-5573] -->
<!-- EDIT5 SECTION "Code Sample" [3038-5575] -->
<h2><a>Bounding Volumes</a></h2>
<div>
@ -147,7 +147,7 @@ jME3 computes bounding volumes for all objects. These bounding volumes are later
</p>
<p>
All fast-paced action and shooter games use BoundingVolumes as an optimization. Wrap all complex models into simpler shapes in the end, you get equally useful collision detection results, but faster. <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Bounding_volume"><param name="text" value="<html><u>More about bounding volumes...</u></html>"><param name="textColor" value="blue"></object>
All fast-paced action and shooter games use BoundingVolumes as an optimization. Wrap all complex models into simpler shapes ??? in the end, you get equally useful collision detection results, but faster. <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Bounding_volume"><param name="text" value="<html><u>More about bounding volumes...</u></html>"><param name="textColor" value="blue"></object>
</p>
<p>
@ -173,7 +173,7 @@ Supported types:
</p>
</div>
<!-- EDIT6 SECTION "Bounding Volumes" [5574-7617] -->
<!-- EDIT6 SECTION "Bounding Volumes" [5576-7619] -->
<h3><a>Usage</a></h3>
<div>
@ -186,7 +186,7 @@ For example you can use Bounding Volumes on custom meshes, or complex non-physic
mesh.updateBound&#40;&#41;;</pre>
</div>
<!-- EDIT7 SECTION "Usage" [7618-7799] -->
<!-- EDIT7 SECTION "Usage" [7620-7801] -->
<h2><a>Mesh and Scene Graph Collision</a></h2>
<div>
@ -196,7 +196,7 @@ One of the supported <code>Collidable</code>s are meshes and scene graph objects
</p>
</div>
<!-- EDIT8 SECTION "Mesh and Scene Graph Collision" [7800-8620] -->
<!-- EDIT8 SECTION "Mesh and Scene Graph Collision" [7802-8622] -->
<h2><a>Intersection</a></h2>
<div>
@ -217,7 +217,7 @@ Rays are used to perform line-of-sight calculations. This means you can detect w
<p>
<p><div>These simple but powerful ray-surface intersection tests are called Ray Casting. As opposed to the more advanced Ray Tracing technique, Ray Casting does not follow the ray&#039;s reflection after the first hit the ray just goes straight on.
<p><div>These simple but powerful ray-surface intersection tests are called Ray Casting. As opposed to the more advanced Ray Tracing technique, Ray Casting does not follow the ray&#039;s reflection after the first hit ??? the ray just goes straight on.
</div></p>
</p>
@ -237,5 +237,5 @@ TODO:
</ul>
</div>
<!-- EDIT9 SECTION "Intersection" [8621-] -->
<!-- EDIT9 SECTION "Intersection" [8623-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:collision_and_intersection?do=export_xhtmlbody">view online version</a></em></p>

@ -36,9 +36,9 @@ Copy the two classes ComboMoveExecution.java and ComboMove.java into your applic
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/combomoves/TestComboMoves.java"><param name="text" value="<html><u>TestComboMoves.java</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/combomoves/ComboMoveExecution.java"><param name="text" value="<html><u>ComboMoveExecution.java</u></html>"><param name="textColor" value="blue"></object> required</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/combomoves/ComboMoveExecution.java"><param name="text" value="<html><u>ComboMoveExecution.java</u></html>"><param name="textColor" value="blue"></object> ??? required</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/combomoves/ComboMove.java"><param name="text" value="<html><u>ComboMove.java</u></html>"><param name="textColor" value="blue"></object> required</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/combomoves/ComboMove.java"><param name="text" value="<html><u>ComboMove.java</u></html>"><param name="textColor" value="blue"></object> ??? required</div>
</li>
</ul>
@ -117,7 +117,7 @@ Combo step is recorded if A and B are both released.</td>
</tr>
<tr>
<td>press(&quot;A&quot;).notPress(&quot;B&quot;).timeElapsed(0.11f).done();</td><td>Combo step is recorded a certain time after A and not B is entered. <br/>
etc, etc </td>
etc, etc ???</td>
</tr>
<tr>
<td>setPriority(0.5f);</td><td>If there is an ambiguity, a high-priority combo will trigger instead of a low-priority combo. This prevents that a similar looking combo step &quot;hijacks&quot; another Combo. Use only once per ComboMove.</td>

@ -3,11 +3,11 @@
<div>
<p>
A <code>com.jme3.scene.control.Control</code> is a customizable jME3 interface that allows you to cleanly steer the behaviour of game entities (Spatials), such as artificially intelligent behaviour in NPCs, traps, automatic alarms and doors, animals and pets, self-steering vehicles or platforms anything that moves and interacts. Several instances of customs Controls together implement the behaviours of a type of Spatial.
A <code>com.jme3.scene.control.Control</code> is a customizable jME3 interface that allows you to cleanly steer the behaviour of game entities (Spatials), such as artificially intelligent behaviour in NPCs, traps, automatic alarms and doors, animals and pets, self-steering vehicles or platforms ??? anything that moves and interacts. Several instances of customs Controls together implement the behaviours of a type of Spatial.
</p>
<p>
To control global game behaviour see <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a> you often use AppStates and Control together.
To control global game behaviour see <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a> ??? you often use AppStates and Control together.
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.youtube.com/watch?v=MNDiZ9YHIpM"><param name="text" value="<html><u>Quick video introduction to Custom Controls</u></html>"><param name="textColor" value="blue"></object></div>
@ -71,7 +71,7 @@ Use <span><a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">C
Examples: You can write
</p>
<ul>
<li><div> A WalkerNavControl, SwimmerNavControl, FlyerNavControl that defines how a type of NPC finds their way around. All NPCs can walk, some can fly, others can swim, and some can all three, etc.</div>
<li><div> A WalkerNavControl, SwimmerNavControl, FlyerNavControl??? that defines how a type of NPC finds their way around. All NPCs can walk, some can fly, others can swim, and some can all three, etc.</div>
</li>
<li><div> A PlayerNavControl that is steered by user-configurable keyboard and mouse input.</div>
</li>
@ -81,7 +81,7 @@ Examples: You can write
</li>
<li><div> An IdleBehaviourControl that remote-controls NPC behaviour in neutral situations. </div>
</li>
<li><div> A DestructionControl that automatically replaces a structure with an appropriate piece of debris after collision with a projectile </div>
<li><div> A DestructionControl that automatically replaces a structure with an appropriate piece of debris after collision with a projectile??? </div>
</li>
</ul>

@ -5,7 +5,7 @@
<p>
<img src="/wiki/lib/exe/fetch.php">
Use the Mesh class to create custom shapes that go beyond Quad, Box, Cylinder, and Sphere, even procedural shapes are possible. Thank you to KayTrance for providing the sample code!
In this tutorial, we (re)create a very simple rectangular mesh, and we have a look at different ways of coloring it. A flat rectangle may not look useful because it&#039;s exactly the same as a <code>com.jme3.scene.shape.Quad</code>. We choose this simple example in order to show you how to build any shape out of triangles without the distractions of more complex shapes.
In this tutorial, we (re)create a very simple rectangular mesh, and we have a look at different ways of coloring it. A flat rectangle may not look useful because it&#039;s exactly the same as a <code>com.jme3.scene.shape.Quad</code>. We choose this simple example in order to show you how to build any shape out of triangles ??? without the distractions of more complex shapes.
</p>
<ul>
<li><div> Full code sample: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.googlecode.com/svn/branches/stable-alpha4/engine/src/test/jme3test/model/shape/TestCustomMesh.java"><param name="text" value="<html><u>TestCustomMesh.java</u></html>"><param name="textColor" value="blue"></object></div>
@ -20,7 +20,7 @@ In this tutorial, we (re)create a very simple rectangular mesh, and we have a lo
<p>
Polygon meshes are made up of triangles. The corners of the triangles are vertices. So, when ever you create a new shape, you break it down into triangles.
Let&#039;s look at a cube. A cube is made up of 6 rectangles. Each rectangle can be broken down into two triangles. This means you need 12 triangles to create a cube mesh. You also need to know the 8 corner coordinates (vertices). The trick is that you have to specify the vertices in a certain order: Each triangle separately, counter-clockwise.
Sounds worse than it is here is an example:
Sounds worse than it is ??? here is an example:
</p>
@ -79,7 +79,7 @@ texCoord&#91;3&#93; = new Vector2f&#40;1,1&#41;;</pre>
<div>
<p>
Next we turn the unrelated coordinates into triangles We define the order in which the mesh is constructed. Think of these indexes as coming in groups of three. Each group of indexes describes one triangle. Note that you must specify the vertices counter-clockwise!
Next we turn the unrelated coordinates into triangles ??? We define the order in which the mesh is constructed. Think of these indexes as coming in groups of three. Each group of indexes describes one triangle. Note that you must specify the vertices counter-clockwise!
</p>
<pre>int &#91;&#93; indexes = &#123; 2,0,1, 1,3,2 &#125;;</pre>
@ -308,7 +308,7 @@ In case however that your usecase requires the backfaces to be visible, you have
<p>
See also: <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">Spatial</a> contains more info about how to debug custom meshes (that do not render as expected) by changing the default culling behaviour.
See also: <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">Spatial</a> ??? contains more info about how to debug custom meshes (that do not render as expected) by changing the default culling behaviour.
</p>
<div><span>
<a href="/wiki/doku.php/tag:spatial?do=showtag&amp;tag=tag%3Aspatial">spatial</a>,

@ -12,7 +12,7 @@ What if you just want to quickly write code that loads models and brings them in
</p>
<p>
If you ever have problems with objects appearing in the wrong spot, with the wrong scale, or wrong orientation, simply attach debug shapes to your scene to have a point of reference in 3D space just like a giant ruler. If your code positions the debug shapes correctly, but models remain invisible when you apply the same code to them, you know that the problem must be either the model (where is its origin coordinate?), or the light (too dark? too bright? missing?), or the model&#039;s material (missing?) and not the positioning code.
If you ever have problems with objects appearing in the wrong spot, with the wrong scale, or wrong orientation, simply attach debug shapes to your scene to have a point of reference in 3D space ??? just like a giant ruler. If your code positions the debug shapes correctly, but models remain invisible when you apply the same code to them, you know that the problem must be either the model (where is its origin coordinate?), or the light (too dark? too bright? missing?), or the model&#039;s material (missing?) ??? and not the positioning code.
</p>
<p>
@ -181,15 +181,34 @@ Then you can add a switch to toggle the model&#039;s wireframe on and off, like
&#125;;</pre>
</div>
</li>
<li><div> Alternatively you could traverse over the whole scene and toggle for all Geometry objects in there if you don&#039;t want to create a new SceneProcessor <pre> private ActionListener actionListener = new ActionListener&#40;&#41; &#123;
boolean wireframe = false;
&nbsp;
@Override
public void onAction&#40;String name, boolean pressed, float tpf&#41; &#123;
// toggle wireframe
if &#40;name.equals&#40;&quot;toggle wireframe&quot;&#41; &amp;&amp; !pressed&#41; &#123;
wireframe = !wireframe; // toggle boolean
rootNode.depthFirstTraversal&#40;new SceneGraphVisitor&#40;&#41; &#123;
public void visit&#40;Spatial spatial&#41; &#123;
if &#40;spatial instanceof Geometry&#41;
&#40;&#40;Geometry&#41;spatial&#41;.getMaterial&#40;&#41;.getAdditionalRenderState&#40;&#41;.setWireframe&#40;wireframe&#41;;
&#125;
&#125;&#41;;
&#125;
// else ... other input tests.
&#125;
&#125;;</pre>
</div>
</li>
</ol>
<p>
TIP :: To set the line width of wireframe display, use mesh.setLineWidth(lineWidth). Default line width is 1.
</p>
</div>
<!-- EDIT9 SECTION "Example: Toggle Wireframe on Model" [5160-6219] -->
<!-- EDIT9 SECTION "Example: Toggle Wireframe on Model" [5160-7050] -->
<h2><a>Example: Toggle Wireframe on the scene</a></h2>
<div>
@ -243,14 +262,14 @@ Then attach the scene processor to the <acronym title="Graphical User Interface"
<pre>getViewPort&#40;&#41;.addProcessor&#40;new WireProcessor&#40;&#41;&#41;;</pre>
</div>
<!-- EDIT10 SECTION "Example: Toggle Wireframe on the scene" [6220-7593] -->
<!-- EDIT10 SECTION "Example: Toggle Wireframe on the scene" [7051-8424] -->
<h2><a>See also</a></h2>
<div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">Spatial</a> if you can&#039;t see certain spatials, you can modify the culling behaviour to identify problems (such as inside-out custom meshes)</div>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">Spatial</a> ??? if you can&#039;t see certain spatials, you can modify the culling behaviour to identify problems (such as inside-out custom meshes)</div>
</li>
</ul>
</div>
<!-- EDIT11 SECTION "See also" [7594-] -->
<!-- EDIT11 SECTION "See also" [8425-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:debugging?do=export_xhtmlbody">view online version</a></em></p>

@ -81,9 +81,9 @@ Use the SimpleWaterProcessor (SceneProcessor) for small, limited bodies of water
See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/2011/01/15/new-advanced-water-effect-for-jmonkeyengine-3"><param name="text" value="<html><u>Rendering Water as Post-Process Effect</u></html>"><param name="textColor" value="blue"></object> announcement with video.
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestSceneWater.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestSceneWater.java</u></html>"><param name="textColor" value="blue"></object> SimpleWaterProcessor (SceneProcessor)</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestSceneWater.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestSceneWater.java</u></html>"><param name="textColor" value="blue"></object> ??? SimpleWaterProcessor (SceneProcessor)</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestSimpleWater.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestSimpleWater.java</u></html>"><param name="textColor" value="blue"></object> SimpleWaterProcessor (SceneProcessor)</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestSimpleWater.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestSimpleWater.java</u></html>"><param name="textColor" value="blue"></object> ??? SimpleWaterProcessor (SceneProcessor)</div>
</li>
</ul>
@ -91,9 +91,9 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/water-reflection-muddy.png"><img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/underwater2.jpg">
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestPostWater.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestPostWater.java</u></html>"><param name="textColor" value="blue"></object> WaterFilter</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestPostWater.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestPostWater.java</u></html>"><param name="textColor" value="blue"></object> ??? WaterFilter</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestPostWaterLake.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestPostWaterLake.java</u></html>"><param name="textColor" value="blue"></object> WaterFilter</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestPostWaterLake.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestPostWaterLake.java</u></html>"><param name="textColor" value="blue"></object> ??? WaterFilter</div>
</li>
</ul>
@ -112,7 +112,7 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/dof-blur.png"><img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/light-scattering-filter.png">
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestDepthOfField.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestDepthOfField.java</u></html>"><param name="textColor" value="blue"></object> DepthOfFieldFilter</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestDepthOfField.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestDepthOfField.java</u></html>"><param name="textColor" value="blue"></object> ??? DepthOfFieldFilter</div>
</li>
</ul>
@ -121,7 +121,7 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<h3><a>Fog</a></h3>
<div>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestFog.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestFog.java</u></html>"><param name="textColor" value="blue"></object> FogFilter</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestFog.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestFog.java</u></html>"><param name="textColor" value="blue"></object> ??? FogFilter</div>
</li>
</ul>
@ -130,7 +130,7 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<h3><a>Light Scattering</a></h3>
<div>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestLightScattering.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestLightScattering.java</u></html>"><param name="textColor" value="blue"></object> LightScatteringFilter</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestLightScattering.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestLightScattering.java</u></html>"><param name="textColor" value="blue"></object> ??? LightScatteringFilter</div>
</li>
</ul>
@ -161,7 +161,7 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestBloom.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestBloom.java</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> More details: <a href="/com/jme3/gde/core/docs/jme3/advanced/bloom_and_glow.html">Bloom and Glow</a> BloomFilter</div>
<li><div> More details: <a href="/com/jme3/gde/core/docs/jme3/advanced/bloom_and_glow.html">Bloom and Glow</a> ??? BloomFilter</div>
</li>
</ul>
@ -170,11 +170,11 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<h3><a>Light</a></h3>
<div>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestSimpleLighting.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestSimpleLighting.java</u></html>"><param name="textColor" value="blue"></object> DirectionalLight, PointLight</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestSimpleLighting.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestSimpleLighting.java</u></html>"><param name="textColor" value="blue"></object> ??? DirectionalLight, PointLight</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestLightRadius.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestLightRadius.java</u></html>"><param name="textColor" value="blue"></object> DirectionalLight, PointLight</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestLightRadius.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestLightRadius.java</u></html>"><param name="textColor" value="blue"></object> ??? DirectionalLight, PointLight</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestManyLights.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestManyLights.java</u></html>"><param name="textColor" value="blue"></object> .j3o scene</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestManyLights.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestManyLights.java</u></html>"><param name="textColor" value="blue"></object> ??? .j3o scene</div>
</li>
<li><div> More details: <a href="/com/jme3/gde/core/docs/jme3/advanced/light_and_shadow.html">Light and Shadow</a></div>
</li>
@ -190,13 +190,13 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<h3><a>Shadow</a></h3>
<div>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestShadow.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestShadow.java</u></html>"><param name="textColor" value="blue"></object> BasicShadowRenderer (SceneProcessor)</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestShadow.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestShadow.java</u></html>"><param name="textColor" value="blue"></object> ??? BasicShadowRenderer (SceneProcessor)</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestPssmShadow.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestPssmShadow.java</u></html>"><param name="textColor" value="blue"></object> PssmShadowRenderer (SceneProcessor), also known as Parallel-Split Shadow Mapping (PSSM).</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestPssmShadow.java"><param name="text" value="<html><u>jme3/src/test/jme3test/light/TestPssmShadow.java</u></html>"><param name="textColor" value="blue"></object> ??? PssmShadowRenderer (SceneProcessor), also known as Parallel-Split Shadow Mapping (PSSM).</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestSSAO.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestSSAO.java</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestSSAO2.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestSSAO2.java</u></html>"><param name="textColor" value="blue"></object> SSAOFilter, also known as Screen-Space Ambient Occlusion shadows (SSOA).</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestSSAO.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestSSAO.java</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestSSAO2.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestSSAO2.java</u></html>"><param name="textColor" value="blue"></object> ??? SSAOFilter, also known as Screen-Space Ambient Occlusion shadows (SSOA).</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestTransparentSSAO.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestTransparentSSAO.java</u></html>"><param name="textColor" value="blue"></object> SSAOFilter, also known as Screen-Space Ambient Occlusion shadows (SSOA), plus transparancy</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestTransparentSSAO.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestTransparentSSAO.java</u></html>"><param name="textColor" value="blue"></object> ??? SSAOFilter, also known as Screen-Space Ambient Occlusion shadows (SSOA), plus transparancy</div>
</li>
<li><div> More details: <a href="/com/jme3/gde/core/docs/jme3/advanced/light_and_shadow.html">Light and Shadow</a></div>
</li>
@ -218,9 +218,9 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<h3><a>Toon Effect</a></h3>
<div>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestCartoonEdge.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestCartoonEdge.java</u></html>"><param name="textColor" value="blue"></object> CartoonEdgeFilter</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestCartoonEdge.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestCartoonEdge.java</u></html>"><param name="textColor" value="blue"></object> ??? CartoonEdgeFilter</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestTransparentCartoonEdge.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestTransparentCartoonEdge.java</u></html>"><param name="textColor" value="blue"></object> CartoonEdgeFilter</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestTransparentCartoonEdge.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestTransparentCartoonEdge.java</u></html>"><param name="textColor" value="blue"></object> ??? CartoonEdgeFilter</div>
</li>
</ul>
@ -229,7 +229,7 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<h3><a>Fade in / Fade out</a></h3>
<div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/fade.html">Fade</a> FadeFilter</div>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/fade.html">Fade</a> ??? FadeFilter</div>
</li>
</ul>
@ -247,29 +247,29 @@ See also the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jme-glsl-shaders/"><param name="text" value="<html><u>User Contributed GLSL Shader Library</u></html>"><param name="textColor" value="blue"></object>
</p>
<ul>
<li><div> LightBlow Shader blend material texture maps</div>
<li><div> LightBlow Shader ??? blend material texture maps</div>
</li>
<li><div> FakeParticleBlow Shader jet, fire effect</div>
<li><div> FakeParticleBlow Shader ??? jet, fire effect</div>
</li>
<li><div> ToonBlow Shader Toon Shading, toon edges </div>
<li><div> ToonBlow Shader ??? Toon Shading, toon edges </div>
</li>
<li><div> Dissolve Shader Scifi teleportation/dissolve effect</div>
<li><div> Dissolve Shader ??? Scifi teleportation/dissolve effect</div>
</li>
<li><div> MatCap Shader – Gold, metals, glass, toons…!</div>
<li><div> MatCap Shader ??? Gold, metals, glass, toons???!</div>
</li>
<li><div> Glass Shader Glass</div>
<li><div> Glass Shader ??? Glass</div>
</li>
<li><div> Force Shield Shader Scifi impact-on-force-field effect</div>
<li><div> Force Shield Shader ??? Scifi impact-on-force-field effect</div>
</li>
<li><div> SimpleSprite Shader Animated textures</div>
<li><div> SimpleSprite Shader ??? Animated textures</div>
</li>
<li><div> SimpleSpriteParticle Shader Sprite library</div>
<li><div> SimpleSpriteParticle Shader ??? Sprite library</div>
</li>
<li><div> MovingTexture Shader Animated cloud/mist texture</div>
<li><div> MovingTexture Shader ??? Animated cloud/mist texture</div>
</li>
<li><div> SoftParticles Shader Fire, clouds, smoke etc</div>
<li><div> SoftParticles Shader ??? Fire, clouds, smoke etc</div>
</li>
<li><div> Displace Shader Deformation effect: Ripple, wave, pulse, swell!</div>
<li><div> Displace Shader ??? Deformation effect: Ripple, wave, pulse, swell!</div>
</li>
</ul>
@ -286,14 +286,14 @@ Thanks for your awesome contributions! Keep them coming!
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/explosion-5.png"><img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/particle.png">
<a href="/com/jme3/gde/core/docs/jme3/advanced/particle_emitters.html">Particle emitter effects</a> are highly configurable and can have any texture. They can simulate smoke, dust, leaves, meteors, snowflakes, mosquitos, fire, explosions, clusters, embers, sparks
<a href="/com/jme3/gde/core/docs/jme3/advanced/particle_emitters.html">Particle emitter effects</a> are highly configurable and can have any texture. They can simulate smoke, dust, leaves, meteors, snowflakes, mosquitos, fire, explosions, clusters, embers, sparks???
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestExplosionEffect.java"><param name="text" value="<html><u>jme3/src/test/jme3test/effect/TestExplosionEffect.java</u></html>"><param name="textColor" value="blue"></object> debris, flame, flash, shockwave, smoke, sparks</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestExplosionEffect.java"><param name="text" value="<html><u>jme3/src/test/jme3test/effect/TestExplosionEffect.java</u></html>"><param name="textColor" value="blue"></object> ??? debris, flame, flash, shockwave, smoke, sparks</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestPointSprite.java"><param name="text" value="<html><u>jme3/src/test/jme3test/effect/TestPointSprite.java</u></html>"><param name="textColor" value="blue"></object> cluster of points </div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestPointSprite.java"><param name="text" value="<html><u>jme3/src/test/jme3test/effect/TestPointSprite.java</u></html>"><param name="textColor" value="blue"></object> ??? cluster of points </div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestMovingParticle.java"><param name="text" value="<html><u>jme3/src/test/jme3test/effect/TestMovingParticle.java</u></html>"><param name="textColor" value="blue"></object> dust, smoke</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestMovingParticle.java"><param name="text" value="<html><u>jme3/src/test/jme3test/effect/TestMovingParticle.java</u></html>"><param name="textColor" value="blue"></object> ??? dust, smoke</div>
</li>
</ul>
<hr/>

@ -5,7 +5,7 @@
<p>
TerrainGrid is an extension built on top of the TerraMonkey tools like TerrainQuad and HeightMap, that provides &quot;infinite&quot; Terrain paging routines. <br/>
Thanks to Gábor (@anthyon) and Brent (@sploreg) for this contribution!
Thanks to G??bor (@anthyon) and Brent (@sploreg) for this contribution!
</p>
@ -50,10 +50,10 @@ TerrainGrid is made up of the TerrainGrid class, and the HeightMapGrid and Terra
<p>
<br/>
Multiple listeners can be added to the TerrainGrid, they will be called in the order of addition, so its possible to have multiple changes to the material before completing the load of the tile.
Multiple listeners can be added to the TerrainGrid, they will be called in the order of addition, so it???s possible to have multiple changes to the material before completing the load of the tile.
<br/>
HeightMapGrid adds the possibility of loading terrain tiles on demand instead of having a simple height array. Theres no predefined way of how to store these tiles, it only takes care of loading one HeightMap object at given location at a time.
HeightMapGrid adds the possibility of loading terrain tiles on demand instead of having a simple height array. There???s no predefined way of how to store these tiles, it only takes care of loading one HeightMap object at given location at a time.
</p>
@ -63,7 +63,7 @@ HeightMapGrid adds the possibility of loading terrain tiles on demand instead of
<div>
<p>
After playing around with the terrain in jME3, soon comes the requirement of having larger explorable lands. Increasing the size of one TerrainQuad leads to more memory usage, while it will still be easy to reach the worlds boundaries. Thats why TerrainGrid was designed. It extends the TerraindQuad class and uses 4 HeightMaps (dark blue) as the four sub-quad. This means that a terrain of size 513 will use tiles of 257. Also an LRUCache is built into the terrain package, so surrounding tiles (green) can be pre-cached on a different thread, lowering the loading time. The quads are updated as the camera approaches the boundary of the light blue section.
After playing around with the terrain in jME3, soon comes the requirement of having larger explorable lands. Increasing the size of one TerrainQuad leads to more memory usage, while it will still be easy to reach the worlds boundaries. That???s why TerrainGrid was designed. It extends the TerraindQuad class and uses 4 HeightMaps (dark blue) as the four sub-quad. This means that a terrain of size 513 will use tiles of 257. Also an LRUCache is built into the terrain package, so surrounding tiles (green) can be pre-cached on a different thread, lowering the loading time. The quads are updated as the camera approaches the boundary of the light blue section.
</p>
@ -79,7 +79,7 @@ There exist also two basic HeightMapGrid implementations:
<ul>
<li><div> ImageBasedHeightMapGrid: uses a sequentially numbered, 16 bit grayscale heightmaps. The physical filename of these files can be generated through the Namer interface. When a tile cannot be found by the assetManager, an empty (all-zero) heightmap is created, and a warning is added to the log.</div>
</li>
<li><div> FractalHeightMapGrid: uses a noise library to create a landscape on the fly. The shape of the terrain can be controlled by the various parameters and postfilters of the fractals. With the help of this grid implementation there’s no limitation – above of floating point precision limits – how far the camera can get. The tiles generated this way can be cached to the filesystem, for later modification. The FractalHeightMapGrid will always load from cache if a tile exists there!</div>
<li><div> FractalHeightMapGrid: uses a noise library to create a landscape on the fly. The shape of the terrain can be controlled by the various parameters and postfilters of the fractals. With the help of this grid implementation there???s no limitation ??? above of floating point precision limits ??? how far the camera can get. The tiles generated this way can be cached to the filesystem, for later modification. The FractalHeightMapGrid will always load from cache if a tile exists there!</div>
</li>
</ul>

@ -18,16 +18,16 @@ It&#039;s very easy to change your current (client) game to function as a server
<p>
A headless server
A headless server???
</p>
<ul>
<li><div> does not display any output no window opens, no audio plays, no graphics are rendered.</div>
<li><div> does not display any output ??? no window opens, no audio plays, no graphics are rendered.</div>
</li>
<li><div> ignores all input no input handling.</div>
<li><div> ignores all input ??? no input handling.</div>
</li>
<li><div> keeps game state you can attach to, transform, and save the rootNode, although the scene is not displayed.</div>
<li><div> keeps game state ??? you can attach to, transform, and save the rootNode, although the scene is not displayed.</div>
</li>
<li><div> calls the <code>simpleUpdate()</code> loop you can run tests and trigger events as usual.</div>
<li><div> calls the <code>simpleUpdate()</code> loop ??? you can run tests and trigger events as usual.</div>
</li>
</ul>
@ -73,7 +73,7 @@ Okay, so you can now start your game in a headless &#039;server mode&#039;, wher
</p>
<ul>
<li><div> Parse <code>String[] args</code> from the <code>main</code>-method to enable server mode on demand (e.g. start your server like <code>java -jar mygame.jar server</code>.</div>
<li><div> Parse <code>String[] args</code> from the <code>main</code>-method to enable server mode on demand (e.g. start your server like <code>java -jar mygame.jar ???server</code>.</div>
</li>
<li><div> Integrate <a href="/com/jme3/gde/core/docs/jme3/advanced/networking.html">SpiderMonkey</a>, to provide game updates to the server over a network.</div>
</li>

@ -97,7 +97,7 @@ For a rope bridge, each set of planks would be one dynamic node.
<p>
A PhysicsHingeJoint is an invisible connection between two nodes here between the pendulum body and the hook. Why are hinges and joints represented by the same class? Hinges and joints have something in common: They constrain the <em>mechanical degree of freedom</em> (DOF) of another object.
A PhysicsHingeJoint is an invisible connection between two nodes ??? here between the pendulum body and the hook. Why are hinges and joints represented by the same class? Hinges and joints have something in common: They constrain the <em>mechanical degree of freedom</em> (DOF) of another object.
</p>
<p>
@ -135,7 +135,7 @@ You&#039;ll understand that, when creating any type of joint, it is important to
<p>
You create the HingeJoint after you have created the nodes that are to be chained together. In the code snippet you see that the HingeJoint constructor requires the two node objects. You also have to specify axes and pivots they are the degrees of freedom that you just heard about.
You create the HingeJoint after you have created the nodes that are to be chained together. In the code snippet you see that the HingeJoint constructor requires the two node objects. You also have to specify axes and pivots ??? they are the degrees of freedom that you just heard about.
</p>
<pre>private HingeJoint joint;
...
@ -160,15 +160,15 @@ The pivot point&#039;s position will be at <code>(0,0,0)</code> in the global 3D
Specify the following parameters for each joint:
</p>
<ul>
<li><div> PhysicsControl A and B the two nodes that are to be joined</div>
<li><div> PhysicsControl A and B ??? the two nodes that are to be joined</div>
</li>
<li><div> Vector3f pivot A and pivot B coordinates of the attachment point relative to A and B</div>
<li><div> Vector3f pivot A and pivot B ??? coordinates of the attachment point relative to A and B</div>
<ul>
<li><div> The points typically lie on the surface of the PhysicsControl&#039;s Spatials, rarely in the middle.</div>
</li>
</ul>
</li>
<li><div> Vector3f axisA and axisB around which axes each node is allowed to spin.</div>
<li><div> Vector3f axisA and axisB ??? around which axes each node is allowed to spin.</div>
<ul>
<li><div> In our example, we constrain the pendulum to swing only along the Z axis.</div>
</li>

@ -15,13 +15,13 @@ A HUD (Head-Up Display) is part of a game&#039;s visual user interface. It&#039;
HUDs are used to supply players with essential information about the game state.
</p>
<ul>
<li><div> Status: Score, minimap, points, stealth mode, </div>
<li><div> Status: Score, minimap, points, stealth mode, ???</div>
</li>
<li><div> Resources: Ammunition, lives/health, time, </div>
<li><div> Resources: Ammunition, lives/health, time, ???</div>
</li>
<li><div> Vehicle instruments: Cockpit, speedometer, </div>
<li><div> Vehicle instruments: Cockpit, speedometer, ???</div>
</li>
<li><div> Navigational aides: Crosshairs, mouse pointer or hand, </div>
<li><div> Navigational aides: Crosshairs, mouse pointer or hand, ???</div>
</li>
</ul>

@ -4,7 +4,7 @@
<p>
Users interact with your jME3 application with different input devices the mouse, the keyboard, or a joystick. To respond to inputs we use the <code>inputManager</code> object in <code>SimpleApplication</code>.
Users interact with your jME3 application with different input devices ??? the mouse, the keyboard, or a joystick. To respond to inputs we use the <code>inputManager</code> object in <code>SimpleApplication</code>.
</p>
<p>
@ -81,13 +81,13 @@ Choose one or several key/mouse events for the interaction. We use <code>KeyTrig
<td> Mouse wheel: Down </td><td> MouseAxisTrigger(MouseInput.AXIS_WHEEL,true) </td>
</tr>
<tr>
<td> NumPad: 1, 2, 3, </td><td> KeyTrigger(KeyInput.KEY_NUMPAD1) </td>
<td> NumPad: 1, 2, 3, ??? </td><td> KeyTrigger(KeyInput.KEY_NUMPAD1) ??? </td>
</tr>
<tr>
<td> Keyboard: 1, 2 , 3, </td><td> KeyTrigger(KeyInput.KEY_1) </td>
<td> Keyboard: 1, 2 , 3, ??? </td><td> KeyTrigger(KeyInput.KEY_1) ??? </td>
</tr>
<tr>
<td> Keyboard: A, B, C, </td><td> KeyTrigger(KeyInput.KEY_A) </td>
<td> Keyboard: A, B, C, ??? </td><td> KeyTrigger(KeyInput.KEY_A) ??? </td>
</tr>
<tr>
<td> Keyboard: Spacebar </td><td> KeyTrigger(KeyInput.KEY_SPACE) </td>
@ -97,7 +97,7 @@ Choose one or several key/mouse events for the interaction. We use <code>KeyTrig
KeyTrigger(KeyInput.KEY_LSHIFT) </td>
</tr>
<tr>
<td> Keyboard: F1, F2, </td><td> KeyTrigger(KeyInput.KEY_F1) </td>
<td> Keyboard: F1, F2, ??? </td><td> KeyTrigger(KeyInput.KEY_F1) ??? </td>
</tr>
<tr>
<td> Keyboard: Return, Enter </td><td> KeyTrigger(KeyInput.KEY_RETURN), <br/>

@ -61,7 +61,7 @@ How to this file is structured:
<p>
<p><div>In the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>, use File→New File→Material→Empty Material File to create .j3m files. You can edit .j3m files directly in the <acronym title="Software Development Kit">SDK</acronym>. On the other hand, they are plain text files, so you can also create them in any plain text editor.
<p><div>In the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>, use File???New File???Material???Empty Material File to create .j3m files. You can edit .j3m files directly in the <acronym title="Software Development Kit">SDK</acronym>. On the other hand, they are plain text files, so you can also create them in any plain text editor.
</div></p>
</p>
@ -72,7 +72,7 @@ How to this file is structured:
<p>
This is how you use the prepared .j3m Material on a Spatial. Since you have saved the .j3m file to your project&#039;s Assets directory, the .j3m path is relative to <code>MyGame/src/assets/</code>.
This is how you use the prepared .j3m Material on a Spatial. Since you have saved the .j3m file to your project&#039;s Assets directory, the .j3m path is relative to <code>MyGame/src/assets/???</code>.
</p>
<pre>myGeometry.setMaterial&#40;assetManager.loadMaterial&#40;&quot;Materials/SimpleBump.j3m&quot;&#41;&#41;;</pre>
@ -278,7 +278,7 @@ The file <code>assets/Models/Sign Post/Sign Post.j3m</code> contains:
}</pre>
<p>
The <acronym title="Joint Photographics Experts Group">JPG</acronym> files are in the same directory, <code>assets/Models/Sign Post/</code>.
The <acronym title="Joint Photographics Experts Group">JPG</acronym> files are in the same directory, <code>assets/Models/Sign Post/???</code>.
</p>
</div>
@ -337,7 +337,7 @@ The file <code>assets/Models/Tree/Leaves.j3m</code> contains:
}</pre>
<p>
The <acronym title="Portable Network Graphics">PNG</acronym> file is in the same directory, <code>assets/Models/Tree/</code>
The <acronym title="Portable Network Graphics">PNG</acronym> file is in the same directory, <code>assets/Models/Tree/???</code>
</p>
</div>

@ -16,7 +16,7 @@
<p>
Shaders are sets of instructions that are executed on the GPU. They are used to take advantage of hardware acceleration available on the GPU for rendering purposes.<br/>
This paper only covers Vertex and Fragment shaders because they are the only ones supported by JME3 for the moment. But be aware that there are some other types of shaders (geometry, tessellation,).<br/>
This paper only covers Vertex and Fragment shaders because they are the only ones supported by JME3 for the moment. But be aware that there are some other types of shaders (geometry, tessellation,???).<br/>
There are multiple frequently used languages that you may encounter to code shaders but as JME3 is based on OpenGL, shaders in JME use GLSL and any example in this paper will be written in GLSL.<br/>
@ -143,13 +143,13 @@ For example applying this shader to a sphere would render a solid blue sphere on
<div>
<p>
You probably heard that JME3 is “shader oriented”, but what does that mean?<br/>
You probably heard that JME3 is ???shader oriented???, but what does that mean?<br/>
Usually to use shaders you must create what is called a program. This program specify the vertex shader and the fragment shader to use.<br/>
JME3 encloses this in the material system. Every material in JME3 uses shaders.<br/>
For example lets have a look at the SolidColor.j3md file : <br/>
For example let???s have a look at the SolidColor.j3md file : <br/>
</p>
@ -191,7 +191,7 @@ For more information on JME3 material system, i suggest you read this <object cl
<p>
JME3 can expose pre-computed global uniforms to your shaders. You must specify the one that are required for your shader in the WorldParameters section of the material definition file (.j3md).<br/>
Note that in the shader the uniform names will be prefixed by a “g_”.<br/>
Note that in the shader the uniform names will be prefixed by a ???g_???.<br/>
In the example above, WorldViewProjectionMatrix is declared as uniform mat4 g_WorldViewProjectionMatrix in the shader.<br/>
@ -225,7 +225,7 @@ JME3 uses some global uniforms for lighting :
</li>
<li><div> use for PointLight : x,y,z contain the world position of the light, the w component contains 1/lightRadius</div>
</li>
<li><div> use for DirectionalLight : strangely enough it&#039;s used for the direction of the lightthis might change though. The fourth component contains -1 and it&#039;s used in the lighting shader to know if it&#039;s a directionalLight or not.</div>
<li><div> use for DirectionalLight : strangely enough it&#039;s used for the direction of the light???this might change though. The fourth component contains -1 and it&#039;s used in the lighting shader to know if it&#039;s a directionalLight or not.</div>
</li>
</ul>
</li>
@ -250,7 +250,7 @@ Those are different attributes that are always passed to your shader.<br/>
You can find a complete list of those attribute in the Type enum of the VertexBuffer <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/scene/VertexBuffer.java"><param name="text" value="<html><u>here</u></html>"><param name="textColor" value="blue"></object>.<br/>
Note that in the shader the attributes names will be prefixed by an “in”.<br/>
Note that in the shader the attributes names will be prefixed by an ???in???.<br/>
<br/>
@ -396,7 +396,7 @@ A result preview can be seen here: <object classid="java:org.netbeans.modules.ja
</li>
<li><div> In your initSimpleApplication, create a material using this definition, apply it to a geometry</div>
</li>
<li><div> Thats it!!</div>
<li><div> That???s it!!</div>
</li>
</ul>
<pre> // A cube
@ -419,7 +419,7 @@ A result preview can be seen here: <object classid="java:org.netbeans.modules.ja
<div>
<p>
GLSL 1.0 to 1.2 comes with built in attributes and uniforms (ie, gl_Vertex, gl_ModelViewMatrix, etc).<br/>
GLSL 1.0 to 1.2 comes with built in attributes and uniforms (ie, gl_Vertex, gl_ModelViewMatrix, etc???).<br/>
Those attributes are deprecated since GLSL 1.3 (opengl 3), hence JME3 global uniforms and attributes. Here is a list of deprecated attributes and their equivalent in JME3<br/>
</p>

@ -38,7 +38,7 @@ You can add several types of light sources to a scene using <code>rootNode.addLi
</p>
<p>
The available light sources in <code>com.jme3.light</code> are:
The available light sources in <code>com.???jme3.???light</code> are:
</p>
<ul>
<li><div> SpotLight </div>
@ -136,7 +136,7 @@ spot.setDirection&#40;cam.getDirection&#40;&#41;&#41;; // shine forw
rootNode.addLight&#40;spot&#41;;</pre>
<p>
If you want the spotlight to follow the flycam, repeat the setDirection(…) and setPosition(…) calls in the update loop, and kee syncing them with the camera position and direction.
If you want the spotlight to follow the flycam, repeat the setDirection(???) and setPosition(???) calls in the update loop, and kee syncing them with the camera position and direction.
</p>
</div>
@ -315,7 +315,7 @@ The constructor expects the following values:
<ul>
<li><div> Your assetManager object</div>
</li>
<li><div> The size of the rendered shadowmaps (512, 1024, 2048, etc)</div>
<li><div> The size of the rendered shadowmaps (512, 1024, 2048, etc???)</div>
</li>
<li><div> The number of shadow maps rendered (the more shadow maps, the more quality, the less FPS).</div>
</li>
@ -326,13 +326,13 @@ The constructor expects the following values:
You can set the following properties on the <code>pssmRenderer</code> object:
</p>
<ul>
<li><div> setDirection(Vector3f) the direction of the light</div>
<li><div> setDirection(Vector3f) ??? the direction of the light</div>
</li>
<li><div> setLambda(0.65f) Factor to use to reduce the split size</div>
<li><div> setLambda(0.65f) ??? Factor to use to reduce the split size</div>
</li>
<li><div> setShadowIntensity(0.7f) shadow darkness (1 black, 0 invisible)</div>
<li><div> setShadowIntensity(0.7f) ??? shadow darkness (1 black, 0 invisible)</div>
</li>
<li><div> setShadowZextend() distance how far away from camera shadows will still be computed</div>
<li><div> setShadowZextend() ??? distance how far away from camera shadows will still be computed</div>
</li>
</ul>
@ -353,9 +353,9 @@ terrain.setShadowMode&#40;ShadowMode.Receive&#41;; </pre>
Full sample code
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestSSAO.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestSSAO.java</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestSSAO2.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestSSAO2.java</u></html>"><param name="textColor" value="blue"></object> Screen-Space Ambient Occlusion shadows</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestSSAO.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestSSAO.java</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestSSAO2.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestSSAO2.java</u></html>"><param name="textColor" value="blue"></object> ??? Screen-Space Ambient Occlusion shadows</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestTransparentSSAO.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestTransparentSSAO.java</u></html>"><param name="textColor" value="blue"></object> Screen-Space Ambient Occlusion shadows plus transparancy</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestTransparentSSAO.java"><param name="text" value="<html><u>jme3/src/test/jme3test/post/TestTransparentSSAO.java</u></html>"><param name="textColor" value="blue"></object> ??? Screen-Space Ambient Occlusion shadows plus transparancy</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/2010/08/16/screen-space-ambient-occlusion-for-jmonkeyengine-3-0/#more-321"><param name="text" value="<html><u>Screen Space Ambient Occlusion for jMonkeyEngine (article)</u></html>"><param name="textColor" value="blue"></object></div>
</li>
@ -363,7 +363,7 @@ Full sample code
<p>
Ambient Occlusion refers to the shadows that nearby objects cast on each other under an ambient lighting. Its an approximation of how light radiates in a real life scene. To activate Ambient Occlusion shadows, add a jME SceneProcessor named <code>com.jme3.post.SSAOFilter</code> to the viewPort. SSAO stands for the Screen Space Ambient Occlusion technique.
Ambient Occlusion refers to the shadows that nearby objects cast on each other under an ambient lighting. It???s an approximation of how light radiates in a real life scene. To activate Ambient Occlusion shadows, add a jME SceneProcessor named <code>com.jme3.post.SSAOFilter</code> to the viewPort. SSAO stands for the Screen Space Ambient Occlusion technique.
</p>
<pre>FilterPostProcessor fpp = new FilterPostProcessor&#40;assetManager&#41;;
SSAOFilter ssaoFilter = new SSAOFilter&#40;12.94f, 43.92f, 0.33f, 0.61f&#41;;

@ -139,7 +139,7 @@ update_bar&#40;100%&#41;;</pre>
<p>
If you do all of this in a single frame, then it is sent to the graphics card only after the whole code block has executed. By this time the bar has reached 100% and the game has already begun for the user, the progressbar on the screen would not have visibly changed.
If you do all of this in a single frame, then it is sent to the graphics card only after the whole code block has executed. By this time the bar has reached 100% and the game has already begun ??? for the user, the progressbar on the screen would not have visibly changed.
</p>
<p>

@ -151,15 +151,15 @@ Only localize messages and UI text!
Typical problems include:
</p>
<ul>
<li><div> Localized strings will be of vastly different lengths and will totally break your UI layout. Test every localization.</div>
<li><div> Localized strings will be of vastly different lengths and will totally break your UI layout. ??? Test every localization.</div>
</li>
<li><div> Strings with variable text or numbers don&#039;t work the same in different languages. Either work in grammatical cases/numbers/gender for each language, or use <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms"><param name="text" value="<html><u>gettext</u></html>"><param name="textColor" value="blue"></object> or <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://userguide.icu-project.org/formatparse/messages"><param name="text" value="<html><u>ICU4J</u></html>"><param name="textColor" value="blue"></object>.</div>
<li><div> Strings with variable text or numbers don&#039;t work the same in different languages. ??? Either work in grammatical cases/numbers/gender for each language, or use <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms"><param name="text" value="<html><u>gettext</u></html>"><param name="textColor" value="blue"></object> or <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://userguide.icu-project.org/formatparse/messages"><param name="text" value="<html><u>ICU4J</u></html>"><param name="textColor" value="blue"></object>.</div>
</li>
<li><div> The localizer only sees the strings, without any context. E.g. does &quot;Search History&quot; mean &quot;display the history of searches&quot;, or &quot;search through the history&quot;? Use clear key labels. Work closely with the localizers if they require extra info, and add that info as comments to the translation file.</div>
<li><div> The localizer only sees the strings, without any context. E.g. does &quot;Search History&quot; mean &quot;display the history of searches&quot;, or &quot;search through the history&quot;? ??? Use clear key labels. Work closely with the localizers if they require extra info, and add that info as comments to the translation file.</div>
</li>
<li><div> Broken international characters Make sure the files are saved with the same character encoding as the font file(s) you&#039;re using. Nowadays, that usually means UTF-8 since font files tend to come for Unicode.</div>
<li><div> Broken international characters ??? Make sure the files are saved with the same character encoding as the font file(s) you&#039;re using. Nowadays, that usually means UTF-8 since font files tend to come for Unicode.</div>
</li>
<li><div> Missing international characters Make sure that there&#039;s a glyph for every needed character in your font, either by using more complete font files or by having the translation changed.</div>
<li><div> Missing international characters ??? Make sure that there&#039;s a glyph for every needed character in your font, either by using more complete font files or by having the translation changed.</div>
</li>
</ul>

@ -9,57 +9,64 @@
<p>
Many developers just use System.out.println() to print diagnostic strings to the terminal. The problem with that is that before the release, you&#039;d have to go through all your code and make certain you removed all these println() calls. You do not want your users to see them and worry about ominous strings babbling about old development diagnostics.
Many developers just use <code>System.out.println()</code> to print diagnostic strings to the terminal. The problem with that is that before the release, you have to go through all your code and make certain you removed all these <code>println()</code> calls. You do not want your customers to see them, and needlessly worry about ominous outdated debugging diagnostics.
</p>
</div>
<!-- EDIT2 SECTION "Logging Like a Newbie" [39-426] -->
<!-- EDIT2 SECTION "Logging Like a Newbie" [39-428] -->
<h2><a>Logging Like a Pro</a></h2>
<div>
<p>
Instead of println(), you use the standard Java logger from <code>java.util.logging</code>. It has many advantages for professional game development:
Instead of <code>println()</code>, use the standard Java logger from <code>java.util.logging</code>. It has many advantages for professional game development:
</p>
<ul>
<li><div> You &quot;tag&quot; each message with a log level: Severe error, informative warning, etc.</div>
<li><div> You tag each message with its <strong>log level</strong>: Severe error, informative warning, etc.</div>
</li>
<li><div> You can switch off printing of all messages up to certain log level with just one line of code.</div>
<li><div> You can <strong>switch off or on printing of log messages</strong> up to certain log level with just one line of code.</div>
<ul>
<li><div> During development, you would set the log level to fine, because you want all warnings printed.</div>
<li><div> During development, you would set the log level to <code>fine</code>, because you want all warnings printed.</div>
</li>
<li><div> For the release, you set the log level to only report severe errors, and no informative diagnostics.</div>
<li><div> For the release, you set the log level to only report <code>severe</code> errors, and never print informative diagnostics.</div>
</li>
</ul>
</li>
<li><div> The logger string is localizable, since it contains variables. You may want to localize all errors.</div>
<li><div> The logger message string is <strong>localizable</strong> and can use variables. Optimally, you localize all error messages.</div>
</li>
</ul>
<p>
So to print comments like a pro, you use the following logger syntax. The variables a, b, c, can be any printable Java object, e.g. <code>Vector3f a = cam.getLocation()</code>. They are numbered {0},{1},{2},etc for use in the string, in the order you put them in the Object array.
To print comments like a pro, you use the following logger syntax.
</p>
<pre>private static final Logger logger = Logger.getLogger&#40;HelloWorld.class.getName&#40;&#41;&#41;;</pre>
<p>
Replace HelloWorld by the name of the class where you are using this line.
</p>
<pre>logger.log&#40;Level.WARNING, &quot;ok seriously wtf somebody check why {0} is {1} again?!&quot;,
<ol>
<li><div> Declare the logger object once per file. In the following code, replace <code>HelloWorld</code> by the name of the class where you are using this line.<pre>private static final Logger logger = Logger.getLogger&#40;HelloWorld.class.getName&#40;&#41;&#41;;</pre>
</div>
</li>
<li><div> Declare the info that you want to include in the message. The variables (here <code>a, b, c</code>) can be any printable Java object. <br/>
Example: <code>Vector3f a = cam.getLocation();</code> </div>
</li>
<li><div> Put the variables in a new <code>Object</code> array. Refer to the variables as <code>{0},{1},{2}</code> etc in the message string. Variables are numbered in the order you put them into the <code>Object</code> array. </div>
</li>
<li><div> Add the logger line and specify the log level:</div>
<ul>
<li><div> Usecase 1: During debugging, a developer uses a warning to remind himself of a bug:<pre>logger.log&#40;Level.WARNING, &quot;why is {0} set to {1} again?!&quot;,
new Object&#91;&#93;&#123;a , b&#125;&#41;;</pre>
<p>
or
</p>
<pre>logger.log&#40;Level.SEVERE, &quot;Game error: {0} must not be {1} after {2}! Please check your flux generator.&quot;,
</div>
</li>
<li><div> Usecase 2: For the release, you inform the customer of a problem and how to solve it. <pre>logger.log&#40;Level.SEVERE, &quot;MyGame error: {0} must not be {1} after {2}! Adjust flux generator settings.&quot;,
new Object&#91;&#93;&#123;a , b , c&#125;&#41;;</pre>
</div>
</li>
</ul>
</li>
</ol>
<p>
As you see in the example, you should phrase potentially &quot;customer facing&quot; errors in a neutral way and offer a reason and a solution. If you use WARNINGs as replacement for casual printlns, make sure you deactivate them for the release.
<p><div>As you see in the examples, you should phrase potentially &quot;customer facing&quot; errors in a neutral way and offer <em>a reason and a solution</em> for the error (if you don&#039;t, it has no value to your customer). If your deveopment team uses WARNINGs as replacement for casual printlns, make sure you deactivate them for the release.
</div></p>
</p>
<p>
@ -67,7 +74,7 @@ More details about <object classid="java:org.netbeans.modules.javahelp.BrowserDi
</p>
</div>
<!-- EDIT3 SECTION "Logging Like a Pro" [427-2229] -->
<!-- EDIT3 SECTION "Logging Like a Pro" [429-2826] -->
<h2><a>Switching the Logger on and off</a></h2>
<div>
@ -77,23 +84,37 @@ In the release version you will deactivate the logging output to the terminal.
</p>
<p>
To deactivate the default logger for a release, you set the log level to only report severe messages:
To deactivate the default logger for a release, you set the log level to only report <code>severe</code> messages:
</p>
<pre>Logger.getLogger&#40;??????&#41;.setLevel&#40;Level.SEVERE&#41;;</pre>
<p>
During development or a beta test, you can tune down the default logger, and set the log level to only report <code>warning</code>s:
</p>
<pre>Logger.getLogger&#40;””&#41;.setLevel&#40;Level.SEVERE&#41;;</pre>
<pre>Logger.getLogger&#40;??????&#41;.setLevel&#40;Level.WARNING&#41;;</pre>
<p>
During development, you can tune down the default logger, and set the log level to only report warnings:
To activate full logging, e.g. for debugging and testing, use the <code>fine</code> level:
</p>
<pre>Logger.getLogger&#40;””&#41;.setLevel&#40;Level.WARNING&#41;;</pre>
<pre>Logger.getLogger&#40;??????&#41;.setLevel&#40;Level.FINE&#41;;</pre>
</div>
<!-- EDIT4 SECTION "Switching the Logger on and off" [2827-3468] -->
<h2><a>Advanced Error Handling</a></h2>
<div>
<p>
To reactivate full logging, e.g. for debugging and testing:
When an uncaught exception reaches certain parts of the jME3 system then the default response is to log the error and then exit the application. This is because an error happening every frame will rapidly fill logs with repeated failings and potentially mask or over-write the original cause of the problem or even the application may continue for a while and then suffer other errors caused by the first and make the root cause hard to determine.
</p>
<p>
This behaviour can be partially modified by overriding the method handleError in SimpleApplication, for example to display a custom message to users, or to provide users with information on how to report a bug or even to change the way that the error is logged.
</p>
<pre>Logger.getLogger&#40;””&#41;.setLevel&#40;Level.FINE&#41;;</pre>
</div>
<!-- EDIT4 SECTION "Switching the Logger on and off" [2230-] -->
<!-- EDIT5 SECTION "Advanced Error Handling" [3469-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:logging?do=export_xhtmlbody">view online version</a></em></p>

@ -82,7 +82,7 @@ The camera&#039;s transformation is copied over the spatial&#039;s transformatio
<strong>Code sample:</strong>
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/TestCameraNode.java"><param name="text" value="<html><u>TestCameraNode.java</u></html>"><param name="textColor" value="blue"></object> Press the WASD or arrow keys to move. Drag with the left mouse button to rotate.</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/TestCameraNode.java"><param name="text" value="<html><u>TestCameraNode.java</u></html>"><param name="textColor" value="blue"></object> ??? Press the WASD or arrow keys to move. Drag with the left mouse button to rotate.</div>
</li>
</ul>
@ -143,7 +143,7 @@ new KeyTrigger(KeyInput.KEY_SPACE))</td><td>Activate mutiple triggers for the ro
<strong>Code sample:</strong>
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/TestChaseCamera.java"><param name="text" value="<html><u>TestChaseCamera.java</u></html>"><param name="textColor" value="blue"></object> Press the WASD or arrow keys to move. Drag with the left mouse button to rotate.</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/input/TestChaseCamera.java"><param name="text" value="<html><u>TestChaseCamera.java</u></html>"><param name="textColor" value="blue"></object> ??? Press the WASD or arrow keys to move. Drag with the left mouse button to rotate.</div>
</li>
</ul>

@ -46,13 +46,13 @@ In the <a href="/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html">M
</li>
<li><div> Create and save the necessary Texture files to your <code>assets/Textures</code> directory.</div>
<ul>
<li><div> E.g. mytex_diffuse.png as ColorMap / DiffuseMap, mytex_normal.png as NormalMap, mytex_alpha.png as AlphaMap, etc</div>
<li><div> E.g. mytex_diffuse.png as ColorMap / DiffuseMap, mytex_normal.png as NormalMap, mytex_alpha.png as AlphaMap, etc???</div>
</li>
</ul>
</li>
<li><div> Determine the required values to achieve the effect that you want.</div>
<ul>
<li><div> E.g. set colors, floats, booleans, etc </div>
<li><div> E.g. set colors, floats, booleans, etc??? </div>
</li>
</ul>
</li>

@ -278,10 +278,10 @@ setBoolean(&quot;WardIso&quot;,true); <br/>
<th>Material Option</th><th>Description</th><th>Example</th>
</tr>
<tr>
<td>getAdditionalRenderState().setBlendMode(BlendMode.Off);</td><td>This is the default, no transparency.</td><td>Use for all opaque objects like walls, floors, people</td>
<td>getAdditionalRenderState().setBlendMode(BlendMode.Off);</td><td>This is the default, no transparency.</td><td>Use for all opaque objects like walls, floors, people???</td>
</tr>
<tr>
<td>getAdditionalRenderState().setBlendMode(BlendMode.Alpha);</td><td>Interpolates the background pixel with the current pixel by using the current pixel&#039;s alpha.</td><td>Use this for normal every-day translucency: Frosted window panes, ice, glass, alpha-blended vegetation textures </td>
<td>getAdditionalRenderState().setBlendMode(BlendMode.Alpha);</td><td>Interpolates the background pixel with the current pixel by using the current pixel&#039;s alpha.</td><td>Use this for normal every-day translucency: Frosted window panes, ice, glass, alpha-blended vegetation textures??? </td>
</tr>
<tr>
<td>getAdditionalRenderState().setDepthWrite(false);</td><td>Disables writing of the pixel&#039;s depth value to the depth buffer.</td><td>Use this on Materials if you have several transparent/translucent objects obscuring one another, but you want to see through both.</td>
@ -346,7 +346,7 @@ Later, put the Geometry (not the Material!) in the appropriate render queue
<td>getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off); </td><td>No meshes are culled. Both mesh faces are rendered, even if they face away from the camera. Slow.</td><td>Sometimes used to debug custom meshes if you messed up some of the polygon sides, or for special shadow effects.</td>
</tr>
<tr>
<td>getAdditionalRenderState().setFaceCullMode(FaceCullMode.Front); </td><td>Activates front-face culling. Mesh faces facing the camera are not rendered.</td><td>No example Typically not used because you wouldn&#039;t see anything meaningful.</td>
<td>getAdditionalRenderState().setFaceCullMode(FaceCullMode.Front); </td><td>Activates front-face culling. Mesh faces facing the camera are not rendered.</td><td>No example ??? Typically not used because you wouldn&#039;t see anything meaningful.</td>
</tr>
<tr>
<td>getAdditionalRenderState().setFaceCullMode(FaceCullMode.FrontAndBack)</td><td>Culls both backfaces and frontfaces.</td><td>Use this as an efficient way to make an object temporarily invisible, while keeping all its other in-game properties (such as node attachment, collision shapes, interactions, etc) active.</td>

@ -13,7 +13,7 @@ All visible game elements in a scene, whether it is a Model or a Shape, are made
</p>
<ul>
<li><div> Meshes are made up of triangles. <br/>
<code>getTriangleCount()</code> and <code>getTriangle()</code></div>
<code>getTriangleCount(???)</code> and <code>getTriangle(???)</code></div>
</li>
<li><div> Each mesh has a unique ID <br/>
<code>getId()</code></div>

@ -10,7 +10,7 @@ MonkeyZone is an multi-player demo game provided by the jME core developer team.
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.youtube.com/watch?v=98yITEoJvqE"><param name="text" value="<html><u>Watch pre-alpha video footage</u></html>"><param name="textColor" value="blue"></object> (YouTube Video)</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/2011/02/13/monkeyzone-a-jme3-game-from-the-core/"><param name="text" value="<html><u>Read &quot;MonkeyZone a jME3 game from the core&quot;</u></html>"><param name="textColor" value="blue"></object> (news article)</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/2011/02/13/monkeyzone-a-jme3-game-from-the-core/"><param name="text" value="<html><u>Read &quot;MonkeyZone ??? a jME3 game from the core&quot;</u></html>"><param name="textColor" value="blue"></object> (news article)</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/groups/user-code-projects/forum/topic/open-game-finder/"><param name="text" value="<html><u>Related forum thread: Open Game Finder</u></html>"><param name="textColor" value="blue"></object></div>
</li>
@ -27,9 +27,9 @@ This open-source demo:
</ol>
<p>
The game idea is based on “BattleZone” arcade game from the 1980s, a first-person shooter the with real-time strategy elements.
The game idea is based on ???BattleZone??? arcade game from the 1980s, a first-person shooter the with real-time strategy elements.
The game was written using the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>, and it&#039;s based off the BasicGame project template. It took us one week to create a playable pre-alpha, including networking.
The project design follows best practices that make it possible to edit maps, vehicles, etc, in jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> without having to change the code This allows 3D graphic designers to contribute models more easily. (If you feel like contributing assets or working on parts of the game code, drop us a note!)
The project design follows best practices that make it possible to edit maps, vehicles, etc, in jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> without having to change the code ??? This allows 3D graphic designers to contribute models more easily. (If you feel like contributing assets or working on parts of the game code, drop us a note!)
</p>
@ -57,15 +57,15 @@ When a human user or an AI performs an action (presses a button), the actual log
The game uses certain terms that might be familiar to you but maybe used in another way, so heres a quick rundown on the terms being used.
</p>
<ul>
<li><div> Player – Logical human or AI player that can enter entities and generally act, only exists as PlayerData “database” with an id.</div>
<li><div> Player ??? Logical human or AI player that can enter entities and generally act, only exists as PlayerData ???database??? with an id.</div>
</li>
<li><div> Entity Spatial with UserData, a world object like character, vehicle, box or factory. The base form is defined only by a String pointing to the j3o which already has all userdata like hitpoints, speed etc.</div>
<li><div> Entity ??? Spatial with UserData, a world object like character, vehicle, box or factory. The base form is defined only by a String pointing to the j3o which already has all userdata like hitpoints, speed etc.</div>
</li>
<li><div> User Human player using a client</div>
<li><div> User ??? Human player using a client</div>
</li>
<li><div> Player Group Group of players that play together (e.g. one human player and one AI companion per client). For now that&#039;s the same as client_id of human player for all AIControled players originating from that client.</div>
<li><div> Player Group ??? Group of players that play together (e.g. one human player and one AI companion per client). For now that&#039;s the same as client_id of human player for all AIControl???ed players originating from that client.</div>
</li>
<li><div> Client Computer connected to server</div>
<li><div> Client ??? Computer connected to server</div>
</li>
</ul>
@ -96,7 +96,7 @@ The gameplay is largely controlled by the ServerGameManager which does gameplay
<div>
<p>
Controls attached to Spatials are generally used like an “array of capabilities” that the entity posesses. So when an entity has a VehicleControl its expected to be a vehicle, when its got a CharacterControl its expected to be a character.
Controls attached to Spatials are generally used like an ???array of capabilities??? that the entity posesses. So when an entity has a VehicleControl its expected to be a vehicle, when its got a CharacterControl its expected to be a character.
Other Controls work completely on their own, like CharacterAnimControl which just uses the CharacterControl of the entity to check if the character is running, jumping etc. and then animates the entity if it has an AnimControl.
</p>
@ -168,7 +168,7 @@ To implement autonomous AI players MonkeyZone uses a system of Commands that are
<div>
<p>
The SphereTrigger is a TriggerControl that is also attached to each AI players current entity. It consists of a GhostControl that checks the overlapping entities around the entity its attached to. It can be assigned a command that is checked with every entity entering the SphereTrigger and executed if applicable (e.g. normal “attack enemy” mode).
The SphereTrigger is a TriggerControl that is also attached to each AI players current entity. It consists of a GhostControl that checks the overlapping entities around the entity its attached to. It can be assigned a command that is checked with every entity entering the SphereTrigger and executed if applicable (e.g. normal ???attack enemy??? mode).
</p>
@ -189,7 +189,7 @@ For each map a navigation mesh is generated that allows the entities to navigate
<p>
Networking is realized in the PhysicsSyncManager which we hope to extend to a state where it can serve as a general sync system for physics based network games.
The sync manager basically puts a timestamp on every message sent from the server and then buffers all arriving messages on the client within a certain time window. This allows to compensate for messages arriving too soon or too late within the constraints of the buffer, a future version might step the clients physics space different to compensate for network delays without “snapping”.
The sync manager basically puts a timestamp on every message sent from the server and then buffers all arriving messages on the client within a certain time window. This allows to compensate for messages arriving too soon or too late within the constraints of the buffer, a future version might step the clients physics space different to compensate for network delays without ???snapping???.
</p>
@ -310,7 +310,7 @@ Have a look at the code and feel free to ask about it, if you want any new featu
MonkeyZone is hosted at GoogleCode, where you can check out the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>-ready project via svn:
</p>
<ol>
<li><div> jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>→Team→Subversion→Checkout,</div>
<li><div> jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>???Team???Subversion???Checkout,</div>
</li>
<li><div> Enter the SVN <acronym title="Uniform Resource Locator">URL</acronym> <code><object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://monkeyzone.googlecode.com/svn/trunk/"><param name="text" value="<html><u>http://monkeyzone.googlecode.com/svn/trunk/</u></html>"><param name="textColor" value="blue"></object></code></div>
</li>

@ -51,7 +51,7 @@ The following example rotates Spatials named &quot;Red Box&quot; or &quot;Blue B
rootNode.collideWith&#40;ray, results&#41;;
// Print the results so we see what is going on
for &#40;int i = 0; i &lt; results.size&#40;&#41;; i++&#41; &#123;
// For each “hit”, we know distance, impact point, geometry.
// For each ???hit???, we know distance, impact point, geometry.
float dist = results.getCollision&#40;i&#41;.getDistance&#40;&#41;;
Vector3f pt = results.getCollision&#40;i&#41;.getContactPoint&#40;&#41;;
String target = results.getCollision&#40;i&#41;.getGeometry&#40;&#41;.getName&#40;&#41;;
@ -115,7 +115,7 @@ The following example rotates Spatials named &quot;Red Box&quot; or &quot;Blue B
rootNode.collideWith&#40;ray, results&#41;;
// (Print the results so we see what is going on:)
for &#40;int i = 0; i &lt; results.size&#40;&#41;; i++&#41; &#123;
// (For each “hit”, we know distance, impact point, geometry.)
// (For each ???hit???, we know distance, impact point, geometry.)
float dist = results.getCollision&#40;i&#41;.getDistance&#40;&#41;;
Vector3f pt = results.getCollision&#40;i&#41;.getContactPoint&#40;&#41;;
String target = results.getCollision&#40;i&#41;.getGeometry&#40;&#41;.getName&#40;&#41;;

@ -212,14 +212,14 @@ You can customize the camera and the viewPort of each view individually. For exa
<p>
You have full control to determine which Nodes the camera can see! It can see the full rootNode
You have full control to determine which Nodes the camera can see! It can see the full rootNode???
</p>
<pre>viewPort1.attachScene&#40;rootNode&#41;;</pre>
<p>
or you can give each camera a special node whose content it can see:
??? or you can give each camera a special node whose content it can see:
</p>
<pre>viewPort2.attachScene&#40;spookyGhostDetectorNode&#41;;</pre>

@ -215,10 +215,10 @@ private Callable&lt;MyWayList&gt; findWay = new Callable&lt;MyWayList&gt;&#40;&#
&nbsp;
//Read or write data from the scene graph -- via the execution queue:
Vector3f location = application.enqueue&#40;new Callable&lt;Vector3f&gt;&#40;&#41; &#123;
    public Vector3f call&#40;&#41; throws Exception &#123;
        //we clone the location so we can use the variable safely on our thread
        return mySpatial.getLocalTranslation&#40;&#41;.clone&#40;&#41;;
    &#125;
????????public Vector3f call&#40;&#41; throws Exception &#123;
????????????????//we clone the location so we can use the variable safely on our thread
????????????????return mySpatial.getLocalTranslation&#40;&#41;.clone&#40;&#41;;
????????&#125;
&#125;&#41;.get&#40;&#41;;
&nbsp;
// This world class allows safe access via synchronized methods

@ -127,7 +127,7 @@ Create a com.jme3.network.Client in the <code>simpleInitApp()</code> method and
...</pre>
<p>
The server address can be in the format &quot;localhost&quot; or &quot;127.0.0.1&quot; (for local testing), or an IP address of a remote host in the format “123.456.78.9”. In this example, we assume the server is running on the localhost.
The server address can be in the format &quot;localhost&quot; or &quot;127.0.0.1&quot; (for local testing), or an IP address of a remote host in the format ???123.456.78.9???. In this example, we assume the server is running on the localhost.
</p>
<p>
@ -209,7 +209,7 @@ You must register each message type to the com.jme3.network.serializing.Serializ
<p>
After a Message was received, a Listener responds to it. The listener can access fields of the message, and send messages back, start new threads, etc. There are two listeners, one on the server, one on the client. For each message type, you implement the responses in either Listeners <code>messageReceived()</code> method.
After a Message was received, a Listener responds to it. The listener can access fields of the message, and send messages back, start new threads, etc. There are two listeners, one on the server, one on the client. For each message type, you implement the responses in either Listeners??? <code>messageReceived()</code> method.
</p>
</div>

@ -35,7 +35,7 @@ Learn to add a Nifty <acronym title="Graphical User Interface">GUI</acronym> to
</li>
<li><div> Lay out your graphical user interface:</div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_xml_layout.html">Lay out the GUI in XML</a> – or –</div>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_xml_layout.html">Lay out the GUI in XML</a> ??? or ???</div>
</li>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_layout.html">Lay out the GUI in Java</a></div>
</li>
@ -43,7 +43,7 @@ Learn to add a Nifty <acronym title="Graphical User Interface">GUI</acronym> to
</li>
<li><div> Integrate the <acronym title="Graphical User Interface">GUI</acronym> into the game:</div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_overlay.html">Overlay the User Interface Over the Screen</a> – or –</div>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_overlay.html">Overlay the User Interface Over the Screen</a> ??? or ???</div>
</li>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_projection.html">Project the User Interface Onto a Texture</a></div>
</li>
@ -146,7 +146,7 @@ Nifty GUIs are made up of the following <strong>elements</strong>:
Learn more from the NiftyGUI page:
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/projects/nifty-gui/files/nifty-gui/nifty-gui-the-manual-v1.0.pdf/download"><param name="text" value="<html><u>Nifty GUI - the Manual</u></html>"><param name="textColor" value="blue"></object></div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/projects/nifty-gui/files/nifty-gui/1.3.2/nifty-gui-the-manual-1.3.2.pdf/download"><param name="text" value="<html><u>Nifty GUI - the Manual</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://nifty-gui.sourceforge.net/projects/1.3-SNAPSHOT/nifty/apidocs/index.html"><param name="text" value="<html><u>Nifty 1.3 JavaDoc</u></html>"><param name="textColor" value="blue"></object></div>
</li>
@ -157,7 +157,7 @@ Learn more from the NiftyGUI page:
</ul>
</div>
<!-- EDIT6 SECTION "External Documentation" [3741-4351] -->
<!-- EDIT6 SECTION "External Documentation" [3741-4357] -->
<h2><a>Next Steps</a></h2>
<div>
@ -173,7 +173,7 @@ Now that you understand the concepts and know where to find more information, le
</ul>
</div>
<!-- EDIT7 SECTION "Next Steps" [4352-4711] -->
<!-- EDIT7 SECTION "Next Steps" [4358-4717] -->
<h2><a>Nifty Logging (Nifty 1.3.1)</a></h2>
<div>
@ -191,5 +191,5 @@ Logger.getLogger(&quot;NiftyInputEventHandlingLog&quot;).setLevel(Level.SEVERE);
</span></div>
</div>
<!-- EDIT8 SECTION "Nifty Logging (Nifty 1.3.1)" [4712-] -->
<!-- EDIT8 SECTION "Nifty Logging (Nifty 1.3.1)" [4718-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:nifty_gui?do=export_xhtmlbody">view online version</a></em></p>

@ -139,7 +139,7 @@ Or this is how you respond to an <acronym title="Graphical User Interface">GUI</
<ol>
<li><div> Add <code>visibleToMouse(true);</code> to the parent element!</div>
</li>
<li><div> Embed one of the <code>interact()</code> elements into the parent element</div>
<li><div> Embed one of the <code>interact???()</code> elements into the parent element</div>
</li>
<li><div> Specify the Java method that you want to call after the interaction. <br/>
Example: <code>interactOnClick(&quot;startGame(hud)&quot;);</code></div>
@ -206,7 +206,7 @@ Back in the MyStartScreen class, you specify what the <code>startGame()</code> a
&#125;</pre>
<p>
The startGame() example simply switches the <acronym title="Graphical User Interface">GUI</acronym> to the <code>hud</code> screen when the user clicks Start. Of course, in a real game, you would perform more steps here: Load the game level, switch to in-game input and navigation handling, set a custom <code>running</code> boolean to true, attach custom in-game AppStates and lots more.
The startGame() example simply switches the <acronym title="Graphical User Interface">GUI</acronym> to the <code>hud</code> screen when the user clicks Start. Of course, in a real game, you would perform more steps here: Load the game level, switch to in-game input and navigation handling, set a custom <code>running</code> boolean to true, attach custom in-game AppStates ??? and lots more.
</p>
<p>

@ -16,7 +16,7 @@
<p>
<strong>Work in progress</strong> You can &quot;draw&quot; the <acronym title="Graphical User Interface">GUI</acronym> to the screen by writing Java code alternatively to using <acronym title="Extensible Markup Language">XML</acronym>. Typically you lay out the static base <acronym title="Graphical User Interface">GUI</acronym> in <acronym title="Extensible Markup Language">XML</acronym>, and use Java commands if you need to change the <acronym title="Graphical User Interface">GUI</acronym> dynamically at runtime. In theory, you can also lay out the whole <acronym title="Graphical User Interface">GUI</acronym> in Java (but we don&#039;t cover that here).
<strong>Work in progress</strong> You can &quot;draw&quot; the <acronym title="Graphical User Interface">GUI</acronym> to the screen by writing Java code ??? alternatively to using <acronym title="Extensible Markup Language">XML</acronym>. Typically you lay out the static base <acronym title="Graphical User Interface">GUI</acronym> in <acronym title="Extensible Markup Language">XML</acronym>, and use Java commands if you need to change the <acronym title="Graphical User Interface">GUI</acronym> dynamically at runtime. In theory, you can also lay out the whole <acronym title="Graphical User Interface">GUI</acronym> in Java (but we don&#039;t cover that here).
</p>
</div>
@ -548,7 +548,7 @@ Our <acronym title="Graphical User Interface">GUI</acronym> plan asks for two bu
&#125;&#125;&#41;;</pre>
<p>
Note that these controls don&#039;t do anything yet we&#039;ll get to that soon.
Note that these controls don&#039;t do anything yet ??? we&#039;ll get to that soon.
</p>
</div>
@ -558,7 +558,7 @@ Note that these controls don&#039;t do anything yet – we&#039;ll get to that s
<p>
Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, See also <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Elements"><param name="text" value="<html><u>Elements</u></html>"><param name="textColor" value="blue"></object> on the Nifty <acronym title="Graphical User Interface">GUI</acronym> site.
Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, ??? See also <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Elements"><param name="text" value="<html><u>Elements</u></html>"><param name="textColor" value="blue"></object> on the Nifty <acronym title="Graphical User Interface">GUI</acronym> site.
</p>
</div>

@ -59,7 +59,7 @@ guiViewPort.addProcessor&#40;niftyDisplay&#41;;
flyCam.setDragToRotate&#40;true&#41;;</pre>
<p>
Currently you do not have a ScreenController we will create one in the next exercise. As soon as you have a screen controller, you will use the commented variant of the <acronym title="Extensible Markup Language">XML</acronym> loading method:
Currently you do not have a ScreenController ??? we will create one in the next exercise. As soon as you have a screen controller, you will use the commented variant of the <acronym title="Extensible Markup Language">XML</acronym> loading method:
</p>
<pre>nifty.fromXml&#40;&quot;Interface/helloworld.xml&quot;, &quot;start&quot;, new MySettingsScreen&#40;&#41;&#41;;</pre>

@ -42,7 +42,7 @@ In JME, game states are implemented as custom <a href="/com/jme3/gde/core/docs/j
</li>
<li><div> Paused: PausedScreen AppState + GuiInputs AppState</div>
</li>
<li><div> Running: HudScreen AppState + InGameInputs AppState + BulletAppState (jme physics), </div>
<li><div> Running: HudScreen AppState + InGameInputs AppState + BulletAppState (jme physics), ???</div>
</li>
</ol>
@ -320,7 +320,7 @@ Inside myCustomStyles.xml you define styles like this:
<span><span>&lt;/nifty-styles&gt;</span></span></pre>
<p>
Learn more about how to create styles by looking at the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Build_from_Source"><param name="text" value="<html><u>Nifty GUI source code</u></html>"><param name="textColor" value="blue"></object> for “nifty-style-black”. Copy it as a template and change it to create your own style.
Learn more about how to create styles by looking at the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Build_from_Source"><param name="text" value="<html><u>Nifty GUI source code</u></html>"><param name="textColor" value="blue"></object> for ???nifty-style-black???. Copy it as a template and change it to create your own style.
</p>
<hr/>

@ -98,8 +98,9 @@ Create an empty screen.xml file in the <code>assets/Interfaces/</code> directory
The following minimal <acronym title="Extensible Markup Language">XML</acronym> file contains a start screen and a HUD screen. (Neither has been defined yet.)
</p>
<pre><span>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span>&lt;nifty xmlns=&quot;http://nifty-gui.sourceforge.net/nifty.xsd&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; </span>
<span> xsi:schemaLocation=&quot;http://nifty-gui.sourceforge.net/nifty.xsd http://nifty-gui.sourceforge.net/nifty.xsd&quot;&gt;</span>
<span>&lt;nifty xmlns=&quot;http://nifty-gui.sourceforge.net/nifty-1.3.xsd&quot;</span>
<span> xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span>
<span> xsi:schemaLocation=&quot;http://nifty-gui.sourceforge.net/nifty-1.3.xsd http://nifty-gui.sourceforge.net/nifty-1.3.xsd&quot;&gt;</span>
<span>&lt;screen id=&quot;start&quot;&gt;</span>
&lt;!-- ... --&gt;
<span><span>&lt;/screen&gt;</span></span>
@ -117,7 +118,7 @@ Every Nifty <acronym title="Graphical User Interface">GUI</acronym> must have a
</p>
</div>
<!-- EDIT4 SECTION "Make Screens" [2140-2864] -->
<!-- EDIT4 SECTION "Make Screens" [2140-2872] -->
<h3><a>Make Layers</a></h3>
<div>
@ -149,7 +150,7 @@ In a layer, you can now add panels and arrange them. Panels are containers that
</p>
</div>
<!-- EDIT5 SECTION "Make Layers" [2865-3638] -->
<!-- EDIT5 SECTION "Make Layers" [2873-3646] -->
<h3><a>Make Panels</a></h3>
<div>
@ -202,7 +203,7 @@ The result should look as follows:
</p>
</div>
<!-- EDIT6 SECTION "Make Panels" [3639-5521] -->
<!-- EDIT6 SECTION "Make Panels" [3647-5529] -->
<h2><a>Adding Content to Panels</a></h2>
<div>
@ -212,7 +213,7 @@ See also <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><
</p>
</div>
<!-- EDIT7 SECTION "Adding Content to Panels" [5522-5700] -->
<!-- EDIT7 SECTION "Adding Content to Panels" [5530-5708] -->
<h3><a>Add Images</a></h3>
<div>
@ -257,7 +258,7 @@ This image is scaled to use 50% of the height and 30% of the width of its contai
</p>
</div>
<!-- EDIT8 SECTION "Add Images" [5701-7387] -->
<!-- EDIT8 SECTION "Add Images" [5709-7395] -->
<h3><a>Add Static Text</a></h3>
<div>
@ -284,7 +285,7 @@ The font used is jME3&#039;s default font &quot;Interface/Fonts/Default.fnt&quot
</p>
</div>
<!-- EDIT9 SECTION "Add Static Text" [7388-8468] -->
<!-- EDIT9 SECTION "Add Static Text" [7396-8476] -->
<h3><a>Add Controls</a></h3>
<div>
@ -332,7 +333,7 @@ Our <acronym title="Graphical User Interface">GUI</acronym> plan asks for two bu
<span><span>&lt;/panel&gt;</span></span></pre>
<p>
Note that these controls don&#039;t do anything yet we&#039;ll get to that soon.
Note that these controls don&#039;t do anything yet ??? we&#039;ll get to that soon.
</p>
</div>
@ -342,11 +343,11 @@ Note that these controls don&#039;t do anything yet – we&#039;ll get to that s
<p>
Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, See also <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Elements"><param name="text" value="<html><u>Elements</u></html>"><param name="textColor" value="blue"></object> on the Nifty <acronym title="Graphical User Interface">GUI</acronym> site.
Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, ??? See also <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Elements"><param name="text" value="<html><u>Elements</u></html>"><param name="textColor" value="blue"></object> on the Nifty <acronym title="Graphical User Interface">GUI</acronym> site.
</p>
</div>
<!-- EDIT10 SECTION "Add Controls" [8469-10437] -->
<!-- EDIT10 SECTION "Add Controls" [8477-10445] -->
<h2><a>Intermediate Result</a></h2>
<div>
@ -364,7 +365,7 @@ Compare this result with the layout draft above.
</p>
</div>
<!-- EDIT11 SECTION "Intermediate Result" [10438-10798] -->
<!-- EDIT11 SECTION "Intermediate Result" [10446-10806] -->
<h2><a>Next Steps</a></h2>
<div>
@ -386,5 +387,5 @@ Integrate the <acronym title="Graphical User Interface">GUI</acronym> into the g
</span></div>
</div>
<!-- EDIT12 SECTION "Next Steps" [10799-] -->
<!-- EDIT12 SECTION "Next Steps" [10807-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:nifty_gui_xml_layout?do=export_xhtmlbody">view online version</a></em></p>

@ -82,8 +82,8 @@ Set both to different colors for a gradient effect (e.g. fire). </td>
</tr>
<tr>
<td> fanning out </td><td> <code>getParticleInfluencer(). setVelocityVariation(variation)</code> </td><td> 0.2f </td><td> How much the direction (<code>setInitialVelocity()</code>) can vary among particles. Use a value between 1 and 0 to create a directed swarm-like cloud of particles. <br/>
1 = Maximum variation, particles emit in random 360° directions (e.g. explosion, butterflies). <br/>
0.5f = particles are emitted within 180° of the initial direction. <br/>
1 = Maximum variation, particles emit in random 360?? directions (e.g. explosion, butterflies). <br/>
0.5f = particles are emitted within 180?? of the initial direction. <br/>
0 = No variation, particles fly in a straight line in direction of start velocity (e.g. lasergun blasts). </td>
</tr>
<tr>
@ -131,7 +131,7 @@ Build up you effect by specifying one parameter after the other. If you change s
</p>
<p>
Use the common Particle.j3md Material Definition and a texture to specify the shape of the particles. The shape is defined by the texture you provide and can be anything – debris, flames, smoke, mosquitoes, leaves, butterflies… be creative.
Use the common Particle.j3md Material Definition and a texture to specify the shape of the particles. The shape is defined by the texture you provide and can be anything ??? debris, flames, smoke, mosquitoes, leaves, butterflies??? be creative.
</p>
<pre> Material flash_mat = new Material&#40;
assetManager, &quot;Common/MatDefs/Misc/Particle.j3md&quot;&#41;;
@ -143,7 +143,7 @@ Use the common Particle.j3md Material Definition and a texture to specify the sh
flash.setSelectRandomImage&#40;true&#41;;</pre>
<p>
The effect texture can be one image, or contain a sprite animation a series of slightly different pictures in equally spaced rows and columns. If you choose the sprite animation:
The effect texture can be one image, or contain a sprite animation ??? a series of slightly different pictures in equally spaced rows and columns. If you choose the sprite animation:
</p>
<ul>
<li><div> Specify the number of rows and columns using setImagesX(2) and setImagesY().</div>

@ -203,6 +203,20 @@ All non-mesh CollisionShapes can be used for dynamic, kinematic, as well as stat
<!-- EDIT7 TABLE [5822-7339] -->
<p>
On a CollisionShape, you can apply a few properties
</p>
<div><table>
<tr>
<th> CollisionShape Method </th><th> Property </th><th> Examples </th>
</tr>
<tr>
<td> setScale(new Vector3f(2f,2f,2f)) </td><td> You can change the scale of collisionshapes (whether it be, Simple or Mesh). You cannot change the scale of a CompoundCollisionShape however. A sphere collision shape, will change its radius based on the X component of the vector passed in. You must scale a collision shape before attaching it to the physicsSpace, or you must readd it to the physicsSpace each time the scale changes. </td><td> Scale a player in the Y axis by 2: <br/>
<code>new Vector3f(1f,2f,1f)</code></td>
</tr>
</table></div>
<!-- EDIT8 TABLE [7393-7930] -->
<p>
The mesh-accurate shapes can use a CollisionShapeFactory as constructor (code samples see below).
</p>
@ -217,7 +231,7 @@ The mesh-accurate shapes can use a CollisionShapeFactory as constructor (code sa
</p>
</div>
<!-- EDIT5 SECTION "Create a CollisionShape" [3846-8009] -->
<!-- EDIT5 SECTION "Create a CollisionShape" [3846-8600] -->
<h3><a>CollisionShape Code Samples</a></h3>
<div>
<ul>
@ -248,7 +262,7 @@ The mesh-accurate shapes can use a CollisionShapeFactory as constructor (code sa
</ul>
</div>
<!-- EDIT8 SECTION "CollisionShape Code Samples" [8010-9136] -->
<!-- EDIT9 SECTION "CollisionShape Code Samples" [8601-9727] -->
<h2><a>Create PhysicsControl</a></h2>
<div>
@ -269,29 +283,29 @@ Solid immobile floors, walls, static obstacles.</td>
<td>GhostControl</td><td>Use for collision and intersection detection between physical objects. A GhostControl itself is <em>non-solid</em> and invisible. GhostControl moves with the Spatial it is attached to. Use GhostControls to <a href="/com/jme3/gde/core/docs/jme3/advanced/physics_listeners.html">implement custom game interactions</a> by adding it to a visible Geometry. </td><td>A monster&#039;s &quot;aggro radius&quot;, CharacterControl collisions, motion detectors, photo-electric alarm sensors, poisonous or radioactive perimeters, life-draining ghosts, etc. </td>
</tr>
</table></div>
<!-- EDIT10 TABLE [9528-10507] --><div><table>
<!-- EDIT11 TABLE [10119-11098] --><div><table>
<tr>
<th>Special PhysicsControls</th><th> Usage</th><th> Examples </th>
</tr>
<tr>
<td>VehicleControl <br/>
PhysicsVehicleWheel</td><td> Special Control used for <a href="/com/jme3/gde/core/docs/jme3/advanced/vehicles.html">&quot;terrestrial&quot; vehicles with suspension and wheels</a>. </td><td>Cars, tanks, hover crafts, ships, motorcycles</td>
PhysicsVehicleWheel</td><td> Special Control used for <a href="/com/jme3/gde/core/docs/jme3/advanced/vehicles.html">&quot;terrestrial&quot; vehicles with suspension and wheels</a>. </td><td>Cars, tanks, hover crafts, ships, motorcycles???</td>
</tr>
<tr>
<td>CharacterControl</td><td>Special Control used for <a href="/com/jme3/gde/core/docs/jme3/advanced/walking_character.html">Walking Character</a>s.</td><td>Upright walking persons, animals, robots </td>
<td>CharacterControl</td><td>Special Control used for <a href="/com/jme3/gde/core/docs/jme3/advanced/walking_character.html">Walking Character</a>s.</td><td>Upright walking persons, animals, robots??? </td>
</tr>
<tr>
<td>RagDollControl</td><td>Special Control used for <a href="/com/jme3/gde/core/docs/jme3/advanced/ragdoll.html">collapsing, flailing, or falling characters</a> </td><td>Falling persons, animals, robots, &quot;Rag dolls&quot;</td>
</tr>
</table></div>
<!-- EDIT11 TABLE [10509-11021] -->
<!-- EDIT12 TABLE [11100-11612] -->
<p>
Click the links for details on the special PhysicsControls. This article is about RigidBodyControl.
</p>
</div>
<!-- EDIT9 SECTION "Create PhysicsControl" [9137-11123] -->
<!-- EDIT10 SECTION "Create PhysicsControl" [9728-11714] -->
<h3><a>PhysicsControls Code Samples</a></h3>
<div>
@ -325,12 +339,12 @@ The following creates a MeshCollisionShape for a whole loaded (static) scene:
gameLevel.addControl&#40;new RigidBodyControl&#40;0.0f&#41;&#41;; // explicit zero mass, implicit MeshCollisionShape</pre>
<p>
<p><div>Spheres and Boxes automatically fall back on the correct default CollisionShape if you do not specify a CollisionShape in the RigidBodyControl constructor. Complex static objects can fall back on MeshCollisionShapes.
<p><div>Spheres and Boxes automatically fall back on the correct default CollisionShape if you do not specify a CollisionShape in the RigidBodyControl constructor. Complex static objects can fall back on MeshCollisionShapes, unless it is a Node, in which case it will become a CompoundCollisionShape containing a MeshCollisionShape
</div></p>
</p>
</div>
<!-- EDIT12 SECTION "PhysicsControls Code Samples" [11124-12596] -->
<!-- EDIT13 SECTION "PhysicsControls Code Samples" [11715-13294] -->
<h2><a>Add PhysicsControl to Spatial</a></h2>
<div>
@ -347,7 +361,7 @@ For each physical Spatial in the scene:
</ol>
</div>
<!-- EDIT13 SECTION "Add PhysicsControl to Spatial" [12597-12844] -->
<!-- EDIT14 SECTION "Add PhysicsControl to Spatial" [13295-13542] -->
<h2><a>Add PhysicsControl to PhysicsSpace</a></h2>
<div>
@ -374,7 +388,46 @@ myThing_geo.removeFromParent&#40;&#41;;</pre>
</p>
</div>
<!-- EDIT14 SECTION "Add PhysicsControl to PhysicsSpace" [12845-13660] -->
<!-- EDIT15 SECTION "Add PhysicsControl to PhysicsSpace" [13543-14358] -->
<h2><a>Changing the Scale of a PhysicsControl</a></h2>
<div>
<p>
To change the scale of a PhysicsControl you must change the scale of the collisionshape which belongs to it.
</p>
<p>
MeshCollisionShapes can have a scale correctly set, but it only works when being constructed on a geometry (not a node). CompoundCollisionShapes cannot be scaled at this time(the type obtained when creating a CollisionShape from a Node i.e using imported models).
</p>
<p>
When you import a model from blender, it often comes as a Node (even if it only contains 1 mesh), which is by de-facto automatically converted to a CompoundCollisionShape. So when you try to scale this it won&#039;t work! Below illustrates an example, of how to scale an imported model:
</p>
<pre>// Doesn't scale
// This modified version contains Node -&gt; Geometry (name = &quot;MonkeyHeadGeom&quot;)
Spatial model = assetManager.loadModel&#40;&quot;Models/MonkeyHead.j3o&quot;&#41;; model.addControl&#40;new RigidBodyControl&#40;0&#41;&#41;;
// Won't work as this is now a CompoundCollisionShape containing a MeshCollisionShape
model.getControl&#40;RigidBodyControl.class&#41;.getCollisionShape&#40;&#41;.setScale&#40;new Vector3f&#40;2, 2, 2&#41;&#41;;
bulletAppState.getPhysicsSpace&#40;&#41;.add&#40;model&#41;;
&nbsp;
// Works fine
Spatial model = assetManager.loadModel&#40;&quot;Models/MonkeyHead.j3o&quot;&#41;; // Same Model
// IMPORTANT : You must navigate to the Geometry for this to work
Geometry geom = &#40;&#40;Geometry&#41; &#40;&#40;Node&#41; model&#41;.getChild&#40;&quot;MonkeyHeadGeom&quot;&#41;&#41;;
geom.addControl&#40;new RigidBodyControl&#40;0&#41;&#41;;
// Works great (scaling of a MeshCollisionShape)
geom.getControl&#40;RigidBodyControl.class&#41;.getCollisionShape&#40;&#41;.setScale&#40;new Vector3f&#40;2, 2, 2&#41;&#41;;
bulletAppState.getPhysicsSpace&#40;&#41;.add&#40;geom&#41;;</pre>
<p>
With the corresponding output below:
<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://i.imgur.com/fAXlF.png"><param name="text" value="<html><u>External Link</u></html>"><param name="textColor" value="blue"></object>
<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://i.imgur.com/Josua.png"><param name="text" value="<html><u>External Link</u></html>"><param name="textColor" value="blue"></object>
</p>
</div>
<!-- EDIT16 SECTION "Changing the Scale of a PhysicsControl" [14359-16109] -->
<h3><a>PhysicsSpace Code Samples</a></h3>
<div>
@ -404,9 +457,9 @@ setWorldMin(new Vector3f(-10000f, -10000f, -10000f));</td><td>Specifies the size
<td>setCcdMotionThreshold()</td><td>The amount of motion in 1 physics tick to trigger the continuous motion detection in moving objects that push one another. Rarely used, but necessary if your moving objects get stuck or roll through one another.</td>
</tr>
</table></div>
<!-- EDIT16 TABLE [13887-15094] -->
<!-- EDIT18 TABLE [16336-17543] -->
</div>
<!-- EDIT15 SECTION "PhysicsSpace Code Samples" [13661-15095] -->
<!-- EDIT17 SECTION "PhysicsSpace Code Samples" [16110-17544] -->
<h2><a>Specify Physical Properties</a></h2>
<div>
@ -446,7 +499,7 @@ This setting has an impact on performance, so use it sparingly. </td><td> Brick:
Rubber ball: 1.0f </td>
</tr>
</table></div>
<!-- EDIT18 TABLE [15320-16830] -->
<!-- EDIT20 TABLE [17769-19279] -->
<p>
On a RigidBodyControl, you can apply the following physical forces:
@ -467,15 +520,15 @@ On a RigidBodyControl, you can apply the following physical forces:
(See detailed explanation below.) </td>
</tr>
</table></div>
<!-- EDIT19 TABLE [16901-17511] -->
<!-- EDIT21 TABLE [19350-19960] -->
</div>
<!-- EDIT17 SECTION "Specify Physical Properties" [15096-17512] -->
<!-- EDIT19 SECTION "Specify Physical Properties" [17545-19960] -->
<h3><a>Kinematic vs Dynamic vs Static</a></h3>
<div>
<p>
All physical objects
All physical objects???
</p>
<ul>
<li><div> must not overlap. </div>
@ -490,7 +543,7 @@ All physical objects…
<td> Property </td><th> Static </th><th> Kinematic </th><th> Dynamic </th>
</tr>
<tr>
<th> Examples</th><td>Immobile obstacles: Floors, walls, buildings, </td><td>Remote-controlled solid objects: Airships, meteorites, elevators, doors; networked or remote-controlled NPCs; invisible &quot;airhooks&quot; for hinges and joints.</td><td>Interactive objects: Rolling balls, movable crates, falling pillars, zero-g space ship</td>
<th> Examples</th><td>Immobile obstacles: Floors, walls, buildings, ???</td><td>Remote-controlled solid objects: Airships, meteorites, elevators, doors; networked or remote-controlled NPCs; invisible &quot;airhooks&quot; for hinges and joints.</td><td>Interactive objects: Rolling balls, movable crates, falling pillars, zero-g space ship???</td>
</tr>
<tr>
<th> Does it have a mass?</th><td>no, 0.0f</td><td>yes<sup><a href="#fn__1">1)</a></sup>, &gt;0.0f </td><td>yes, &gt;0.0f</td>
@ -519,7 +572,7 @@ setKinematic(true);</td><td>setMass(1f); <br/>
setKinematic(false);</td>
</tr>
</table></div>
<!-- EDIT21 TABLE [17749-18808] -->
<!-- EDIT23 TABLE [20197-21256] -->
</div>
<h4><a>When Do I Use Kinematic Objects?</a></h4>
@ -529,7 +582,7 @@ setKinematic(false);</td>
</li>
<li><div> When they collide, Kinematics push dynamic objects, but a dynamic object never pushes a Kinematic. </div>
</li>
<li><div> You can hang kinematics up &quot;in mid-air&quot; and attach other PhysicsControls to them using <a href="/com/jme3/gde/core/docs/jme3/advanced/hinges_and_joints.html">hinges and joints</a>. Picture them as &quot;air hooks&quot; for flying aircraft carriers, floating islands in the clouds, suspension bridges, swings, chains </div>
<li><div> You can hang kinematics up &quot;in mid-air&quot; and attach other PhysicsControls to them using <a href="/com/jme3/gde/core/docs/jme3/advanced/hinges_and_joints.html">hinges and joints</a>. Picture them as &quot;air hooks&quot; for flying aircraft carriers, floating islands in the clouds, suspension bridges, swings, chains??? </div>
</li>
<li><div> You can use Kinematics to create mobile remote-controlled physical objects, such as moving elevator platforms, flying blimps/airships. You have full control how Kinematics move, they never &quot;fall&quot; or &quot;topple over&quot;.</div>
</li>
@ -542,7 +595,7 @@ setKinematic(false);</td>
</p>
</div>
<!-- EDIT20 SECTION "Kinematic vs Dynamic vs Static" [17513-19914] -->
<!-- EDIT22 SECTION "Kinematic vs Dynamic vs Static" [19961-22362] -->
<h2><a>Forces: Moving Dynamic Objects</a></h2>
<div>
@ -562,25 +615,25 @@ Use the following methods to move dynamic physical objects.
<td> setAngularVelocity(new Vector3f(0f,0f,1f)) </td><td> Set the rotational speed of the object; the x, y and z component are the speed of rotation around that axis. </td>
</tr>
<tr>
<td> applyCentralForce() </td><td> Move (push) the object once with a certain moment, expressed as a Vector3f. </td>
<td> applyCentralForce(???) </td><td> Move (push) the object once with a certain moment, expressed as a Vector3f. </td>
</tr>
<tr>
<td> applyForce() </td><td> Move (push) the object once with a certain moment, expressed as a Vector3f. Optionally, you can specify where on the object the pushing force hits. </td>
<td> applyForce(???) </td><td> Move (push) the object once with a certain moment, expressed as a Vector3f. Optionally, you can specify where on the object the pushing force hits. </td>
</tr>
<tr>
<td> applyTorque() </td><td> Rotate (twist) the object once around its axes, expressed as a Vector3f. </td>
<td> applyTorque(???) </td><td> Rotate (twist) the object once around its axes, expressed as a Vector3f. </td>
</tr>
<tr>
<td> applyImpulse() </td><td> An idealised change of momentum. This is the kind of push that you would use on a pool billiard ball. </td>
<td> applyImpulse(???) </td><td> An idealised change of momentum. This is the kind of push that you would use on a pool billiard ball. </td>
</tr>
<tr>
<td> applyTorqueImpulse() </td><td> An idealised change of momentum. This is the kind of push that you would use on a pool billiard ball. </td>
<td> applyTorqueImpulse(???) </td><td> An idealised change of momentum. This is the kind of push that you would use on a pool billiard ball. </td>
</tr>
<tr>
<td> clearForces()</td><td>Cancels out all forces (force, torque) etc and stops the motion.</td>
</tr>
</table></div>
<!-- EDIT23 TABLE [20020-21009] -->
<!-- EDIT25 TABLE [22468-23457] -->
<p>
<p><div>It is technically possible to position PhysicsControls using setLocalTranslation(), e.g. to place them in their start position in the scene. However you must be very careful not to cause an &quot;impossible state&quot; where one physical object overlaps with another! Within the game, you typically use the setters shown here exclusively.
@ -602,7 +655,7 @@ PhysicsControls also support the following advanced features:
<td> setCollideWithGroups() <br/>
setCollisionGroup() <br/>
addCollideWithGroup(COLLISION_GROUP_01) <br/>
removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer bit masks enums are available in the CollisionObject. All physics objects are by default in COLLISION_GROUP_01. Two objects collide when the collideWithGroups set of one contains the Collision Group of the other. Use this to improve performance by grouping objects that will never collide in different groups (the the engine saves times because it does not need to check on them).</td>
removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer bit masks ??? enums are available in the CollisionObject. All physics objects are by default in COLLISION_GROUP_01. Two objects collide when the collideWithGroups set of one contains the Collision Group of the other. Use this to improve performance by grouping objects that will never collide in different groups (the the engine saves times because it does not need to check on them).</td>
</tr>
<tr>
<td> setDamping(float, float)</td><td>The first value is the linear threshold and the second the angular. This simulates dampening of forces, for example for underwater scenes.</td>
@ -620,7 +673,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer
<td> setCcdSweptSphereRadius(.5f)</td><td>Bullet does not use the full collision shape for continuous collision detection, instead it uses a &quot;swept sphere&quot; shape to approximate a motion, which can be imprecise and cause strange behaviours such as objects passign through one another or getting stuck. Only relevant for fast moving dynamic bodies. </td>
</tr>
</table></div>
<!-- EDIT24 TABLE [21427-23383] -->
<!-- EDIT26 TABLE [23875-25831] -->
<p>
<p><div> You can <code>setApplyPhysicsLocal(true)</code> for an object to make it move relatively to its local physics space. You would do that if you need a physics space that moves with a node (e.g. a spaceship with artificial gravity surrounded by zero-g space). By default, it&#039;s set to false, and all movement is relative to the world.
@ -628,12 +681,12 @@ removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer
</p>
</div>
<!-- EDIT22 SECTION "Forces: Moving Dynamic Objects" [19915-23725] -->
<!-- EDIT24 SECTION "Forces: Moving Dynamic Objects" [22363-26173] -->
<h2><a>Best Practices</a></h2>
<div>
<ul>
<li><div> <strong>Multiple Objects Too Slow?</strong> Do not overuse PhysicsControls. Although PhysicsControls are put to “sleep” when they are not moving, creating a world solely out of dynamic physics objects will quickly bring you to the limits of your computer&#039;s capabilities. <br/>
<strong>Solution:</strong> Improve performance by replacing some physical Spatials with non-physical Spatials. Use the non-physical ones for non-solid things for which you do not need to detect collisions foliage, plants, effects, ghosts, all remote or unreachable objects.</div>
<li><div> <strong>Multiple Objects Too Slow?</strong> Do not overuse PhysicsControls. Although PhysicsControls are put to ???sleep??? when they are not moving, creating a world solely out of dynamic physics objects will quickly bring you to the limits of your computer&#039;s capabilities. <br/>
<strong>Solution:</strong> Improve performance by replacing some physical Spatials with non-physical Spatials. Use the non-physical ones for non-solid things for which you do not need to detect collisions ??? foliage, plants, effects, ghosts, all remote or unreachable objects.</div>
</li>
</ul>
<ul>
@ -642,7 +695,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer
</li>
</ul>
<ul>
<li><div> <strong>Eject?</strong> If you have physical nodes jittering wildy and being ejected &quot;for no apparent reason&quot;, it means you have created an impossible state solid objects overlapping. This can happen when you position solid spatials too close to other solid spatials, e.g. when moving them with setLocalTranslation(). <br/>
<li><div> <strong>Eject?</strong> If you have physical nodes jittering wildy and being ejected &quot;for no apparent reason&quot;, it means you have created an impossible state ??? solid objects overlapping. This can happen when you position solid spatials too close to other solid spatials, e.g. when moving them with setLocalTranslation(). <br/>
<strong>Solution:</strong> Use the debug mode to make CollisionShapes visible and verify that CollisionShapes do not overlap. <pre>bulletAppState.getPhysicsSpace&#40;&#41;.enableDebug&#40;assetManager&#41;;</pre>
</div>
</li>
@ -664,7 +717,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer
</span></div>
</div>
<!-- EDIT25 SECTION "Best Practices" [23726-] --><div>
<!-- EDIT27 SECTION "Best Practices" [26174-] --><div>
<div><sup><a href="#fnt__1">1)</a></sup>
Inertia is calculated for kinematic objects, and you need mass to do that.</div>
</div>

@ -150,7 +150,7 @@ If however you want to respond to a collision event (com.jme3.bullet.collision.P
</li>
<li><div> Playing a sound (e.g. explosion, ouch)</div>
</li>
<li><div> and countless more, depending on your game</div>
<li><div> ??? and countless more, depending on your game</div>
</li>
</ul>

@ -4,7 +4,7 @@
<p>
The awesome SeaMonkey WaterFilter is highly configurable. It can render any type of water and also simulates the underwater part of the effect, including light effects called caustics. The effect is based on <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.gamedev.net/page/reference/index.html/_//feature/fprogramming/rendering-water-as-a-post-process-effect-r2642"><param name="text" value="<html><u>Wojciech Tomans Rendering Water as a Post-process Effect</u></html>"><param name="textColor" value="blue"></object> published on gamedev.net. Here&#039;s a video:
The awesome SeaMonkey WaterFilter is highly configurable. It can render any type of water and also simulates the underwater part of the effect, including light effects called caustics. The effect is based on <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.gamedev.net/page/reference/index.html/_//feature/fprogramming/rendering-water-as-a-post-process-effect-r2642"><param name="text" value="<html><u>Wojciech Toman???s Rendering Water as a Post-process Effect</u></html>"><param name="textColor" value="blue"></object> published on gamedev.net. Here&#039;s a video:
</p>
<p>
@ -23,11 +23,11 @@ The awesome SeaMonkey WaterFilter is highly configurable. It can render any type
<p>
The effect is part of a deferred rendering process, taking advantage of the pre-computed position buffer and back buffer (a texture representing the screens pixels position in view space, and a texture of the rendered scene).
The effect is part of a deferred rendering process, taking advantage of the pre-computed position buffer and back buffer (a texture representing the screen???s pixels position in view space, and a texture of the rendered scene).
</p>
<p>
After some calculation, this allows to reconstruct the position in world space for each pixel on the screen. &quot;If a pixel is under a given water height, lets render it as a blue pixel!&quot; Blue pixel? Not exactly, we want waves, we want ripples, we want foam, we want reflection and refraction.
After some calculation, this allows to reconstruct the position in world space for each pixel on the screen. &quot;If a pixel is under a given water height, let???s render it as a blue pixel!&quot; Blue pixel? Not exactly, we want waves, we want ripples, we want foam, we want reflection and refraction.
</p>
<p>
@ -49,11 +49,11 @@ There are several ways of reconstructing the world space position of a pixel fro
</p>
<p>
Now we have the rendered scene in a texture, and we can reconstruct the position in world space of each pixel. Were good to go!
Now we have the rendered scene in a texture, and we can reconstruct the position in world space of each pixel. We???re good to go!
</p>
<p>
Nehon
??? Nehon
</p>
</div>

@ -18,7 +18,7 @@ The jMonkeyEngine3 has built-in support for <object classid="java:org.netbeans.m
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/bullet/TestRagDoll.java"><param name="text" value="<html><u>TestRagDoll.java</u></html>"><param name="textColor" value="blue"></object> (Tip: Click to pull the ragdoll up)</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/bullet/TestBoneRagdoll.java"><param name="text" value="<html><u>TestBoneRagdoll.java</u></html>"><param name="textColor" value="blue"></object> This ragdoll replaces a rigged model of a character in the moment it is &quot;shot&quot; to simulate a collapsing person. (Also note DoF of the limbs.)</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/bullet/TestBoneRagdoll.java"><param name="text" value="<html><u>TestBoneRagdoll.java</u></html>"><param name="textColor" value="blue"></object> ??? This ragdoll replaces a rigged model of a character in the moment it is &quot;shot&quot; to simulate a collapsing person. (Also note DoF of the limbs.)</div>
</li>
</ul>
@ -92,7 +92,7 @@ Node lLegL = createLimb&#40;0.2f, 0.5f, new Vector3f&#40;-0.25f,-2.2f, 0&#41
Node lLegR = createLimb&#40;0.2f, 0.5f, new Vector3f&#40; 0.25f,-2.2f, 0&#41;, false&#41;;</pre>
<p>
You now have the outline of a person. But if you ran the application now, the individual limbs would fall down independently of one another the ragdoll is still lacking joints.
You now have the outline of a person. But if you ran the application now, the individual limbs would fall down independently of one another ??? the ragdoll is still lacking joints.
</p>
</div>
@ -201,7 +201,7 @@ Read the <a href="/com/jme3/gde/core/docs/jme3/advanced/physics#responding_to_a_
<p>
If you experience weird behaviour in a ragdoll – such as exploding into pieces and then reassembling – check your collision shapes. Verify you did not position the limbs too close to one another when assmebling the ragdoll. You typically see physical nodes being ejected when their collision shapes intersect, which puts physics in an impossible state.
If you experience weird behaviour in a ragdoll ??? such as exploding into pieces and then reassembling ??? check your collision shapes. Verify you did not position the limbs too close to one another when assmebling the ragdoll. You typically see physical nodes being ejected when their collision shapes intersect, which puts physics in an impossible state.
</p>
<div><span>
<a href="/wiki/doku.php/tag:documentation?do=showtag&amp;tag=tag%3Adocumentation">documentation</a>,

@ -11,7 +11,7 @@ When different people test your new game, you may get feedback that the game doe
You can read (and print) the capabilities of the user&#039;s graphic card using the <code>com.jme3.renderer.Caps</code> class:
</p>
<pre>Collection&lt;Caps&gt; caps = renderer.getCaps&#40;&#41;;
Logger.getLogger&#40;HelloWorld.class.getName&#40;&#41;&#41;.log&#40;Level.INFO, “Caps: &#123;0&#125;, caps.toString&#40;&#41;&#41;;</pre>
Logger.getLogger&#40;HelloWorld.class.getName&#40;&#41;&#41;.log&#40;Level.INFO, ???Caps: &#123;0&#125;???, caps.toString&#40;&#41;&#41;;</pre>
<p>
<strong>Note:</strong> Replace <code>HelloWorld</code> by the name of the class where you are using this line.

@ -77,7 +77,7 @@ The following example overrides <code>simpleInitApp()</code> in SimpleApplicatio
&nbsp;</pre>
<p>
<p><div>Here you see why we save user data inside spatials so it can be saved and loaded together with the .j3o file. If you have game data outside Spatials, you have to remember to save() and load(), and get() and set() it yourself.
<p><div>Here you see why we save user data inside spatials ??? so it can be saved and loaded together with the .j3o file. If you have game data outside Spatials, you have to remember to save() and load(), and get() and set() it yourself.
</div></p>
</p>
@ -153,11 +153,11 @@ To make a custom class savable:
</li>
</ul>
</li>
<li><div> Add one line that <code>read()</code>s the data to the JmeImport input capsule. </div>
<li><div> Add one line that <code>read???()</code>s the data to the JmeImport input capsule. </div>
<ul>
<li><div> On the left side of the assignment, specify the class field that you are restoring</div>
</li>
<li><div> On the right side, use the appropriate <code>capsule.read()</code> method for the data type. Specify the String name of the variable (must be the same as you used in the <code>write() method</code>), and again specify a default value.</div>
<li><div> On the right side, use the appropriate <code>capsule.read???()</code> method for the data type. Specify the String name of the variable (must be the same as you used in the <code>write() method</code>), and again specify a default value.</div>
</li>
</ul>
</li>

@ -17,15 +17,15 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w
</p>
<ul>
<li><div> com.jme3.scene.shape.Box A cube or cuboid. Single-sided Quad faces (outside only). </div>
<li><div> com.jme3.scene.shape.Box ??? A cube or cuboid. Single-sided Quad faces (outside only). </div>
</li>
<li><div> com.jme3.scene.shape.StripBox A cube or cuboid. Solid filled faces (inside and outside).</div>
<li><div> com.jme3.scene.shape.StripBox ??? A cube or cuboid. Solid filled faces (inside and outside).</div>
</li>
</ul>
<ul>
<li><div> com.jme3.scene.shape.Cylinder A disk or pillar.</div>
<li><div> com.jme3.scene.shape.Cylinder ??? A disk or pillar.</div>
</li>
<li><div> com.jme3.scene.shape.Sphere A ball or elipsoid. </div>
<li><div> com.jme3.scene.shape.Sphere ??? A ball or elipsoid. </div>
</li>
</ul>
@ -35,7 +35,7 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w
</p>
<ul>
<li><div> com.jme3.scene.shape.Dome A semi-sphere, e.g. SkyDome.</div>
<li><div> com.jme3.scene.shape.Dome ??? A semi-sphere, e.g. SkyDome.</div>
<ul>
<li><div> For a cone, set the Dome&#039;s radialSamples&gt;4 and planes=2. </div>
</li>
@ -45,11 +45,11 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w
</li>
</ul>
<ul>
<li><div> com.jme3.scene.shape.Torus An single-holed torus or &quot;donut&quot;.</div>
<li><div> com.jme3.scene.shape.Torus ??? An single-holed torus or &quot;donut&quot;.</div>
</li>
<li><div> com.jme3.scene.shape.PQTorus A parameterized torus. A PQ-Torus looks like a <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Torus_knot"><param name="text" value="<html><u>donut knotted into spirals</u></html>"><param name="textColor" value="blue"></object>. <img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/nurbs_3-d_surface.png"><img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/220px-trefoil_knot_arb.png"><img src="/wiki/lib/exe/fetch.php"></div>
<li><div> com.jme3.scene.shape.PQTorus ??? A parameterized torus. A PQ-Torus looks like a <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Torus_knot"><param name="text" value="<html><u>donut knotted into spirals</u></html>"><param name="textColor" value="blue"></object>. <img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/nurbs_3-d_surface.png"><img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/220px-trefoil_knot_arb.png"><img src="/wiki/lib/exe/fetch.php"></div>
</li>
<li><div> com.jme3.scene.shape.Surface A curved surface (called <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/File:NURBS_3-D_surface.gif"><param name="text" value="<html><u>NURBS</u></html>"><param name="textColor" value="blue"></object>) described by knots, weights and control points. Compare with shape.Curve.</div>
<li><div> com.jme3.scene.shape.Surface ??? A curved surface (called <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/File:NURBS_3-D_surface.gif"><param name="text" value="<html><u>NURBS</u></html>"><param name="textColor" value="blue"></object>) described by knots, weights and control points. Compare with shape.Curve.</div>
</li>
</ul>
@ -58,11 +58,11 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w
<h2><a>Non-3D shapes</a></h2>
<div>
<ul>
<li><div> com.jme3.scene.shape.Quad A flat 2D rectangle (single-sided, center is in bottom-left corner)</div>
<li><div> com.jme3.scene.shape.Quad ??? A flat 2D rectangle (single-sided, center is in bottom-left corner)</div>
</li>
<li><div> com.jme3.scene.shape.Line A straight 1D line defined by a start and end point.</div>
<li><div> com.jme3.scene.shape.Line ??? A straight 1D line defined by a start and end point.</div>
</li>
<li><div> com.jme3.scene.shape.Curve A curved 1D spline. Compare with shape.Surface.</div>
<li><div> com.jme3.scene.shape.Curve ??? A curved 1D spline. Compare with shape.Surface.</div>
</li>
</ul>
@ -76,11 +76,11 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w
Do not mix up these visible com.jme3.shapes with similarly named classes from the com.jme3.math package. Choose the right package when letting your IDE fill in the import statements!
</p>
<ul>
<li><div> com.jme3.math.Line is invisible, has a direction, goes through a point, infinite length.</div>
<li><div> com.jme3.math.Line ??? is invisible, has a direction, goes through a point, infinite length.</div>
</li>
<li><div> com.jme3.math.Ray is invisible, has a direction and start point, but no end.</div>
<li><div> com.jme3.math.Ray ??? is invisible, has a direction and start point, but no end.</div>
</li>
<li><div> com.jme3.math.Spline is an invisible curve.</div>
<li><div> com.jme3.math.Spline ??? is an invisible curve.</div>
</li>
<li><div> etc</div>
</li>
@ -131,7 +131,7 @@ To add a shape to the scene:
You can compose more complex custom Geometries out of simple Shapes. Think of the buildings in games like Angry Birds, or the building blocks in Second Life (&quot;prims&quot;) and in Tetris (&quot;Tetrominos&quot;).
</p>
<ol>
<li><div> Create a Node. By default it is located at the origin (0/0/0) leave the Node there for now.</div>
<li><div> Create a Node. By default it is located at the origin (0/0/0) ??? leave the Node there for now.</div>
</li>
<li><div> Create your shapes and wrap each into a Geometry, as just described.</div>
</li>
@ -144,7 +144,7 @@ You can compose more complex custom Geometries out of simple Shapes. Think of th
</ol>
<p>
The order is important: First arrange around origin, then transform. Otherwise, transformations are applied around the wrong center (pivot). Of course, you can attach your constellation to other pivot Nodes to create even more complex shapes (a chair, a furnished room, a house, a city, ), but again, arrange them around the origin first before you transform them. Obviously, such composed Geometries are simpler than hand-sculpted meshes from a mesh editor.
The order is important: First arrange around origin, then transform. Otherwise, transformations are applied around the wrong center (pivot). Of course, you can attach your constellation to other pivot Nodes to create even more complex shapes (a chair, a furnished room, a house, a city, ???), but again, arrange them around the origin first before you transform them. Obviously, such composed Geometries are simpler than hand-sculpted meshes from a mesh editor.
</p>
</div>
@ -184,7 +184,7 @@ rootNode.attachChild&#40;geom&#41;; // attach geometry to a n
<p>
* <a href="/com/jme3/gde/core/docs/jme3/intermediate/optimization.html">Optimization</a> The GeometryBatchFactory class combines several of your shapes with the same texture into one mesh with one texture.
* <a href="/com/jme3/gde/core/docs/jme3/intermediate/optimization.html">Optimization</a> ??? The GeometryBatchFactory class combines several of your shapes with the same texture into one mesh with one texture.
</p>
<div><span>
<a href="/wiki/doku.php/tag:spatial?do=showtag&amp;tag=tag%3Aspatial">spatial</a>,

@ -89,7 +89,7 @@ Box or Sphere?
</li>
</ul>
</li>
<li><div> If you have access to sphere map textures – specially projected sky images that fit inside a sphere – then you use a SkySphere or SkyDome. </div>
<li><div> If you have access to sphere map textures ??? specially projected sky images that fit inside a sphere ??? then you use a SkySphere or SkyDome. </div>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://wiki.delphigl.com/index.php/Datei:Skysphere.jpg"><param name="text" value="<html><u>SkySphere example</u></html>"><param name="textColor" value="blue"></object></div>
</li>

@ -43,7 +43,7 @@ In your Java code, a Spatial is either an instance of <code>com.jme3.scene.Node<
<th> Visibility: </th><td> A Geometry represents a <strong>visible</strong> 3D object in the scene graph. </td><td> A Node is an <strong>invisible &quot;handle&quot;</strong> for a group of Spatials in the scene graph. </td>
</tr>
<tr>
<th> Purpose: </th><td> Use Geometries to represent an object&#039;s <strong>looks</strong>: Every Geometry contains a polygon mesh and a material, specifying its shape, color, texture, and opacity/transparency. <br/>
<th> Purpose: </th><td> Use Geometries to represent an object&#039;s <strong>look</strong>: Every Geometry contains a polygon mesh and a material, specifying its shape, color, texture, and opacity/transparency. <br/>
You attach Geometries to Nodes. </td><td> Use Nodes to <strong>structure and group</strong> Geometries and other Nodes. Every Node is attached to one parent node, and each node can have zero or more children (Nodes or Geometries) attached to itself. <br/>
<strong>When you transform (move, rotate, etc) a parent node, all its children are transformed (moved, rotated, etc).</strong> </td>
</tr>
@ -53,10 +53,10 @@ mesh and material; </td><td> Transformations; custom user data; <br/>
no mesh, no material.</td>
</tr>
<tr>
<th> Examples: </th><td> Box, sphere, player, building, terrain, vehicle, missiles, NPCs, etc </td><td> rootNode, guiNode, audioNode, a custom grouping node such as vehicleNode or shipNode with passengers attached, etc. </td>
<th> Examples: </th><td> Box, sphere, player, building, terrain, vehicle, missiles, NPCs, etc??? </td><td> rootNode, guiNode, audioNode, a custom grouping node such as vehicleNode or shipNode with passengers attached, etc. </td>
</tr>
</table></div>
<!-- EDIT3 TABLE [1191-2549] -->
<!-- EDIT3 TABLE [1191-2548] -->
<p>
<p><div>You never create a Spatial with <code><del>Spatial s = new Spatial();</del></code>! A Spatial is an abstract concept, like a mammal (there is no actual creature called &quot;mammal&quot; walking around here). You create either a com.jme3.scene.Node or com.jme3.scene.Geometry instance. Some methods, however, require a <code>Spatial</code> type as argument: This is because they are able to accept both Nodes and Geometries as arguments. In this case, you simply <em>cast</em> a Node or Geometry to Spatial.
@ -64,7 +64,7 @@ no mesh, no material.</td>
</p>
</div>
<!-- EDIT2 SECTION "Node versus Geometry" [935-3049] -->
<!-- EDIT2 SECTION "Node versus Geometry" [935-3048] -->
<h3><a>Mesh</a></h3>
<div>
@ -83,7 +83,7 @@ The polygon <a href="/com/jme3/gde/core/docs/jme3/advanced/mesh.html">Mesh</a> i
</ul>
</div>
<!-- EDIT4 SECTION "Mesh" [3050-3729] -->
<!-- EDIT4 SECTION "Mesh" [3049-3728] -->
<h2><a>What is a Clone?</a></h2>
<div>
@ -112,13 +112,13 @@ Usually there is no need to manually use any of the <code>clone()</code> methods
</p>
</div>
<!-- EDIT5 SECTION "What is a Clone?" [3730-4985] -->
<!-- EDIT5 SECTION "What is a Clone?" [3729-4984] -->
<h2><a>How to Add Fields and Methods to a Spatial</a></h2>
<div>
<p>
You can include custom user data –that is, custom Java objects and methods– in Nodes and Geometries. This is very useful for maintaining information about a game element, such as health, budget, ammunition, inventory, equipment, etc for players, or landmark locations for terrains, and much more.
You can include custom user data ???that is, custom Java objects and methods??? in Nodes and Geometries. This is very useful for maintaining information about a game element, such as health, budget, ammunition, inventory, equipment, etc for players, or landmark locations for terrains, and much more.
</p>
<p>
@ -171,7 +171,7 @@ This is how you list all data keys that are already defined for one Spatial:
&#125;</pre>
</div>
<!-- EDIT6 SECTION "How to Add Fields and Methods to a Spatial" [4986-7562] -->
<!-- EDIT6 SECTION "How to Add Fields and Methods to a Spatial" [4985-7561] -->
<h2><a>How to Access a Named Sub-Mesh</a></h2>
<div>
@ -196,12 +196,12 @@ In the following example, the Node <code>house</code> is the loaded model. The s
<pre>Geometry submesh = &#40;Geometry&#41; houseScene.getChild&#40;&quot;door 12&quot;&#41;;</pre>
</div>
<!-- EDIT7 SECTION "How to Access a Named Sub-Mesh" [7563-8365] -->
<!-- EDIT7 SECTION "How to Access a Named Sub-Mesh" [7562-8364] -->
<h2><a>What is Culling?</a></h2>
<div>
<p>
There are two types of colling: Face culling, and view frustrum culling.
There are two types of culling: Face culling, and view frustrum culling.
</p>
<p>
@ -212,13 +212,13 @@ There are two types of colling: Face culling, and view frustrum culling.
You can switch the com.jme3.material.RenderState.FaceCullMode to
</p>
<ul>
<li><div> <code>FaceCullMode.Back</code> (default) only the frontsides of a mesh are drawn. This is the normal behaviour. </div>
<li><div> <code>FaceCullMode.Back</code> (default) ??? only the frontsides of a mesh are drawn. This is the normal behaviour. </div>
</li>
<li><div> <code>FaceCullMode.Front</code> only the backsides of meshes are drawn. The mesh will probably turn invisible. Useful if you are debugging a hand-made mesh and try to identify accidental inside-out faces.</div>
<li><div> <code>FaceCullMode.Front</code> ??? only the backsides of meshes are drawn. The mesh will probably turn invisible. Useful if you are debugging a hand-made mesh and try to identify accidental inside-out faces.</div>
</li>
<li><div> <code>FaceCullMode.FrontAndBack</code> The mesh becomes invisible. </div>
<li><div> <code>FaceCullMode.FrontAndBack</code> ??? The mesh becomes invisible. </div>
</li>
<li><div> <code>FaceCullMode.Off</code> Every side of the mesh is drawn. Looks normal, but slows down large scenes.</div>
<li><div> <code>FaceCullMode.Off</code> ??? Every side of the mesh is drawn. Looks normal, but slows down large scenes.</div>
</li>
</ul>
@ -230,20 +230,20 @@ Example:
<pre>material.getAdditionalRenderState&#40;&#41;.setFaceCullMode&#40;FaceCullMode.FrontAndBack&#41;;</pre>
<p>
<strong>View frustum culling</strong> refers to not drawing (and not even calculating) certain whole models in the scene. At any given moment, half of the scene is behind the player and out of sight anyway. View frustum culling is an optimization to not calculate scene elements that are not visible elements that are &quot;outside the view frustrum&quot;.
<strong>View frustum culling</strong> refers to not drawing (and not even calculating) certain whole models in the scene. At any given moment, half of the scene is behind the player and out of sight anyway. View frustum culling is an optimization to not calculate scene elements that are not visible ??? elements that are &quot;outside the view frustrum&quot;.
</p>
<p>
The decision what is visible and what not, is done automatically by the engine (<code>CullHint.Dynamic</code>). Optionally, you can manually control whether the engine culls individual spatials (and children) from the scene graph:
</p>
<ul>
<li><div> <code>CullHint.Dynamic</code> Default, faster because it doesn&#039;t waste time with objects that are out of view.</div>
<li><div> <code>CullHint.Dynamic</code> ??? Default, faster because it doesn&#039;t waste time with objects that are out of view.</div>
</li>
<li><div> <code>CullHint.Never</code> Calculate and draw everything always (even if it does not end up on the user&#039;s screen because it&#039;s out of sight). Slower, but can be used while debugging custom meshes.</div>
<li><div> <code>CullHint.Never</code> ??? Calculate and draw everything always (even if it does not end up on the user&#039;s screen because it&#039;s out of sight). Slower, but can be used while debugging custom meshes.</div>
</li>
<li><div> <code>CullHint.Always</code> The whole spatial is culled and is not visible. A fast way to hide a Spatial temporarily. Culling a Spatial is faster then detaching it, but it uses more memory.</div>
<li><div> <code>CullHint.Always</code> ??? The whole spatial is culled and is not visible. A fast way to hide a Spatial temporarily. Culling a Spatial is faster then detaching it, but it uses more memory.</div>
</li>
<li><div> <code>CullHint.Inherit</code> Inherit culling behaviour from parent node. </div>
<li><div> <code>CullHint.Inherit</code> ??? Inherit culling behaviour from parent node. </div>
</li>
</ul>
@ -255,13 +255,13 @@ Example:
<pre>spatial.setCullHint&#40;CullHint.Never&#41;; // always drawn</pre>
</div>
<!-- EDIT8 SECTION "What is Culling?" [8366-10702] -->
<!-- EDIT8 SECTION "What is Culling?" [8365-10701] -->
<h2><a>See also</a></h2>
<div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/intermediate/optimization.html">Optimization</a> The GeometryBatchFactory class batches several Geometries into meshes with each their own texture.</div>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/intermediate/optimization.html">Optimization</a> ??? The GeometryBatchFactory class batches several Geometries into meshes with each their own texture.</div>
</li>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/traverse_scenegraph.html">Traverse SceneGraph</a> Find any Node or Geometry in the scenegraph.</div>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/traverse_scenegraph.html">Traverse SceneGraph</a> ??? Find any Node or Geometry in the scenegraph.</div>
</li>
</ul>
<div><span>
@ -273,5 +273,5 @@ Example:
</span></div>
</div>
<!-- EDIT9 SECTION "See also" [10703-] -->
<!-- EDIT9 SECTION "See also" [10702-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:spatial?do=export_xhtmlbody">view online version</a></em></p>

@ -15,7 +15,7 @@ This can be useful when you create some sort of interactive 3D viewer with a use
<ul>
<li><div> You can use Swing components (frame, panels, menus, controls) next to your jME3 game.</div>
</li>
<li><div> The NetBeans <acronym title="Graphical User Interface">GUI</acronym> builder is compatible with the jMonkeyEngine; you can use it it to lay out the Swing <acronym title="Graphical User Interface">GUI</acronym> frame, and then add() the jME canvas into it. Install the <acronym title="Graphical User Interface">GUI</acronym> builder via Tools → Plugins → Available Plugins.</div>
<li><div> The NetBeans <acronym title="Graphical User Interface">GUI</acronym> builder is compatible with the jMonkeyEngine; you can use it it to lay out the Swing <acronym title="Graphical User Interface">GUI</acronym> frame, and then add() the jME canvas into it. Install the <acronym title="Graphical User Interface">GUI</acronym> builder via Tools ??? Plugins ??? Available Plugins.</div>
</li>
</ul>
</li>
@ -79,7 +79,7 @@ In the SwingCanvasTest&#039;s main() method, create a queued runnable(). It will
<p>
<p><div>Note that you have to use app.enqueue() when modifying objects in the scene from the AWT Event Queue like you have to use java.awt.EventQueue.invokeLater() from other threads (e.g. the update loop) when changing swing elements. This can get hairy quickly if you dont have a proper threading model planned so you might want to use NiftyGUI as it is embedded in the update loop thread and is also cross-platform compatible (e.g. android etc.).
<p><div>Note that you have to use app.enqueue() when modifying objects in the scene from the AWT Event Queue like you have to use java.awt.EventQueue.invokeLater() from other threads (e.g. the update loop) when changing swing elements. This can get hairy quickly if you don???t have a proper threading model planned so you might want to use NiftyGUI as it is embedded in the update loop thread and is also cross-platform compatible (e.g. android etc.).
</div></p>
</p>
@ -134,7 +134,7 @@ window.setDefaultCloseOperation&#40;JFrame.EXIT_ON_CLOSE&#41;;</pre>
<p>
We create a standard JPanel inside the JFrame. Give it any Layout you wish here we use a simple Flow Layout. Where the code sample says &quot;Some Swing Component&quot;, this is where you add your buttons and controls. <br/>
We create a standard JPanel inside the JFrame. Give it any Layout you wish ??? here we use a simple Flow Layout. Where the code sample says &quot;Some Swing Component&quot;, this is where you add your buttons and controls. <br/>
<br/>
The important step is to add() the canvas component into the panel, like all the other Swing components.

@ -125,7 +125,7 @@ When you &quot;slap&quot; a texture on a mesh, the whole mesh looks the same. Fo
</p>
<p>
The default material for TerraMonkey is TerrainLighting.j3md. This material combines several texture maps to produce the final custom texture. Remember, Diffuse Maps are the main textures that define the look; optionally, each Diffuse Map can be enhanced with a Normal Map; Alpha Maps describe the opacity of each Diffuse Map used (one color –red, green, blue, or alpha– stands for one Diffuse Map&#039;s opacity); Glow and Specular Maps define optional effects.
The default material for TerraMonkey is TerrainLighting.j3md. This material combines several texture maps to produce the final custom texture. Remember, Diffuse Maps are the main textures that define the look; optionally, each Diffuse Map can be enhanced with a Normal Map; Alpha Maps describe the opacity of each Diffuse Map used (one color ???red, green, blue, or alpha??? stands for one Diffuse Map&#039;s opacity); Glow and Specular Maps define optional effects.
</p>
<p>
@ -163,7 +163,7 @@ Here are the names of TerrainLighting.j3md&#039;s material properties:
</li>
<li><div> <code>DiffuseMap_4</code>, <code>DiffuseMap_4_scale</code>, <code>NormalMap_4</code></div>
</li>
<li><div> </div>
<li><div> ??? </div>
</li>
<li><div> <code>DiffuseMap_11</code>, <code>DiffuseMap_11_scale</code>, <code>NormalMap_11</code></div>
</li>
@ -243,7 +243,7 @@ You can hand-paint Alpha, Diffuse, Glow, and Specular maps in a drawing program,
<p>
This example shows the simpler material definition <code>Terrain.j3md</code>, which only supports 1 Alpha Map, 3 Diffuse Maps, 3 Normal Maps, and does not support Phong illumination. It makes the exmaple shorter TerrainLighting.j3md works accordingly (The list of material properties see above. Links to extended sample code see above.)
This example shows the simpler material definition <code>Terrain.j3md</code>, which only supports 1 Alpha Map, 3 Diffuse Maps, 3 Normal Maps, and does not support Phong illumination. It makes the exmaple shorter ??? TerrainLighting.j3md works accordingly (The list of material properties see above. Links to extended sample code see above.)
</p>
<p>

@ -205,7 +205,7 @@ public class HelloTerrainCollision extends SimpleApplication
&#125;</pre>
<p>
To try this code, create a New Project → JME3 → BasicGame using the default settings. Paste the sample code over the pregenerated Main.java class. Chnage the package to &quot;mygame&quot; if necessary. Open the Project Properties, Libraries, and add the <code>jme3-test-data</code> library to make certain you have all the files.
To try this code, create a New Project ??? JME3 ??? BasicGame using the default settings. Paste the sample code over the pregenerated Main.java class. Chnage the package to &quot;mygame&quot; if necessary. Open the Project Properties, Libraries, and add the <code>jme3-test-data</code> library to make certain you have all the files.
</p>
<p>

@ -15,19 +15,19 @@ Some usage examples: Here you remote-control NPCs (computer controlled character
To let you see the main update loop in context, understand that the SimpleApplication does the following:
</p>
<ul>
<li><div> <strong>Initialization</strong> Execute <code>simpleInitApp()</code> method once.</div>
<li><div> <strong>Initialization</strong> ??? Execute <code>simpleInitApp()</code> method once.</div>
</li>
<li><div> <strong>Main Update Loop</strong></div>
<ol>
<li><div> Input listeners respond to mouse clicks and keyboard presses <a href="/com/jme3/gde/core/docs/jme3/advanced/input_handling.html">Input handling</a> </div>
<li><div> Input listeners respond to mouse clicks and keyboard presses ??? <a href="/com/jme3/gde/core/docs/jme3/advanced/input_handling.html">Input handling</a> </div>
</li>
<li><div> Update game state:</div>
<ol>
<li><div> Update overall game state Execute <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a></div>
<li><div> Update overall game state ??? Execute <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a></div>
</li>
<li><div> User code update Execute <code>simpleUpdate()</code> method</div>
<li><div> User code update ??? Execute <code>simpleUpdate()</code> method</div>
</li>
<li><div> Logical update of entities Execute <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a></div>
<li><div> Logical update of entities ??? Execute <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a></div>
</li>
</ol>
</li>
@ -37,7 +37,7 @@ To let you see the main update loop in context, understand that the SimpleApplic
</li>
<li><div> Scene rendering.</div>
</li>
<li><div> User code rendering Execute <code>simpleRender()</code> method.</div>
<li><div> User code rendering ??? Execute <code>simpleRender()</code> method.</div>
</li>
</ol>
</li>
@ -45,7 +45,7 @@ To let you see the main update loop in context, understand that the SimpleApplic
</li>
</ol>
</li>
<li><div> <strong>Quit</strong> If user requests <code>exit()</code>, execute <code>cleanup()</code> and <code>destroy()</code>. <br/>
<li><div> <strong>Quit</strong> ??? If user requests <code>exit()</code>, execute <code>cleanup()</code> and <code>destroy()</code>. <br/>
The jME window closes and the loop ends.</div>
</li>
</ul>
@ -57,7 +57,7 @@ The jME window closes and the loop ends.</div>
<p>
In a trivial <a href="/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html">SimpleApplication</a> (such as a <a href="/com/jme3/gde/core/docs/jme3/beginner.html">Hello World tutorial</a>), all code is either in the <code>simpleInitApp()</code> (initialization) or <code>simpleUpdate()</code> (behaviour) method or in a helper method/class that is called from one of these two. This trivial approach will make your main class very long, hard to read, and hard to maintain. You don&#039;t need to load the whole scene at once, and you don&#039;t need to run all conditionals tests all the time.
In a trivial <a href="/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html">SimpleApplication</a> (such as a <a href="/com/jme3/gde/core/docs/jme3/beginner.html">Hello World tutorial</a>), all code is either in the <code>simpleInitApp()</code> (initialization) or <code>simpleUpdate()</code> (behaviour) method ??? or in a helper method/class that is called from one of these two. This trivial approach will make your main class very long, hard to read, and hard to maintain. You don&#039;t need to load the whole scene at once, and you don&#039;t need to run all conditionals tests all the time.
</p>
<p>

@ -126,7 +126,7 @@ Finally we add the behaviour (VehicleControl) to the visible Geometry (node).
<pre>vehicleNode.addControl&#40;vehicle&#41;;</pre>
<p>
We configure the physical properties of the vehicle&#039;s suspension: Compresion, Damping, Stiffness, and MaxSuspenionForce. Picking workable values for the wheel suspension can be tricky for background info have a look at these <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://docs.google.com/Doc?docid=0AXVUZ5xw6XpKZGNuZG56a3FfMzU0Z2NyZnF4Zmo&amp;hl=en"><param name="text" value="<html><u>Suspension Settings Tips</u></html>"><param name="textColor" value="blue"></object>. For now, let&#039;s work with the following values:
We configure the physical properties of the vehicle&#039;s suspension: Compresion, Damping, Stiffness, and MaxSuspenionForce. Picking workable values for the wheel suspension can be tricky ??? for background info have a look at these <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://docs.google.com/Doc?docid=0AXVUZ5xw6XpKZGNuZG56a3FfMzU0Z2NyZnF4Zmo&amp;hl=en"><param name="text" value="<html><u>Suspension Settings Tips</u></html>"><param name="textColor" value="blue"></object>. For now, let&#039;s work with the following values:
</p>
<pre>float stiffness = 60.0f;//200=f1 car
float compValue = .3f; //(should be lower than damp)
@ -154,17 +154,17 @@ We create four wheel Geometries and add them to the vehicle. Our wheel geometrie
The <code>addWheel()</code> method sets following properties:
</p>
<ul>
<li><div> Vector3f connectionPoint Coordinate where the suspension connects to the chassis (internally, this is where the Ray is casted downwards).</div>
<li><div> Vector3f connectionPoint ??? Coordinate where the suspension connects to the chassis (internally, this is where the Ray is casted downwards).</div>
</li>
<li><div> Vector3f direction Wheel direction is typically a (0,-1,0) vector.</div>
<li><div> Vector3f direction ??? Wheel direction is typically a (0,-1,0) vector.</div>
</li>
<li><div> Vector3f axle Axle direction is typically a (-1,0,0) vector.</div>
<li><div> Vector3f axle ??? Axle direction is typically a (-1,0,0) vector.</div>
</li>
<li><div> float suspensionRestLength Suspension rest length in world units</div>
<li><div> float suspensionRestLength ??? Suspension rest length in world units</div>
</li>
<li><div> float wheelRadius Wheel radius in world units</div>
<li><div> float wheelRadius ??? Wheel radius in world units</div>
</li>
<li><div> boolean isFrontWheel Whether this wheel is one of the steering wheels. <br/>
<li><div> boolean isFrontWheel ??? Whether this wheel is one of the steering wheels. <br/>
Front wheels are the ones that rotate visibly when the vehicle turns.</div>
</li>
</ul>
@ -187,7 +187,7 @@ We create a Cylinder mesh shape that we use to create the four visible wheel geo
<pre>Cylinder wheelMesh = new Cylinder&#40;16, 16, radius, radius * 0.6f, true&#41;;</pre>
<p>
For each wheel, we create a Node and a Geometry. We attach the Cylinder Geometry to the Node. We rotate the wheel by 90° around the Y axis. We set a material to make it visible. Finally we add the wheel (plus its properties) to the vehicle.
For each wheel, we create a Node and a Geometry. We attach the Cylinder Geometry to the Node. We rotate the wheel by 90?? around the Y axis. We set a material to make it visible. Finally we add the wheel (plus its properties) to the vehicle.
</p>
<pre>Node node1 = new Node&#40;&quot;wheel 1 node&quot;&#41;;
Geometry wheels1 = new Geometry&#40;&quot;wheel 1&quot;, wheelMesh&#41;;

@ -21,11 +21,7 @@ Other games however require a third-person perspective of the character: In thes
Several related code samples can be found here:
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/bullet/TestWalkingChar.java"><param name="text" value="<html><u>TestPhysicsCharacter.java</u></html>"><param name="textColor" value="blue"></object> (third-person view)</div>
<ul>
<li><div> Uses also <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/bullet/BombControl.java"><param name="text" value="<html><u>BombControl.java</u></html>"><param name="textColor" value="blue"></object> </div>
</li>
</ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/bullet/TestPhysicsCharacter.java"><param name="text" value="<html><u>TestPhysicsCharacter.java</u></html>"><param name="textColor" value="blue"></object> (third-person view)</div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/bullet/TestWalkingChar.java"><param name="text" value="<html><u>TestWalkingChar.java</u></html>"><param name="textColor" value="blue"></object> (third-person view)</div>
<ul>
@ -42,10 +38,11 @@ Several related code samples can be found here:
<p>
The code in this tutorial is a combination of these samples.
</p>
</div>
<!-- EDIT2 SECTION "Sample Code" [728-1788] -->
<!-- EDIT2 SECTION "Sample Code" [728-1646] -->
<h2><a>CharacterControl</a></h2>
<div>
@ -101,19 +98,19 @@ Default: 1, because for characters and vehicles, up is typically along the Y axi
Use <code>setWalkDirection(Vector3f.ZERO)</code> to stop a directional motion. </td>
</tr>
</table></div>
<!-- EDIT4 TABLE [3702-4865] -->
<!-- EDIT4 TABLE [3560-4723] -->
<p>
For best practices on how to use <code>setWalkDirection()</code>, see the Navigation Inputs example below.
</p>
</div>
<!-- EDIT3 SECTION "CharacterControl" [1789-4965] -->
<!-- EDIT3 SECTION "CharacterControl" [1647-4823] -->
<h2><a>Walking Character Demo</a></h2>
<div>
</div>
<!-- EDIT5 SECTION "Walking Character Demo" [4966-5001] -->
<!-- EDIT5 SECTION "Walking Character Demo" [4824-4859] -->
<h3><a>Code Skeleton</a></h3>
<div>
<pre>public class WalkingCharacterDemo extends SimpleApplication
@ -135,7 +132,7 @@ For best practices on how to use <code>setWalkDirection()</code>, see the Naviga
public void onAnimChange&#40;AnimControl control, AnimChannel channel, String animName&#41; &#123; &#125;</pre>
</div>
<!-- EDIT6 SECTION "Code Skeleton" [5002-5619] -->
<!-- EDIT6 SECTION "Code Skeleton" [4860-5477] -->
<h3><a>Overview</a></h3>
<div>
@ -165,7 +162,7 @@ To create a walking character:
</ol>
</div>
<!-- EDIT7 SECTION "Overview" [5620-6143] -->
<!-- EDIT7 SECTION "Overview" [5478-6001] -->
<h3><a>Activate Physics</a></h3>
<div>
<pre>private BulletAppState bulletAppState;
@ -178,7 +175,7 @@ public void simpleInitApp&#40;&#41; &#123;
&#125;</pre>
</div>
<!-- EDIT8 SECTION "Activate Physics" [6144-6437] -->
<!-- EDIT8 SECTION "Activate Physics" [6002-6295] -->
<h3><a>Initialize the Scene</a></h3>
<div>
@ -221,7 +218,7 @@ Also, add a light source to be able to see the scene.
rootNode.addLight&#40;light&#41;;</pre>
</div>
<!-- EDIT9 SECTION "Initialize the Scene" [6438-7904] -->
<!-- EDIT9 SECTION "Initialize the Scene" [6296-7762] -->
<h3><a>Create the Animated Character</a></h3>
<div>
@ -263,7 +260,7 @@ public void simpleInitApp&#40;&#41; &#123;
</p>
</div>
<!-- EDIT10 SECTION "Create the Animated Character" [7905-9242] -->
<!-- EDIT10 SECTION "Create the Animated Character" [7763-9100] -->
<h3><a>Set Up AnimControl and AnimChannels</a></h3>
<div>
@ -291,7 +288,7 @@ The attackChannel only controls one arm, while the walking channels controls the
</p>
</div>
<!-- EDIT11 SECTION "Set Up AnimControl and AnimChannels" [9243-10268] -->
<!-- EDIT11 SECTION "Set Up AnimControl and AnimChannels" [9101-10126] -->
<h3><a>Add ChaseCam / CameraNode</a></h3>
<div>
<pre>private ChaseCamera chaseCam;
@ -305,7 +302,7 @@ public void simpleInitApp&#40;&#41; &#123;
...</pre>
</div>
<!-- EDIT12 SECTION "Add ChaseCam / CameraNode" [10269-10488] -->
<!-- EDIT12 SECTION "Add ChaseCam / CameraNode" [10127-10346] -->
<h3><a>Handle Navigation</a></h3>
<div>
@ -428,5 +425,5 @@ public void onAnimChange&#40;AnimControl control, AnimChannel channel, String an
</span></div>
</div>
<!-- EDIT13 SECTION "Handle Navigation" [10489-] -->
<!-- EDIT13 SECTION "Handle Navigation" [10347-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:walking_character?do=export_xhtmlbody">view online version</a></em></p>

@ -59,7 +59,7 @@ To achieve a water effect, JME3 uses shaders and a special material, <code>Commo
</li>
</ul>
</li>
<li><div> (For the underwater caustics effect, we use splatted textures. WIP/TODO)</div>
<li><div> (For the underwater caustics effect, we use splatted textures. ??? WIP/TODO)</div>
</li>
</ol>
@ -208,7 +208,7 @@ waterPlane.setLocalTranslation&#40;-5, 0, 5&#41;;
waterPlane.setMaterial&#40;waterProcessor.getMaterial&#40;&#41;&#41;;</pre>
<p>
You can offer a switch to set the water Material to a static texture for users with slow PCs.
You can offer a switch to set the water Material to a static texture ??? for users with slow PCs.
</p>

@ -23,7 +23,7 @@ This is a draft of a feature that is work in progress. If you have questions or
</li>
<li><div> (Optional) Install NBAndroid in the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>:</div>
<ol>
<li><div> Go to Tools→Plugins→Available Plugins.</div>
<li><div> Go to Tools???Plugins???Available Plugins.</div>
</li>
<li><div> Install the &quot;Android&quot; plugin.</div>
</li>
@ -199,9 +199,9 @@ During build, the libraries and main jar file from the main project are copied t
Activating the nbandroid plugin in the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> is optional, but recommended. You do not need the nbandroid plugin for Android support to work, however nbandroid will not interfere and will in fact allow you to edit the android source files and project more conveniently. To be able to edit, extend and code android-specific code in Android projects, install NBAndroid from the update center:
</p>
<ol>
<li><div> Open Tools→Plugins→Settings</div>
<li><div> Open Tools???Plugins???Settings</div>
</li>
<li><div> Go to Tools→Plugins→Available Plugins.</div>
<li><div> Go to Tools???Plugins???Available Plugins.</div>
</li>
<li><div> Install the NbAndroid plugin. (Will show up as Android)</div>
</li>
@ -220,7 +220,7 @@ Activating the nbandroid plugin in the jMonkeyEngine <acronym title="Software De
</li>
<li><div> The main application class parameter for the AndroidHarness is taken from the jme3 project settings when enabling android deployment. Currently it is not updated when you change the main class package or name.</div>
</li>
<li><div> When you disable the mobile deployment option, the whole “mobile” folder is deleted.</div>
<li><div> When you disable the mobile deployment option, the whole ???mobile??? folder is deleted.</div>
</li>
<li><div> The &quot;errors&quot; shown in the MainActivity are wrongly displayed only in the editor and will disappear when you install NBAndroid (see below).</div>
</li>
@ -241,7 +241,7 @@ You can use the jMonkeyEngine <acronym title="Software Development Kit">SDK</acr
<ul>
<li><div> <strong>Inputs:</strong> Devise an alternate control scheme that works for Android users (e.g. using com.jme3.input.controls.TouchListener). This mobile scheme is likely quite different from the desktop scheme.</div>
</li>
<li><div> <strong>Effects:</strong> Android devices do no support 3D features as well as PCs or even not at all. This restriction includes post-processor filters (depth-of-field blur, bloom, light scattering, cartoon, etc), drop shadows, water effects, 3D Audio. Be prepared that these effects will (at best) slow down the application or (in the worst case) not work at all. Provide the option to switch to a low-fi equivalent! </div>
<li><div> <strong>Effects:</strong> Android devices do no support 3D features as well as PCs ??? or even not at all. This restriction includes post-processor filters (depth-of-field blur, bloom, light scattering, cartoon, etc), drop shadows, water effects, 3D Audio. Be prepared that these effects will (at best) slow down the application or (in the worst case) not work at all. Provide the option to switch to a low-fi equivalent! </div>
</li>
<li><div> <strong>Nifty <acronym title="Graphical User Interface">GUI</acronym>:</strong> Use different base UI layout <acronym title="Extensible Markup Language">XML</acronym> files for the mobile version of your app to account for a different screen resolution.</div>
</li>
@ -280,11 +280,13 @@ Note that you have to build the whole project once to make (new) classes in the
<div>
<p>
There be no proper guidanceof runing on androidf
The <acronym title="Software Development Kit">SDK</acronym> will later provide tools to adapt the material and other graphics settings of the Android deployment version automatically.
</p>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://www.youtube.com/watch?feature=player_embedded&amp;v=np3N4pCCTPo"><param name="text" value="<html><u>Youtube Video on Android deployment</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/groups/android/forum/topic/android-deployment-via-checkbox-is-here"><param name="text" value="<html><u>Android Forum Thread (beta)</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/groups/android/forum/topic/how-to-run-your-jme3-application-on-android-androidharness"><param name="text" value="<html><u>Android Forum Thread (alpha)</u></html>"><param name="textColor" value="blue"></object></div>

@ -288,7 +288,7 @@ Make a mouse click trigger another animation sequence!
<p>
Open the <code>skeleton.xml</code> file in a text editor of your choice. You don&#039;t have to be able to read or write these xml files (Blender does that for you) but it is good to know how skeletons work. &quot;There&#039;s no magic to it!&quot;
Open the <code>skeleton.xml</code> file in a text editor of your choice. You don&#039;t have to be able to read or write these xml files (Blender does that for you) ??? but it is good to know how skeletons work. &quot;There&#039;s no magic to it!&quot;
</p>
<ul>
<li><div> Note how the bones are numbered and named. All names of animated models follow a naming scheme.</div>

@ -9,7 +9,7 @@ Next: <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html"
</p>
<p>
In this tutorial we will learn to load 3-D models and text into the scene graph, using the jME asset manager. You also learn how to arrive at the correct paths, and which file formats to use.
In this tutorial we will learn to load 3D models and text into the scene graph, using the jME <a href="/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html">Asset Manager</a>. You will also learn how to determine the correct paths, and which file formats to use.
</p>
<p>
@ -17,12 +17,12 @@ In this tutorial we will learn to load 3-D models and text into the scene graph,
</p>
<p>
<p><div>To use the example assets in a new jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> project, right-click your project, select &quot;Properties&quot;, go to &quot;Libraries&quot;, press &quot;Add Library&quot; and add the &quot;jme3-test-data&quot; library.
<p><div><a href="/com/jme3/gde/core/docs/sdk/sample_code.html">Trouble finding the files to run this sample?</a> To get the assets (3D models) used in this example, add the included <code>jme3-test-data.jar</code> to your classpath. In project created with the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> (recommended), simply right-click your project, choose &quot;Properties&quot;, go to &quot;Libraries&quot;, press &quot;Add Library&quot; and add the preconfigured &quot;jme3-test-data&quot; library.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (3) - Hello Assets" [1-616] -->
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (3) - Hello Assets" [1-838] -->
<h2><a>Code Sample</a></h2>
<div>
<pre>package jme3test.helloworld;
@ -93,27 +93,27 @@ Build and run the code sample. You should see a green Ninja with a colorful teap
</p>
</div>
<!-- EDIT2 SECTION "Code Sample" [617-3227] -->
<!-- EDIT2 SECTION "Code Sample" [839-3449] -->
<h2><a>The Asset Manager</a></h2>
<div>
<p>
JME3 comes with a handy asset manager that helps you keep your assets organized. Project assets are media files such as models, materials, textures, scenes, shaders, sounds, and fonts.
The Asset manager can load files from:
<strong>By game assets we mean all multi-media files, such as models, materials, textures, whole scenes, custom shaders, music and sound files, and custom fonts.</strong> JME3 comes with a handy AssetManager object that helps you access your assets.
The AssetManager can load files from:
</p>
<ul>
<li><div> the current classpath (the top level of your project directory), </div>
</li>
<li><div> the <code>assets</code> directory of your project, and</div>
</li>
<li><div> optionally, custom paths.</div>
<li><div> optionally, custom paths that you register.</div>
</li>
</ul>
<p>
This is our recommended directory structure for storing assets:
The following is the recommended directory structure for storing assets in your project directoy:
</p>
<pre>MyGame/assets/Interface/
MyGame/assets/MatDefs/
@ -123,16 +123,16 @@ MyGame/assets/Scenes/
MyGame/assets/Shaders/
MyGame/assets/Sounds/
MyGame/assets/Textures/
MyGame/build.xml
MyGame/src/...
MyGame/build.xml &lt;-- Ant build script
MyGame/src/... &lt;-- Java sources go here
MyGame/...</pre>
<p>
This is just a suggested best practice, you can name the directories in the assets directory what ever you like.
This is just a suggested best practice, and it&#039;s what you get by default when creating a new Java project in the jMokeyEngine <a href="/com/jme3/gde/core/docs/jme3/beginner/sdk.html">SDK</a>. You can create an <code>assets</code> directory and technically name the subdirectories whatever you like.
</p>
</div>
<!-- EDIT3 SECTION "The Asset Manager" [3228-4057] -->
<!-- EDIT3 SECTION "The Asset Manager" [3450-4573] -->
<h3><a>Loading Textures</a></h3>
<div>
@ -156,13 +156,13 @@ In this case, you <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_material.
</p>
</div>
<!-- EDIT4 SECTION "Loading Textures" [4058-4974] -->
<!-- EDIT4 SECTION "Loading Textures" [4574-5490] -->
<h3><a>Loading Text and Fonts</a></h3>
<div>
<p>
This example displays the text &quot;Hello World&quot; in the default font at the bottom edge of the window. You attach text to the <code>guiNode</code> this is a special node for flat (orthogonal) display elements. You display text to show the game score, player health, etc.
This example displays the text &quot;Hello World&quot; in the default font at the bottom edge of the window. You attach text to the <code>guiNode</code> ??? this is a special node for flat (orthogonal) display elements. You display text to show the game score, player health, etc.
The following code sample goes into the <code>simpleInitApp()</code> method.
</p>
<pre>// Display a line of text with a default font
@ -179,7 +179,7 @@ guiNode.attachChild&#40;helloText&#41;;</pre>
</p>
</div>
<!-- EDIT5 SECTION "Loading Text and Fonts" [4975-5820] -->
<!-- EDIT5 SECTION "Loading Text and Fonts" [5491-6336] -->
<h3><a>Loading a Model</a></h3>
<div>
@ -199,11 +199,11 @@ sun.setDirection&#40;new Vector3f&#40;-0.1f, -0.7f, -1.0f&#41;.normalizeLocal&#4
rootNode.addLight&#40;sun&#41;;</pre>
<p>
Note that you do no need to create a Material if you exported the model with a material. Remember to add a light source, as shown, otherwise the material (and the whole model) is not visible!
Note that you do not need to create a Material if you exported the model with a material. Remember to add a light source, as shown, otherwise the material (and the whole model) is not visible!
</p>
</div>
<!-- EDIT6 SECTION "Loading a Model" [5821-6749] -->
<!-- EDIT6 SECTION "Loading a Model" [6337-7266] -->
<h3><a>Loading Assets From Custom Paths</a></h3>
<div>
@ -233,7 +233,7 @@ JME3 offers ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, and UrlLo
</p>
</div>
<!-- EDIT7 SECTION "Loading Assets From Custom Paths" [6750-7767] -->
<!-- EDIT7 SECTION "Loading Assets From Custom Paths" [7267-8284] -->
<h2><a>Creating Models and Scenes</a></h2>
<div>
@ -272,7 +272,7 @@ If you use Blender, export your models as Ogre <acronym title="Extensible Markup
</ol>
</div>
<!-- EDIT8 SECTION "Creating Models and Scenes" [7768-8927] -->
<!-- EDIT8 SECTION "Creating Models and Scenes" [8285-9444] -->
<h3><a>Model File Formats</a></h3>
<div>
@ -317,7 +317,7 @@ If your executable gets a runtime exception, make sure you have converted all mo
</p>
</div>
<!-- EDIT9 SECTION "Model File Formats" [8928-10780] -->
<!-- EDIT9 SECTION "Model File Formats" [9445-11297] -->
<h3><a>Loading Models and Scenes</a></h3>
<div>
<div><table>
@ -346,9 +346,9 @@ rootNode.attachChild&#40;scene&#41;;</pre>
</td>
</tr>
</table></div>
<!-- EDIT11 TABLE [10818-11872] -->
<!-- EDIT11 TABLE [11335-12389] -->
</div>
<!-- EDIT10 SECTION "Loading Models and Scenes" [10781-11873] -->
<!-- EDIT10 SECTION "Loading Models and Scenes" [11298-12390] -->
<h2><a>Excercise - How to Load Assets</a></h2>
<div>
@ -415,7 +415,7 @@ Earlier in this tutorial, you loaded scenes and models from the asset directory.
rootNode.attachChild&#40;gameLevel&#41;;</pre>
<p>
Note that the path is relative to the <code>assets/</code> directory.
Note that the path is relative to the <code>assets/???</code> directory.
</p>
</div>
</li>
@ -443,7 +443,7 @@ Here is a third method you must know, loading a scene/model from a .j3o file:
rootNode.attachChild&#40;gameLevel&#41;;</pre>
<p>
Again, note that the path is relative to the <code>assets/</code> directory.
Again, note that the path is relative to the <code>assets/???</code> directory.
</p>
</div>
</li>
@ -453,7 +453,7 @@ Again, you should see the Ninja+wall+teapot standing in a town. </div>
</ol>
</div>
<!-- EDIT12 SECTION "Excercise - How to Load Assets" [11874-15208] -->
<!-- EDIT12 SECTION "Excercise - How to Load Assets" [12391-15725] -->
<h2><a>Conclusion</a></h2>
<div>
@ -497,5 +497,5 @@ Let&#039;s add some action to the scene and continue with the <a href="/com/jme3
</span></div>
</div>
<!-- EDIT13 SECTION "Conclusion" [15209-] -->
<!-- EDIT13 SECTION "Conclusion" [15726-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_asset?do=export_xhtmlbody">view online version</a></em></p>

@ -116,7 +116,7 @@ When you run the sample, you should see a blue cube. You should hear a nature-li
<p>
In the <code>initSimpleApp()</code> method, you create a simple blue cube geometry called <code>player</code> and attach it to the scene this just arbitrary sample content, so you see something when running the audio sample.
In the <code>initSimpleApp()</code> method, you create a simple blue cube geometry called <code>player</code> and attach it to the scene ??? this just arbitrary sample content, so you see something when running the audio sample.
</p>
<p>
@ -176,11 +176,15 @@ Here you make audio_nature a positional sound that comes from a certain place. F
...</pre>
<p>
<strong>Tip:</strong> Attach AudioNodes to the rootNode like all nodes, to make certain moving nodes stay up-to-date. If you don&#039;t attach them, they are still audible and you don&#039;t get an error message. But 3D sound will not work as expected if the nodes are not updated regularly.
<strong>Tip:</strong> Attach AudioNodes into the scene graph like all nodes, to make certain moving nodes stay up-to-date. If you don&#039;t attach them, they are still audible and you don&#039;t get an error message but 3D sound will not work as expected. AudioNodes can be attached directly to the root node or they can be attached inside a node that is moving through the scene and both the AudioNode and the 3d position of the sound it is generating will move accordingly.
</p>
<p>
<strong>Tip:</strong> playInstance always plays the sound from the position of the AudioNode so multiple gunshots from one gun (for example) can be generated this way, however if multiple guns are firing at once then an AudioNode is needed for each one.
</p>
</div>
<!-- EDIT4 SECTION "AudioNodes" [3852-6513] -->
<!-- EDIT4 SECTION "AudioNodes" [3852-6941] -->
<h2><a>Triggering Sound</a></h2>
<div>
@ -212,7 +216,7 @@ Since you want to be able to shoot fast repeatedly, so you do not want to wait f
</p>
</div>
<!-- EDIT5 SECTION "Triggering Sound" [6514-7978] -->
<!-- EDIT5 SECTION "Triggering Sound" [6942-8406] -->
<h2><a>Ambient or Situational?</a></h2>
<div>
@ -261,7 +265,7 @@ Apart from the looping boolean, another difference is where <code>play().playIns
</ul>
</div>
<!-- EDIT6 SECTION "Ambient or Situational?" [7979-9209] -->
<!-- EDIT6 SECTION "Ambient or Situational?" [8407-9637] -->
<h2><a>Buffered or Streaming?</a></h2>
<div>
@ -284,7 +288,7 @@ Note that streamed sounds can not loop (i.e. setLooping will not work as you exp
</p>
</div>
<!-- EDIT7 SECTION "Buffered or Streaming?" [9210-9791] -->
<!-- EDIT7 SECTION "Buffered or Streaming?" [9638-10219] -->
<h2><a>Play() or PlayInstance()?</a></h2>
<div>
<div><table>
@ -301,9 +305,9 @@ Note that streamed sounds can not loop (i.e. setLooping will not work as you exp
<td>The same sound cannot play twice at the same time.</td><td>The same sounds can play multiple times and overlap.</td>
</tr>
</table></div>
<!-- EDIT9 TABLE [9831-10075] -->
<!-- EDIT9 TABLE [10259-10503] -->
</div>
<!-- EDIT8 SECTION "Play() or PlayInstance()?" [9792-10076] -->
<!-- EDIT8 SECTION "Play() or PlayInstance()?" [10220-10504] -->
<h2><a>Your Ear in the Scene</a></h2>
<div>
@ -325,7 +329,7 @@ If you don&#039;t do that, the results of 3D audio will be quite random.
</p>
</div>
<!-- EDIT10 SECTION "Your Ear in the Scene" [10077-10779] -->
<!-- EDIT10 SECTION "Your Ear in the Scene" [10505-11207] -->
<h2><a>Global, Directional, Positional?</a></h2>
<div>
@ -352,7 +356,7 @@ In short, you must choose in every situation whether it makes sense for a sound
</p>
</div>
<!-- EDIT11 SECTION "Global, Directional, Positional?" [10780-12138] -->
<!-- EDIT11 SECTION "Global, Directional, Positional?" [11208-12566] -->
<h2><a>Conclusion</a></h2>
<div>
@ -387,5 +391,5 @@ See also:
</span></div>
</div>
<!-- EDIT12 SECTION "Conclusion" [12139-] -->
<!-- EDIT12 SECTION "Conclusion" [12567-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_audio?do=export_xhtmlbody">view online version</a></em></p>

@ -249,7 +249,7 @@ As usual, you initialize the game in the <code>simpleInitApp()</code> method.
</li>
<li><div> The auxiliary method <code>setUpLights()</code> adds your light sources.</div>
</li>
<li><div> The auxiliary method <code>setUpKeys()</code> configures input mappingswe will look at it later.</div>
<li><div> The auxiliary method <code>setUpKeys()</code> configures input mappings???we will look at it later.</div>
</li>
</ol>
@ -273,7 +273,7 @@ For the scene, you load the <code>sceneModel</code> from a zip file, and adjust
sceneModel.setLocalScale&#40;2f&#41;;</pre>
<p>
The file <code>town.zip</code> is included as a sample model in the JME3 sources you can <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.googlecode.com/svn/trunk/engine/town.zip"><param name="text" value="<html><u>download it here</u></html>"><param name="textColor" value="blue"></object>. (Optionally, use any OgreXML scene of your own.) For this sample, place the zip file in the application&#039;s top level directory (that is, next to src/, assets/, build.xml).
The file <code>town.zip</code> is included as a sample model in the JME3 sources ??? you can <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.googlecode.com/svn/trunk/engine/town.zip"><param name="text" value="<html><u>download it here</u></html>"><param name="textColor" value="blue"></object>. (Optionally, use any OgreXML scene of your own.) For this sample, place the zip file in the application&#039;s top level directory (that is, next to src/, assets/, build.xml).
</p>
<pre> CollisionShape sceneShape =
CollisionShapeFactory.createMeshShape&#40;&#40;Node&#41; sceneModel&#41;;
@ -307,7 +307,7 @@ To use collision detection, you add a RigidBodyControl to the <code>sceneModel</
<p>
A first-person player is typically invisible. When you use the default flyCam as first-person cam, it does not even test for collisons and runs through walls. This is because the flyCam control does not have any physical shape assigned. In this code sample, you represent the first-person player as an (invisible) physical shape. You use the WASD keys to steer this physical shape around, while the physics engine manages for you how it walks along solid walls and on solid floors and jumps over solid obstacles. Then you simply make the camera follow the walking shape&#039;s location and you get the illusion of being a physical body in a solid environment seeing through the camera.
A first-person player is typically invisible. When you use the default flyCam as first-person cam, it does not even test for collisons and runs through walls. This is because the flyCam control does not have any physical shape assigned. In this code sample, you represent the first-person player as an (invisible) physical shape. You use the WASD keys to steer this physical shape around, while the physics engine manages for you how it walks along solid walls and on solid floors and jumps over solid obstacles. Then you simply make the camera follow the walking shape&#039;s location ??? and you get the illusion of being a physical body in a solid environment seeing through the camera.
</p>
<p>
@ -349,7 +349,7 @@ Apart from step height and character size, the <code>CharacterControl</code> let
<pre> player.setPhysicsLocation&#40;new Vector3f&#40;0, 10, 0&#41;&#41;;</pre>
<p>
Finally we put the player in its starting position and update its state remember to use <code>setPhysicsLocation()</code> instead of <code>setLocalTranslation()</code> now, since you are dealing with a physical object.
Finally we put the player in its starting position and update its state ??? remember to use <code>setPhysicsLocation()</code> instead of <code>setLocalTranslation()</code> now, since you are dealing with a physical object.
</p>
</div>
@ -365,7 +365,7 @@ Remember, in physical games, you must register all solid objects (usually the ch
bulletAppState.getPhysicsSpace&#40;&#41;.add&#40;player&#41;;</pre>
<p>
The invisible body of the character just sits there on the physical floor. It cannot walk yet you will deal with that next.
The invisible body of the character just sits there on the physical floor. It cannot walk yet ??? you will deal with that next.
</p>
</div>
@ -379,7 +379,7 @@ The default camera controller <code>cam</code> is a third-person camera. JME3 al
</p>
<p>
However, you must redefine how walking (camera movement) is handled for physics-controlled objects: When you navigate a non-physical node (e.g. the default flyCam), you simply specify the <em>target location</em>. There are no tests that prevent the flyCam from getting stuck in a wall! When you move a PhysicsControl, you want to specify a <em>walk direction</em> instead. Then the PhysicsSpace can calculate for you how far the character can actually move in the desired direction or whether an obstacle prevents it from going any further.
However, you must redefine how walking (camera movement) is handled for physics-controlled objects: When you navigate a non-physical node (e.g. the default flyCam), you simply specify the <em>target location</em>. There are no tests that prevent the flyCam from getting stuck in a wall! When you move a PhysicsControl, you want to specify a <em>walk direction</em> instead. Then the PhysicsSpace can calculate for you how far the character can actually move in the desired direction ??? or whether an obstacle prevents it from going any further.
</p>
<p>
@ -409,7 +409,7 @@ In the <code>simpleInitApp()</code> method, you re-configure the familiar WASD i
&#125;</pre>
<p>
You can move this block of code into an auxiliary method <code>setupKeys()</code> and call this method from <code>simpleInitApp()</code> to keep the code more readable.
You can move this block of code into an auxiliary method <code>setupKeys()</code> and call this method from <code>simpleInitApp()</code>??? to keep the code more readable.
</p>
</div>
@ -521,7 +521,7 @@ Related info:
</li>
<li><div> To learn more about complex physics scenes, where several mobile physical objects bump into each other, read <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_physics.html">Hello Physics</a>.</div>
</li>
<li><div> FYI, there are simpler collision detection solutions without physics, too. Have a look at <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/collision/TestSimpleCollision.java?r=5192&amp;spec=svn5192"><param name="text" value="<html><u>jme3test.collision.TestSimpleCollision.java</u></html>"><param name="textColor" value="blue"></object> (and SphereMotionAllowedListener.java).</div>
<li><div> FYI, there are simpler collision detection solutions without physics, too. Have a look at <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/collision/TestTriangleCollision.java"><param name="text" value="<html><u>jme3test.collision.TestTriangleCollision.java</u></html>"><param name="textColor" value="blue"></object>.</div>
</li>
</ul>
<div><span>

@ -247,7 +247,7 @@ For fire, is&#039;s a gradient from yellow to red. </div>
<p>
Create a grayscale texture in a graphic editor, and save it to your <code>assets/Effects</code> directory. If you split up one image file into x*y animation steps, make sure each square is of equal sizejust as you see in the examples here.
Create a grayscale texture in a graphic editor, and save it to your <code>assets/Effects</code> directory. If you split up one image file into x*y animation steps, make sure each square is of equal size???just as you see in the examples here.
</p>
</div>
@ -264,11 +264,11 @@ A particle system is always centered around an emitter.
Use the <code>setShape()</code> method to change the EmitterShape:
</p>
<ul>
<li><div> EmitterPointShape(Vector3f.ZERO) particles emit from a point (default)</div>
<li><div> EmitterPointShape(Vector3f.ZERO) ??? particles emit from a point (default)</div>
</li>
<li><div> EmitterSphereShape(Vector3f.ZERO,2f) particles emit from a sphere-sized area</div>
<li><div> EmitterSphereShape(Vector3f.ZERO,2f) ??? particles emit from a sphere-sized area</div>
</li>
<li><div> EmitterBoxShape(new Vector3f(-1f,-1f,-1f),new Vector3f(1f,1f,1f)) particles emit from a box-sized area</div>
<li><div> EmitterBoxShape(new Vector3f(-1f,-1f,-1f),new Vector3f(1f,1f,1f)) ??? particles emit from a box-sized area</div>
</li>
</ul>
@ -366,7 +366,7 @@ You have learned that many different effects can be created by changing the para
</p>
<p>
Now you move on to another exciting chapter the simulation of <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_physics"><param name="text" value="<html><u>physical objects</u></html>"><param name="textColor" value="blue"></object>. Let&#039;s shoot some cannon balls at a brick wall!
Now you move on to another exciting chapter ??? the simulation of <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_physics"><param name="text" value="<html><u>physical objects</u></html>"><param name="textColor" value="blue"></object>. Let&#039;s shoot some cannon balls at a brick wall!
</p>
<hr/>

@ -168,7 +168,7 @@ Now you need to register your trigger mappings.
inputManager.addListener&#40;analogListener, new String&#91;&#93;&#123;&quot;Left&quot;, &quot;Right&quot;, &quot;Rotate&quot;&#125;&#41;;</pre>
<p>
This code goes into the <code>simpleInitApp()</code> method. But since we will likely add many keybindings, we extract these lines and wrap them in an auxiliary method, <code>initKeys()</code>. The <code>initKeys()</code> method is not part of the Input Controls interface you can name it whatever you like. Just don&#039;t forget to call your method from the <code>initSimpleApp()</code> method.
This code goes into the <code>simpleInitApp()</code> method. But since we will likely add many keybindings, we extract these lines and wrap them in an auxiliary method, <code>initKeys()</code>. The <code>initKeys()</code> method is not part of the Input Controls interface ??? you can name it whatever you like. Just don&#039;t forget to call your method from the <code>initSimpleApp()</code> method.
</p>
</div>
@ -301,7 +301,7 @@ In order to see the total time that a key has been pressed for then the incoming
</ul>
<p>
Mappings registered to the <strong>ActionListener</strong> are digital either-or actions &quot;Pressed or released? On or off?&quot;
Mappings registered to the <strong>ActionListener</strong> are digital either-or actions ??? &quot;Pressed or released? On or off?&quot;
</p>
<ul>
<li><div> Parameters: </div>
@ -318,7 +318,7 @@ Mappings registered to the <strong>ActionListener</strong> are digital either-or
<p>
<strong>Tip:</strong> It&#039;s very common that you want an action to be only triggered once, in the moment when the key is <em>released</em>. For instance when opening a door, flipping a boolean state, or picking up an item. To achieve that, you use an <code>ActionListener</code> and test for <code> &amp;&amp; !keyPressed</code>. For an example, look at the Pause button code:
<strong>Tip:</strong> It&#039;s very common that you want an action to be only triggered once, in the moment when the key is <em>released</em>. For instance when opening a door, flipping a boolean state, or picking up an item. To achieve that, you use an <code>ActionListener</code> and test for <code>??? &amp;&amp; !keyPressed</code>. For an example, look at the Pause button code:
</p>
<pre> if &#40;name.equals&#40;&quot;Pause&quot;&#41; &amp;&amp; !keyPressed&#41; &#123;
isRunning = !isRunning;

@ -71,7 +71,7 @@ Compared to our previous code samples you note that the player Geometry is now a
</p>
<p>
Now have a closer look at the <code>simpleUpdate()</code> method this is the update loop.
Now have a closer look at the <code>simpleUpdate()</code> method ??? this is the update loop.
</p>
<ul>
<li><div> The <code>player.rotate(0, 2*tpf, 0);</code> line changes the rotation of the player object. </div>

@ -109,11 +109,11 @@ public class HelloMaterial extends SimpleApplication &#123;
You should see
</p>
<ul>
<li><div> Left A cube with a brown monkey texture.</div>
<li><div> Left ??? A cube with a brown monkey texture.</div>
</li>
<li><div> Middle A translucent monkey picture in front of a shiny rock.</div>
<li><div> Middle ??? A translucent monkey picture in front of a shiny rock.</div>
</li>
<li><div> Right A cube with a purple monkey texture.</div>
<li><div> Right ??? A cube with a purple monkey texture.</div>
</li>
</ul>
@ -128,7 +128,7 @@ Move around with the WASD keys to have a closer look at the translucency, and th
<p>
Typically you want to give objects in your scene textures: It can be rock, grass, brick, wood, water, metal, paper A texture is a normal image file in <acronym title="Joint Photographics Experts Group">JPG</acronym> or <acronym title="Portable Network Graphics">PNG</acronym> format. In this example, you create a box with a simple unshaded Monkey texture as material.
Typically you want to give objects in your scene textures: It can be rock, grass, brick, wood, water, metal, paper??? A texture is a normal image file in <acronym title="Joint Photographics Experts Group">JPG</acronym> or <acronym title="Portable Network Graphics">PNG</acronym> format. In this example, you create a box with a simple unshaded Monkey texture as material.
</p>
<pre> /** A simple textured cube. */
Box boxshape1 = new Box&#40;new Vector3f&#40;-3f,1.1f,0f&#41;, 1f,1f,1f&#41;;
@ -219,7 +219,7 @@ The ColorMap is the material layer where textures go. This <acronym title="Porta
<p>
But textures are not all. Have a close look at the shiny sphere you cannot get such a nice bumpy material with just a texture. JME3 also supports so-called Phong-illuminated materials:
But textures are not all. Have a close look at the shiny sphere ??? you cannot get such a nice bumpy material with just a texture. JME3 also supports so-called Phong-illuminated materials:
</p>
<p>
@ -286,7 +286,7 @@ Remember that any Lighting.j3md-based material requires a light source, as shown
<p>
As you have seen, you can find the following default materials in <code>jme/core-data/Common/</code>.
As you have seen, you can find the following default materials in <code>jme/core-data/Common/???</code>.
</p>
<div><table>
@ -308,7 +308,7 @@ Shininess : Float </td>
<!-- EDIT7 TABLE [11400-11870] -->
<p>
For a game, you create custom Materials based on these existing MaterialDefintions as you have just seen in the example with the shiny rock&#039;s material.
For a game, you create custom Materials based on these existing MaterialDefintions ??? as you have just seen in the example with the shiny rock&#039;s material.
</p>
</div>
@ -339,7 +339,7 @@ If you want to use one custom material for several models, you can store it in a
You create a j3m file as follows:
</p>
<ol>
<li><div> Create a file <code>assets/Materials/LeakThrough.j3m</code> with the following content:<pre>Material Leak Through : Common/MatDefs/Misc/Unshaded.j3md {
<li><div> Create a file <code>assets/Materials/LeakThrough.j3m</code> in your project directory, with the following content:<pre>Material Leak Through : Common/MatDefs/Misc/Unshaded.j3md {
MaterialParameters {
Color : 1 0 1 1
ColorMap : Flip Textures/ColoredTex/Monkey.png
@ -370,7 +370,7 @@ Using this new custom material <code>LeakThrough.j3m</code> only takes one line.
</p>
</div>
<!-- EDIT9 SECTION "Exercise 1: Custom .j3m Material" [12051-13610] -->
<!-- EDIT9 SECTION "Exercise 1: Custom .j3m Material" [12051-13637] -->
<h3><a>Exercise 2: Bumpiness and Shininess</a></h3>
<div>
@ -400,7 +400,7 @@ Go back to the bumpy rock sample above:
</ol>
</div>
<!-- EDIT10 SECTION "Exercise 2: Bumpiness and Shininess" [13611-14038] -->
<!-- EDIT10 SECTION "Exercise 2: Bumpiness and Shininess" [13638-14065] -->
<h2><a>Conclusion</a></h2>
<div>
@ -450,5 +450,5 @@ See also
</span></div>
</div>
<!-- EDIT11 SECTION "Conclusion" [14039-] -->
<!-- EDIT11 SECTION "Conclusion" [14066-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_material?do=export_xhtmlbody">view online version</a></em></p>

@ -152,7 +152,7 @@ Every JME3 application has a rootNode: Your game automatically inherits the <cod
<th> Purpose: </th><td> A Geometry stores an object&#039;s looks. </td><td> A Node groups Geometries and other Nodes together. </td>
</tr>
<tr>
<th> Examples: </th><td> A box, a sphere, a player, a building, a piece of terrain, a vehicle, missiles, NPCs, etc </td><td> The <code>rootNode</code>, a floor node grouping several terrains, a custom vehicle-with-passengers node, a player-with-weapon node, an audio node, etc </td>
<th> Examples: </th><td> A box, a sphere, a player, a building, a piece of terrain, a vehicle, missiles, NPCs, etc??? </td><td> The <code>rootNode</code>, a floor node grouping several terrains, a custom vehicle-with-passengers node, a player-with-weapon node, an audio node, etc??? </td>
</tr>
</table></div>
<!-- EDIT5 TABLE [3977-4470] -->
@ -169,7 +169,7 @@ What happens in the code snippet? You use the <code>simpleInitApp()</code> metho
<ol>
<li><div> You create the first box Geometry.</div>
<ul>
<li><div> Create a Box shape with a radius of (1,1,1), that makes the box 2x2x2 world units big.</div>
<li><div> Create a Box shape with extents of (1,1,1), that makes the box 2x2x2 world units big.</div>
</li>
<li><div> Position the box at (1,-1,1) using the move() method. (Don&#039;t change the Vector3f.ZERO unless you want to change the center of rotation)</div>
</li>
@ -238,14 +238,14 @@ If you run the app with only the code up to here, you see two cubes: A red cube
<li><div> Rotate the pivot node.<pre> pivot.rotate&#40; 0.4f , 0.4f , 0.0f &#41;;</pre>
<p>
If you run the app now, you see two boxes on top of each other both tilted at the same angle.
If you run the app now, you see two boxes on top of each other ??? both tilted at the same angle.
</p>
</div>
</li>
</ol>
</div>
<!-- EDIT6 SECTION "Understanding the Code" [4472-6875] -->
<!-- EDIT6 SECTION "Understanding the Code" [4472-6874] -->
<h3><a>What is a Pivot Node?</a></h3>
<div>
@ -264,12 +264,12 @@ You can transform (e.g. rotate) Geometries around their own center, or around a
</ul>
</div>
<!-- EDIT7 SECTION "What is a Pivot Node?" [6876-8196] -->
<!-- EDIT7 SECTION "What is a Pivot Node?" [6875-8195] -->
<h2><a>How do I Populate the Scenegraph?</a></h2>
<div>
<div><table>
<tr>
<th> Task? </th><th> Solution! </th>
<th> Task???? </th><th> Solution! </th>
</tr>
<tr>
<td> Create a Spatial </td><td> Create a Mesh shape, wrap it into a Geometry, and give it a Material. For example: <pre>Box mesh = new Box&#40;Vector3f.ZERO, 1, 1, 1&#41;; // a cuboid default mesh
@ -298,9 +298,9 @@ thing.setMaterial&#40;mat&#41;;</pre>
<td> Specify what should be loaded at the start </td><td> Everything you initialize and attach to the <code>rootNode</code> in the <code>simpleInitApp()</code> method is part of the scene at the start of the game. </td>
</tr>
</table></div>
<!-- EDIT9 TABLE [8244-9537] -->
<!-- EDIT9 TABLE [8243-9536] -->
</div>
<!-- EDIT8 SECTION "How do I Populate the Scenegraph?" [8197-9538] -->
<!-- EDIT8 SECTION "How do I Populate the Scenegraph?" [8196-9537] -->
<h2><a>How do I Transform Spatials?</a></h2>
<div>
@ -324,7 +324,7 @@ To move a Spatial <em>to</em> specific coordinates, such as (0,40.2f,-2), use: <
</td><td>+right -left</td><td>+up -down</td><td>+forward -backward</td>
</tr>
</table></div>
<!-- EDIT11 TABLE [9662-10178] --><div><table>
<!-- EDIT11 TABLE [9661-10177] --><div><table>
<tr>
<th> Scaling resizes Spatials </th><th> X-axis </th><th> Y-axis </th><th> Z-axis </th>
</tr>
@ -336,13 +336,13 @@ To scale a Spatial 10 times longer, one tenth the height, and keep the same widt
</td><td>length</td><td>height</td><td>width</td>
</tr>
</table></div>
<!-- EDIT12 TABLE [10180-10669] --><div><table>
<!-- EDIT12 TABLE [10179-10668] --><div><table>
<tr>
<th> Rotation turns Spatials </th><th> X-axis </th><th> Y-axis </th><th> Z-axis </th>
</tr>
<tr>
<td>3-D rotation is a bit tricky (<a href="/com/jme3/gde/core/docs/jme3/rotate.html">learn details here</a>). In short: You can rotate around three axes: Pitch, yaw, and roll. You can specify angles in degrees by multiplying the degrees value with <code>FastMath.DEG_TO_RAD</code>. <br/>
To roll an object 180° around the z axis: <pre>thing.rotate&#40; 0f , 0f , 180*FastMath.DEG_TO_RAD &#41;;</pre>
To roll an object 180?? around the z axis: <pre>thing.rotate&#40; 0f , 0f , 180*FastMath.DEG_TO_RAD &#41;;</pre>
<p>
Tip: If your game idea calls for a serious amount of rotations, it is worth looking into <a href="/com/jme3/gde/core/docs/jme3/quaternion.html">quaternion</a>s, a data structure that can combine and store rotations efficiently.
@ -352,9 +352,9 @@ To roll an object 180° around the z axis: <pre>thing.rotate&#40; 0f , 0f , 180*
</td><td>pitch = nodding your head</td><td>yaw = shaking your head</td><td>roll = cocking your head</td>
</tr>
</table></div>
<!-- EDIT13 TABLE [10671-11452] -->
<!-- EDIT13 TABLE [10670-11451] -->
</div>
<!-- EDIT10 SECTION "How do I Transform Spatials?" [9539-11453] -->
<!-- EDIT10 SECTION "How do I Transform Spatials?" [9538-11452] -->
<h2><a>How do I Troubleshoot Spatials?</a></h2>
<div>
@ -384,9 +384,9 @@ Did you rotate around the right axis? </td>
<td> A Geometry has an unexpected Color or Material. </td><td> Did you reuse a Material from another Geometry and have inadvertently changed its properties? (If so, consider cloning it: mat2 = mat.clone(); ) </td>
</tr>
</table></div>
<!-- EDIT15 TABLE [11585-12643] -->
<!-- EDIT15 TABLE [11584-12642] -->
</div>
<!-- EDIT14 SECTION "How do I Troubleshoot Spatials?" [11454-12644] -->
<!-- EDIT14 SECTION "How do I Troubleshoot Spatials?" [11453-12643] -->
<h2><a>How do I Add Custom Data to Spatials?</a></h2>
<div>
@ -415,11 +415,11 @@ To read this Node&#039;s id number elsewhere, you would use:
<p>
By using different Strings keys (here the key is <code>pivot id</code>), you can get and set several values for whatever data the Spatial needs to carry. When you start writing your game, you might add a fuel value to a car node, speed value to an airplane node, or number of gold coins to a player node, and much more.
By using different Strings keys (here the key is <code>pivot id</code>), you can get and set several values for whatever data the Spatial needs to carry. When you start writing your game, you might add a fuel value to a car node, speed value to an airplane node, or number of gold coins to a player node, and much more. However, one should note that only custom objects that implements Savable can be passed.
</p>
</div>
<!-- EDIT16 SECTION "How do I Add Custom Data to Spatials?" [12645-14010] -->
<!-- EDIT16 SECTION "How do I Add Custom Data to Spatials?" [12644-14097] -->
<h2><a>Conclusion</a></h2>
<div>
@ -445,5 +445,5 @@ Since standard shapes like spheres and boxes get old fast, continue with the nex
</span></div>
</div>
<!-- EDIT17 SECTION "Conclusion" [14011-] -->
<!-- EDIT17 SECTION "Conclusion" [14098-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_node?do=export_xhtmlbody">view online version</a></em></p>

@ -15,17 +15,17 @@ Do you remember the <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_collisi
Apart from making models &quot;solid&quot;, the most common use cases for physics in 3D games are:
</p>
<ul>
<li><div> Driving vehicles with suspensions, tyre friction, ramp jumping, drifting Example: car racers</div>
<li><div> Driving vehicles with suspensions, tyre friction, ramp jumping, drifting ??? Example: car racers</div>
</li>
<li><div> Rolling and bouncing balls Example: pong, pool billiard, bowling</div>
<li><div> Rolling and bouncing balls ??? Example: pong, pool billiard, bowling</div>
</li>
<li><div> Sliding and falling boxes Example: Breakout, Arkanoid</div>
<li><div> Sliding and falling boxes ??? Example: Breakout, Arkanoid</div>
</li>
<li><div> Exposing objects to forces and gravity Example: spaceships or zero-g flight</div>
<li><div> Exposing objects to forces and gravity ??? Example: spaceships or zero-g flight</div>
</li>
<li><div> Animating ragdolls Example: &quot;realistic&quot; character simulations</div>
<li><div> Animating ragdolls ??? Example: &quot;realistic&quot; character simulations</div>
</li>
<li><div> Swinging pendulums, rope bridges, flexible chains, and much more</div>
<li><div> Swinging pendulums, rope bridges, flexible chains, and much more???</div>
</li>
</ul>
@ -257,7 +257,7 @@ You should see a brick wall. Click to shoot cannon balls. Watch the bricks fall
<p>
In the previous tutorials, you used static Geometries (boxes, spheres, and models) that you placed in the scene. Depending on their translation, Geometries can &quot;float in mid-air&quot; and even overlap they are not affected by &quot;gravity&quot; and have no physical mass. This tutorial shows how to add physical properties to Geometries.
In the previous tutorials, you used static Geometries (boxes, spheres, and models) that you placed in the scene. Depending on their translation, Geometries can &quot;float in mid-air&quot; and even overlap ??? they are not affected by &quot;gravity&quot; and have no physical mass. This tutorial shows how to add physical properties to Geometries.
</p>
<p>
@ -408,7 +408,7 @@ You notice that the cannon ball is created in the same way, using the custom <co
This code sample does the following:
</p>
<ol>
<li><div> You create a brick Geometry ball_geo. A Geometry describes the shape and look of an object.</div>
<li><div> You create a ball Geometry ball_geo. A Geometry describes the shape and look of an object.</div>
<ul>
<li><div> ball_geo has a sphere shape</div>
</li>
@ -438,7 +438,7 @@ Since you are shooting cannon balls, the last line accelerates the ball in the d
</p>
</div>
<!-- EDIT7 SECTION "RigidBodyControl: Cannonball" [12414-14011] -->
<!-- EDIT7 SECTION "RigidBodyControl: Cannonball" [12414-14010] -->
<h3><a>RigidBodyControl: Floor</a></h3>
<div>
@ -493,7 +493,7 @@ This code sample does the following:
</ol>
</div>
<!-- EDIT8 SECTION "RigidBodyControl: Floor" [14012-15436] -->
<!-- EDIT8 SECTION "RigidBodyControl: Floor" [14011-15435] -->
<h2><a>Creating the Scene</a></h2>
<div>
@ -502,13 +502,13 @@ This code sample does the following:
Let&#039;s have a quick look at the custom helper methods:
</p>
<ul>
<li><div> <code>initMaterial()</code> This method initializes all the materials we use in this demo.</div>
<li><div> <code>initMaterial()</code> ??? This method initializes all the materials we use in this demo.</div>
</li>
<li><div> <code>initWall()</code> A double loop that generates a wall by positioning brick objects: 15 rows high with 6 bricks per row. It&#039;s important to space the physical bricks so they do not overlap.</div>
<li><div> <code>initWall()</code> ??? A double loop that generates a wall by positioning brick objects: 15 rows high with 6 bricks per row. It&#039;s important to space the physical bricks so they do not overlap.</div>
</li>
<li><div> <code>initCrossHairs()</code> This method simply displays a plus sign that you use as crosshairs for aiming. Note that screen elements such as crosshairs are attached to the <code>guiNode</code>, not the <code>rootNode</code>!</div>
<li><div> <code>initCrossHairs()</code> ??? This method simply displays a plus sign that you use as crosshairs for aiming. Note that screen elements such as crosshairs are attached to the <code>guiNode</code>, not the <code>rootNode</code>!</div>
</li>
<li><div> <code>initInputs()</code> This method sets up the click-to-shoot action.</div>
<li><div> <code>initInputs()</code> ??? This method sets up the click-to-shoot action.</div>
</li>
</ul>
@ -518,7 +518,7 @@ These methods are each called once from the <code>simpleInitApp()</code> method
</p>
</div>
<!-- EDIT9 SECTION "Creating the Scene" [15437-16265] -->
<!-- EDIT9 SECTION "Creating the Scene" [15436-16264] -->
<h2><a>The Cannon Ball Shooting Action</a></h2>
<div>
@ -548,7 +548,7 @@ In the moment the cannonball appears in the scene, it flies off with the velocit
</p>
</div>
<!-- EDIT10 SECTION "The Cannon Ball Shooting Action" [16266-17306] -->
<!-- EDIT10 SECTION "The Cannon Ball Shooting Action" [16265-17305] -->
<h2><a>Moving a Physical Spatial</a></h2>
<div>
@ -575,12 +575,12 @@ Learn more about static versus kinematic versus dynamic in the <a href="/com/jme
</p>
</div>
<!-- EDIT11 SECTION "Moving a Physical Spatial" [17307-18276] -->
<!-- EDIT11 SECTION "Moving a Physical Spatial" [17306-18275] -->
<h2><a>Excercises</a></h2>
<div>
</div>
<!-- EDIT12 SECTION "Excercises" [18277-18300] -->
<!-- EDIT12 SECTION "Excercises" [18276-18299] -->
<h3><a>Exercise 1: Debug Shapes</a></h3>
<div>
@ -597,7 +597,7 @@ Now you see the collisionShapes of the bricks and spheres, and the floor highlig
</p>
</div>
<!-- EDIT13 SECTION "Exercise 1: Debug Shapes" [18301-18566] -->
<!-- EDIT13 SECTION "Exercise 1: Debug Shapes" [18300-18565] -->
<h3><a>Exercise 2: No Mo&#039; Static</a></h3>
<div>
@ -607,7 +607,7 @@ What happens if you give a static node, such as the floor, a mass of more than 0
</p>
</div>
<!-- EDIT14 SECTION "Exercise 2: No Mo' Static" [18567-18687] -->
<!-- EDIT14 SECTION "Exercise 2: No Mo' Static" [18566-18686] -->
<h3><a>Exercise 3: Behind the Curtain</a></h3>
<div>
@ -617,7 +617,7 @@ Fill your scene with walls, bricks, and cannon balls. When do you begin to see a
</p>
<p>
Popular AAA games use a clever mix of physics, animation and prerendered graphics to give you the illusion of a real, &quot;physical&quot; world. Think of your favorite video games and try to spot where and how the game designers trick you into believing that the whole scene is physical. For example, think of a building &quot;breaking&quot; into 4-8 parts after an explosion. The pieces most likely fly on predefined (so called kinematic) paths and are only replaced by dynamic Spatials after they touch the ground Now that you start to implement game physics yourself, look behind the curtain!
Popular AAA games use a clever mix of physics, animation and prerendered graphics to give you the illusion of a real, &quot;physical&quot; world. Think of your favorite video games and try to spot where and how the game designers trick you into believing that the whole scene is physical. For example, think of a building &quot;breaking&quot; into 4-8 parts after an explosion. The pieces most likely fly on predefined (so called kinematic) paths and are only replaced by dynamic Spatials after they touch the ground??? Now that you start to implement game physics yourself, look behind the curtain!
</p>
<p>
@ -625,7 +625,7 @@ Using physics everywhere in a game sounds like a cool idea, but it is easily ove
</p>
</div>
<!-- EDIT15 SECTION "Exercise 3: Behind the Curtain" [18688-19693] -->
<!-- EDIT15 SECTION "Exercise 3: Behind the Curtain" [18687-19692] -->
<h2><a>Conclusion</a></h2>
<div>
@ -635,7 +635,7 @@ You have learned how to activate the jBullet PhysicsSpace in an application by a
</p>
<p>
<p><div>Congratulations! You have completed the last beginner tutorial. Now you are ready to start <a href="/com/jme3/gde/core/docs/jme3.html">combining what you have learned</a>, to create a cool 3D game of your own. Show us what you can do, and feel free to share your demos, game videos, and screenshots on the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/groups/free-announcements/forum/"><param name="text" value="<html><u>Free Announcements Forum</u></html>"><param name="textColor" value="blue"></object>!
<p><div>Congratulations! ??? You have completed the last beginner tutorial. Now you are ready to start <a href="/com/jme3/gde/core/docs/jme3.html">combining what you have learned</a>, to create a cool 3D game of your own. Show us what you can do, and feel free to share your demos, game videos, and screenshots on the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/groups/free-announcements/forum/"><param name="text" value="<html><u>Free Announcements Forum</u></html>"><param name="textColor" value="blue"></object>!
</div></p>
</p>
<div><span>
@ -649,5 +649,5 @@ You have learned how to activate the jBullet PhysicsSpace in an application by a
</span></div>
</div>
<!-- EDIT16 SECTION "Conclusion" [19694-] -->
<!-- EDIT16 SECTION "Conclusion" [19693-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_physics?do=export_xhtmlbody">view online version</a></em></p>

@ -13,7 +13,7 @@ Typical interactions in games include shooting, picking up objects, and opening
</p>
<p>
You can pick something by either pressing a key on the keyboard, or by clicking with the mouse. In either case, you identify the target by aiming a ray –a straight line– into the scene. This method to implement picking is called <em>ray casting</em> (which is not the same as <em>ray tracing</em>).
You can pick something by either pressing a key on the keyboard, or by clicking with the mouse. In either case, you identify the target by aiming a ray ???a straight line??? into the scene. This method to implement picking is called <em>ray casting</em> (which is not the same as <em>ray tracing</em>).
</p>
<p>
@ -438,7 +438,7 @@ Here are some tips:
<p>
Shooting boxes isn&#039;t very exciting can you add code that loads and positions a model in the scene, and shoot at it?
Shooting boxes isn&#039;t very exciting ??? can you add code that loads and positions a model in the scene, and shoot at it?
</p>
<ul>
<li><div> Tip: You can use <code>Spatial golem = assetManager.loadModel(&quot;Models/Oto/Oto.mesh.xml&quot;);</code> from the engine&#039;s jme3-test-data.jar.</div>
@ -465,7 +465,7 @@ Change the code as follows to simulate the player picking up objects into the in
<ul>
<li><div> If your nodes use a lit Material (not &quot;Unshaded.j3md&quot;), also add a light to the guiNode.</div>
</li>
<li><div> Size units are pixels in the HUD, therefor a 2-wu cube is displayed only 2 pixels wide in the HUD. Scale it bigger!</div>
<li><div> Size units are pixels in the HUD, therefor a 2-wu cube is displayed only 2 pixels wide in the HUD. ??? Scale it bigger!</div>
</li>
<li><div> Position the nodes: The bottom left corner of the HUD is (0f,0f), and the top right corner is at (settings.getWidth(),settings.getHeight()).</div>
</li>
@ -495,9 +495,9 @@ You have learned how to use ray casting to solve the task of determining what ob
Use your imagination from here:
</p>
<ul>
<li><div> In your game, the click can trigger any action on the identified Geometry: Detach it and put it into the inventory, attach something to it, trigger an animation or effect, open a door or crate, etc.</div>
<li><div> In your game, the click can trigger any action on the identified Geometry: Detach it and put it into the inventory, attach something to it, trigger an animation or effect, open a door or crate, ??? etc.</div>
</li>
<li><div> In your game, you could replace the red mark with a particle emitter, add an explosion effect, play a sound, calculate the new score after each hit depending on what was hit etc.</div>
<li><div> In your game, you could replace the red mark with a particle emitter, add an explosion effect, play a sound, calculate the new score after each hit depending on what was hit ??? etc.</div>
</li>
</ul>

@ -30,9 +30,9 @@ OK, let&#039;s get ready to create our first jMonkeyEngine3 application.
In the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>:
</p>
<ol>
<li><div> Choose File→New Project… from the main menu.</div>
<li><div> Choose File???New Project??? from the main menu.</div>
</li>
<li><div> In the New Project wizard, select the template JME3Basic Game. Click Next. </div>
<li><div> In the New Project wizard, select the template JME3???Basic Game. Click Next. </div>
<ol>
<li><div> Specify a project name, e.g. &quot;HelloWorldTutorial&quot;</div>
</li>
@ -70,7 +70,7 @@ In the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>:
<ol>
<li><div> Right-click the Source Packages node of your project.</div>
</li>
<li><div> Choose New…→Java Class to create a new file.</div>
<li><div> Choose New??????Java Class to create a new file.</div>
</li>
<li><div> Enter the class name: <code>HelloJME3</code></div>
</li>
@ -166,7 +166,7 @@ Look at the first line. The HelloJME3.java class extends <code>com.jme3.app.Simp
&#125;</pre>
<p>
Every JME3 game is an instance of <code>com.jme3.app.SimpleApplication</code>. The SimpleApplication class manages your 3D scene graph and automatically draws it to the screen that is, in short, what a game engine does for you!
Every JME3 game is an instance of <code>com.jme3.app.SimpleApplication</code>. The SimpleApplication class manages your 3D scene graph and automatically draws it to the screen ??? that is, in short, what a game engine does for you!
</p>
<p>
@ -234,7 +234,7 @@ Look at rest of the code sample. The <code>simpleInitApp()</code> method is auto
The initialization code of a blue cube looks as follows:
</p>
<pre> public void simpleInitApp&#40;&#41; &#123;
Box b = new Box&#40;Vector3f.ZERO, 1, 1, 1&#41;; // create a 1x1x1 box shape at the origin
Box b = new Box&#40;Vector3f.ZERO, 1, 1, 1&#41;; // create a 2x2x2 box shape at the origin
Geometry geom = new Geometry&#40;&quot;Box&quot;, b&#41;; // create a cube geometry from the box shape
Material mat = new Material&#40;assetManager,
&quot;Common/MatDefs/Misc/Unshaded.j3md&quot;&#41;; // create a simple material
@ -253,7 +253,7 @@ A typical JME3 game has the following initialization process:
</li>
<li><div> You make objects appear in the scene by attaching them to the <code>rootNode</code>.</div>
</li>
<li><div> <strong>Examples:</strong> Load player, terrain, sky, enemies, obstacles, , and place them in their start positions.</div>
<li><div> <strong>Examples:</strong> Load player, terrain, sky, enemies, obstacles, ???, and place them in their start positions.</div>
</li>
</ul>
</li>
@ -263,7 +263,7 @@ A typical JME3 game has the following initialization process:
</li>
<li><div> You set variables to their start values. </div>
</li>
<li><div> <strong>Examples:</strong> Set the <code>score</code> to 0, set <code>health</code> to 100%, </div>
<li><div> <strong>Examples:</strong> Set the <code>score</code> to 0, set <code>health</code> to 100%, ???</div>
</li>
</ul>
</li>
@ -271,17 +271,17 @@ A typical JME3 game has the following initialization process:
<ul>
<li><div> The following input bindings are pre-configured:</div>
<ul>
<li><div> W,A,S,D keys Move around in the scene</div>
<li><div> W,A,S,D keys ??? Move around in the scene</div>
</li>
<li><div> Mouse movement and arrow keys Turn the camera</div>
<li><div> Mouse movement and arrow keys ??? Turn the camera</div>
</li>
<li><div> Escape key Quit the game</div>
<li><div> Escape key ??? Quit the game</div>
</li>
</ul>
</li>
<li><div> Define your own additional keys and mouse click actions.</div>
</li>
<li><div> <strong>Examples:</strong> Click to shoot, press Space to jump, </div>
<li><div> <strong>Examples:</strong> Click to shoot, press Space to jump, ???</div>
</li>
</ul>
</li>

@ -8,7 +8,7 @@ Next: <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html">Hello Aud
</p>
<p>
One way to create a 3D landscape is to sculpt a huge terrain model. This gives you a lot of artistic freedom but rendering such a huge model can be quite slow. This tutorial explains how to create fast-rendering terrains from heightmaps, and how to use texture splatting to make the terrain look good.
One way to create a 3D landscape is to sculpt a huge terrain model. This gives you a lot of artistic freedom ??? but rendering such a huge model can be quite slow. This tutorial explains how to create fast-rendering terrains from heightmaps, and how to use texture splatting to make the terrain look good.
</p>
<p>
@ -158,9 +158,9 @@ Important things to note:
When looking at Java data types to hold an array of floats between 0 and 255, the Image class comes to mind. Storing a terrain&#039;s height values as a grayscale image has one big advantage: The outcome is a very userfriendly, like a topographical map:
</p>
<ul>
<li><div> Low values (e.g. 0 or 50) are dark gray these are valleys.</div>
<li><div> Low values (e.g. 0 or 50) are dark gray ??? these are valleys.</div>
</li>
<li><div> High values (e.g. 200, 255) are light grays these are hills.</div>
<li><div> High values (e.g. 200, 255) are light grays ??? these are hills.</div>
</li>
</ul>
@ -261,13 +261,13 @@ Before you can start painting, you have to make a few decisions:
<ol>
<li><div> Choose three textures. For example grass.jpg, dirt.jpg, and road.jpg. <img src="/wiki/lib/exe/fetch.php"> <img src="/wiki/lib/exe/fetch.php"> <img src="/wiki/lib/exe/fetch.php"></div>
</li>
<li><div> You &quot;paint&quot; three texture layers by using three colors: Red, blue and, green. You arbitrarily decide that</div>
<li><div> You &quot;paint&quot; three texture layers by using three colors: Red, blue and, green. You arbitrarily decide that???</div>
<ol>
<li><div> Red is grass red is layer <code>Tex1</code>, so put the grass texture into Tex1.</div>
<li><div> Red is grass ??? red is layer <code>Tex1</code>, so put the grass texture into Tex1.</div>
</li>
<li><div> Green is dirt green is layer <code>Tex2</code>, so put the dirt texture into Tex2.</div>
<li><div> Green is dirt ??? green is layer <code>Tex2</code>, so put the dirt texture into Tex2.</div>
</li>
<li><div> Blue is roads blue is layer <code>Tex3</code>, so put the roads texture into Tex3.</div>
<li><div> Blue is roads ??? blue is layer <code>Tex3</code>, so put the roads texture into Tex3.</div>
</li>
</ol>
</li>
@ -284,9 +284,9 @@ Now you start painting the texture:
</li>
<li><div> Open <code>alphamap.png</code> in a graphic editor and switch the image mode to color image.</div>
<ol>
<li><div> Paint the black valleys red this will be the grass.</div>
<li><div> Paint the black valleys red ??? this will be the grass.</div>
</li>
<li><div> Paint the white hills green this will be the dirt of the mountains.</div>
<li><div> Paint the white hills green ??? this will be the dirt of the mountains.</div>
</li>
<li><div> Paint blue lines where you want roads to criss-cross the landscape.</div>
</li>
@ -297,7 +297,7 @@ Now you start painting the texture:
</ol>
<p>
<img src="/wiki/lib/exe/fetch.php"> <img src="/wiki/lib/exe/fetch.php">
<img src="/wiki/lib/exe/fetch.php"> ??? <img src="/wiki/lib/exe/fetch.php">
</p>
</div>
@ -363,7 +363,7 @@ Use <code>setWrap(WrapMode.Repeat)</code> to make the small texture fill the wid
<p>
Internally, the generated terrain mesh is broken down into tiles and blocks. This is an optimization to make culling easier. You do not need to worry about &quot;tiles and blocks&quot; too much, just use recommended values for now 64 is a good start.
Internally, the generated terrain mesh is broken down into tiles and blocks. This is an optimization to make culling easier. You do not need to worry about &quot;tiles and blocks&quot; too much, just use recommended values for now ??? 64 is a good start.
</p>
<p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@ -0,0 +1,616 @@
<h1><a>3ds Max Bone Animation to JME3 using OgreMax plugin</a></h1>
<div>
</div>
<!-- EDIT1 SECTION "3ds Max Bone Animation to JME3 using OgreMax plugin" [1-67] -->
<h2><a>Asset Management</a></h2>
<div>
<p>
For the managing of assets in general, be sure to read the <a href="/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html">Asset Pipeline Documentation</a>. It contains vital information on how to manage your asset files.
</p>
</div>
<!-- EDIT2 SECTION "Asset Management" [68-300] -->
<h2><a>Creating models in 3dsMax</a></h2>
<div>
<p>
For this tutorial I used 3D Studio Max 2012 and OgreMax 2.4.3 free edition
</p>
</div>
<!-- EDIT3 SECTION "Creating models in 3dsMax" [301-414] -->
<h3><a>Create Model and Bones</a></h3>
<div>
<ul>
<li><div> Create a new file</div>
</li>
<li><div> Select the ???Create??? tab &gt; ???Geometry??? &gt; ???Cylinder???</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-0.png">
</p>
<ul>
<li><div> Draw a cylinder, lets say with 8 height segments (must be enough for a smooth deformation)</div>
</li>
<li><div> Also check ???Generate Mapping Coords.???</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-1.png">
</p>
<ul>
<li><div> Click ???Create??? tab &gt; ???Systems??? &gt; ???Bones???</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-2.png">
</p>
<ul>
<li><div> Add some bones in the center of the cylinder</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-3.png">
</p>
<ul>
<li><div> Select the cylinder, right click it and click ???Convert To:??? &gt; ???Convert to Editable Mesh??? to prevent issues with OgreMax</div>
</li>
<li><div> Click the ???Modify??? tab &gt; ???Modifier List??? and add the ???Skin??? modifier</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-4.png">
</p>
<ul>
<li><div> Beneath ???Bones:??? click ???Add??? and select all of your bones</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-5.png">
</p>
<ul>
<li><div> You may also edit the envelopes, but for a small test the default settings are ok</div>
</li>
</ul>
</div>
<!-- EDIT4 SECTION "Create Model and Bones" [415-1354] -->
<h3><a>Create the animation</a></h3>
<div>
<ul>
<li><div> Select the cylinder, and click ???Display??? tab &gt; ???Freeze Selected??? so it is easier to select the bones during animation</div>
</li>
<li><div> Select the two top bones and enable the ???Auto Key??? mode</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-6.png">
</p>
<ul>
<li><div> The first key frame will be created automatically. Move the animation track slider to frame 5</div>
</li>
<li><div> Move the selected bones a bit. The cylinder mesh will be deformed. Because you are in the ???Auto Key??? mode, a key frame will be created</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-7.png">
</p>
<ul>
<li><div> Create some additional key frames. You may also select more bones and move or rotate them. I???ve created 25 frames and the last key frame equals the first, so the animation is loopable</div>
</li>
<li><div> After creating the animation, disable the ???Auto Key??? mode</div>
</li>
</ul>
</div>
<!-- EDIT5 SECTION "Create the animation" [1355-2141] -->
<h3><a>OgreMax settings</a></h3>
<div>
<ul>
<li><div> Open the ???OgreMax Scene Settings??? dialog from the menu</div>
</li>
<li><div> In the ???Meshes??? tab, enable ???Export <acronym title="Extensible Markup Language">XML</acronym> Files??? and disable ???Export Binary Files??? as well as ???Export Vertex Colors???</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-8.png">
</p>
<ul>
<li><div> Click the ???Environment??? tab and uncheck ???Export Environment Settings???. Otherwise the JME importer will throw a NullPointerException</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-9.png">
</p>
<ul>
<li><div> If you have textured your model, you may also check ???Copy Bitmaps to Export Directory??? in the ???Bitmaps??? tab</div>
</li>
<li><div> Unfreeze the cylinder by clicking ???Display??? tab &gt; ???Unfreeze All??? and select it</div>
</li>
<li><div> While having the cylinder selected, open the ???OgreMax Object Settings??? dialog from the menu</div>
</li>
<li><div> Open the ???Mesh Animations??? tab and select type ???Skeleton???, ???Export Skeleton??? : ???Yes???</div>
</li>
<li><div> Below ???Mesh Animations??? hit the ???Add?????? button</div>
</li>
<li><div> Assign a name to the track, maybe ???wobble???. The track type must be ???Skin. Set the right ???Start/End Frames??? for your animation</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-10.png">
</p>
<ul>
<li><div> Hit ok and you will see the animation in the table. You may add additional animations by selecting other frame ranges, if desired</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-11.png">
</p>
</div>
<!-- EDIT6 SECTION "OgreMax settings" [2142-3395] -->
<h3><a>Export and Import</a></h3>
<div>
<ul>
<li><div> When all animations are in the list, select ???OgreMax??? &gt; ???Export??? &gt; ???Export Scene??? and name the file ???worm.scene???</div>
</li>
<li><div> Create a JME test class that imports the file, get the animation controller and start the ???wobble??? animation</div>
</li>
</ul>
<pre>import com.jme3.animation.AnimChannel;
import com.jme3.animation.AnimControl;
import com.jme3.animation.Skeleton;
import com.jme3.app.SimpleApplication;
import com.jme3.asset.plugins.FileLocator;
import com.jme3.light.AmbientLight;
import com.jme3.light.PointLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.LodControl;
import com.jme3.scene.debug.SkeletonDebugger;
&nbsp;
<span>/**
* This is a test class for loading a Ogre XML scene exported by OgreMax.
*
* @author Stephan Dreyer
*
*/</span>
public class TestOgreMaxImport extends SimpleApplication &#123;
&nbsp;
@Override
public void simpleInitApp&#40;&#41; &#123;
assetManager.registerLocator&#40;&quot;Assets/model/ogre/test/&quot;, FileLocator.class&#41;;
&nbsp;
// create the geometry and attach it
final Node model = &#40;Node&#41; assetManager.loadModel&#40;&quot;worm.scene&quot;&#41;;
// resize it, because of the large 3dsmax scales
model.setLocalScale&#40;.001f&#41;;
&nbsp;
// attach to root node
rootNode.attachChild&#40;model&#41;;
addLodControl&#40;model&#41;;
&nbsp;
final AnimControl ac = findAnimControl&#40;model&#41;;
&nbsp;
try &#123;
// add a skeleton debugger to make bones visible
final Skeleton skel = ac.getSkeleton&#40;&#41;;
final SkeletonDebugger skeletonDebug = new SkeletonDebugger&#40;&quot;skeleton&quot;,
skel&#41;;
final Material mat = new Material&#40;assetManager,
&quot;Common/MatDefs/Misc/Unshaded.j3md&quot;&#41;;
mat.setColor&#40;&quot;Color&quot;, ColorRGBA.Green&#41;;
mat.getAdditionalRenderState&#40;&#41;.setDepthTest&#40;false&#41;;
skeletonDebug.setMaterial&#40;mat&#41;;
model.attachChild&#40;skeletonDebug&#41;;
&nbsp;
// create a channel and start the wobble animation
final AnimChannel channel = ac.createChannel&#40;&#41;;
channel.setAnim&#40;&quot;wobble&quot;&#41;;
&#125; catch &#40;final Exception e&#41; &#123;
e.printStackTrace&#40;&#41;;
&#125;
&nbsp;
// add some lights
rootNode.addLight&#40;new AmbientLight&#40;&#41;&#41;;
rootNode.addLight&#40;new PointLight&#40;&#41;&#41;;
&#125;
&nbsp;
public void addLodControl&#40;final Spatial parent&#41; &#123;
if &#40;parent instanceof Node&#41; &#123;
for &#40;final Spatial s : &#40;&#40;Node&#41; parent&#41;.getChildren&#40;&#41;&#41; &#123;
addLodControl&#40;s&#41;;
&#125;
&#125; else if &#40;parent instanceof Geometry&#41; &#123;
final LodControl lc = new LodControl&#40;&#41;;
lc.setDistTolerance&#40;1f&#41;;
parent.addControl&#40;lc&#41;;
&#125;
&#125;
&nbsp;
<span>/**
* Method to find the animation control, because it is not on the models root
* node.
*
* @param parent
* The spatial to search.
* @return The {@link AnimControl} or null if it does not exist.
*/</span>
public AnimControl findAnimControl&#40;final Spatial parent&#41; &#123;
final AnimControl animControl = parent.getControl&#40;AnimControl.class&#41;;
if &#40;animControl != null&#41; &#123;
return animControl;
&#125;
&nbsp;
if &#40;parent instanceof Node&#41; &#123;
for &#40;final Spatial s : &#40;&#40;Node&#41; parent&#41;.getChildren&#40;&#41;&#41; &#123;
final AnimControl animControl2 = findAnimControl&#40;s&#41;;
if &#40;animControl2 != null&#41; &#123;
return animControl2;
&#125;
&#125;
&#125;
&nbsp;
return null;
&#125;
&nbsp;
public static void main&#40;final String&#91;&#93; args&#41; &#123;
new TestOgreMaxImport&#40;&#41;.start&#40;&#41;;
&#125;
&#125;</pre>
<p>
You will see your worms strange movements. Have fun!
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax-12.png">
</p>
</div>
<!-- EDIT7 SECTION "Export and Import" [3396-6885] -->
<h1><a>3ds Max Biped Animation to JME3</a></h1>
<div>
<p>
You can also use the biped operator to animate models, but you have to consider a lot of things.
</p>
</div>
<!-- EDIT8 SECTION "3ds Max Biped Animation to JME3" [6886-7030] -->
<h3><a>Creating a character in 3dsMax</a></h3>
<div>
<p>
I will not tell you in detail how to model a character. There I many good tutorials on the web, I used <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://majoh.deviantart.com/art/Mandi-s-3dsmax-Biped-Tutorial-26515784"><param name="text" value="<html><u>that one</u></html>"><param name="textColor" value="blue"></object>.
</p>
<ul>
<li><div> You may create a biped before you start modeling, so it is quite easier to fit the proportions of the biped.</div>
</li>
<li><div> After creating a model and a biped I got something like that:</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/1.png">
</p>
<ul>
<li><div> I added the &quot;Meshmooth&quot; modifier with 2 iterations and got this result:</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_2.png">
</p>
<ul>
<li><div> After smoothing your mesh you could correct vertices with the &quot;Edit Mesh&quot; modifier. Finally you add the &quot;Physique&quot; modifier.</div>
</li>
<li><div> Now you can edit your envelopes to fit your model.</div>
</li>
</ul>
</div>
<!-- EDIT9 SECTION "Creating a character in 3dsMax" [7031-7770] -->
<h3><a>Creating a simple walk animation</a></h3>
<div>
<ul>
<li><div> Select the chest of your biped, choose &quot;Motion&quot; (1) tab &gt; &quot;Foot Step Mode&quot; (2) &gt; &quot;Create Multiple Footsteps&quot; (3)</div>
</li>
<li><div> You need to select the &quot;In Place Mode&quot; (4), so the character moves in place without changing its location.</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_3_1.png">
</p>
<ul>
<li><div> You can now play a bit with the settings, I adjusted &quot;Actual Stride Length&quot; and &quot;Actual Stride Height&quot;. </div>
</li>
<li><div> For the &quot;Number of Footsteps&quot; 6 will be sufficient because the animation is cycled later.</div>
</li>
<li><div> <strong>Note:</strong> You can also create or edit footsteps by hand and move or rotate them.</div>
</li>
<li><div> After all footsteps are created, hit the &quot;Create Keys for Inactive Footsteps&quot; button in the &quot;Footstep Operations&quot; panel</div>
</li>
<li><div> You can now check your animation by pressing the &quot;Play&quot; button in the timeline.</div>
</li>
</ul>
</div>
<!-- EDIT10 SECTION "Creating a simple walk animation" [7771-8582] -->
<h3><a>Preparing the export and setting up OgreMax</a></h3>
<div>
<ul>
<li><div> The &quot;OgreMax Scene Settings&quot; should be the same as shown above.</div>
</li>
<li><div> Because you want your animation to be looped, you&#039;ve got to find two key frames where the legs are nearly in the same position. For my settings I&#039;ve chosen the frames 48-78 for the walk animation.</div>
</li>
<li><div> Select the character mesh and open the &quot;OgreMax Scene Settings&quot; dialog. </div>
</li>
<li><div> Open the ???Mesh Animations??? tab and select type ???Skeleton???, ???Export Skeleton??? : ???Yes???</div>
</li>
<li><div> Below ???Mesh Animations??? hit the ???Add?????? button</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_4.png">
</p>
<ul>
<li><div> Enter a name for the track, e.g. &quot;walk&quot;.</div>
</li>
<li><div> Assure the track type is set to &quot;Physique&quot;.</div>
</li>
<li><div> Set the start and end frames, for me it is 48-78.</div>
</li>
<li><div> Close the dialog by pushing &quot;Ok&quot;.</div>
</li>
<li><div> <strong>Note:</strong> It could be useful to create also a track &quot;start_run&quot;, that blends between the stand and walk animation. I would use frame 0-47 for that.</div>
</li>
<li><div> Because you have a smooth model with a lot of polygons, it may be useful to create <a href="/com/jme3/gde/core/docs/jme3/advanced/mesh.html">levels of detail (LOD)</a>. When the camera is farther away, a low-poly mesh of your character will be rendered.</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_5.png">
</p>
<ul>
<li><div> Open the &quot;Mesh LOD&quot; tab in object settings.</div>
</li>
<li><div> It will suffice to select the &quot;Automatic&quot; setting, but if your animation starts to look weird, you can create them by hand.</div>
</li>
<li><div> I used 4 levels of LOD with a distance of 1. Don&#039;t worry about the distance setting, you can change it later in JME.</div>
</li>
<li><div> For the level reduction, I used 20 percent, which produce good results. You may adjust all the settings depending on your needs.</div>
</li>
<li><div> Close the dialoque by clicking &quot;Ok&quot;.</div>
</li>
</ul>
</div>
<!-- EDIT11 SECTION "Preparing the export and setting up OgreMax" [8583-10257] -->
<h3><a>Fixing the location</a></h3>
<div>
<ul>
<li><div> Before you export you need to do a little fix, because your model is not really located where you see it. JME will get into a lot of trouble, if you don&#039;t change that.</div>
</li>
<li><div> Assure to save the max file. Sometimes OgreMax crashes the whole application during export. If you want to change the animation after export, you should reload this file because fixing the location changes something I can&#039;t really figure out.</div>
</li>
</ul>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_6.png">
</p>
<ul>
<li><div> Right click the &quot;Select and Move&quot; tool in the upper toolbar. A dialog will pop up.</div>
</li>
<li><div> Set the X and Y location to 0 and close the dialog.</div>
</li>
<li><div> There is another way to achieve this. If you have scaled, moved or rotated your model, just open the &quot;Hierarchy&quot; tab and click &quot;Transform&quot; and &quot;Scale&quot; on the &quot;Reset&quot; panel.</div>
</li>
</ul>
</div>
<!-- EDIT12 SECTION "Fixing the location" [10258-11067] -->
<h3><a>Export and Import</a></h3>
<div>
<ul>
<li><div> Now you can export your scene. Select only the mesh and use &quot;Export selected objects&quot;. You will not need the whole scene including the biped object, but the bones are created automatically during export.</div>
</li>
<li><div> Create a JME test class for the scene import.</div>
</li>
</ul>
<p>
For that, I extended the first class:
</p>
<pre>import com.jme3.animation.AnimChannel;
import com.jme3.animation.AnimControl;
import com.jme3.animation.Skeleton;
import com.jme3.app.SimpleApplication;
import com.jme3.asset.plugins.FileLocator;
import com.jme3.light.AmbientLight;
import com.jme3.light.PointLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.LodControl;
import com.jme3.scene.debug.SkeletonDebugger;
import com.jme3.scene.shape.Box;
&nbsp;
<span>/**
* This is a test class for loading a Ogre XML scene exported by OgreMax.
*
* @author Stephan Dreyer
*
*/</span>
public class TestOgreMaxImport extends SimpleApplication &#123;
&nbsp;
@Override
public void simpleInitApp&#40;&#41; &#123;
assetManager.registerLocator&#40;&quot;Assets/model/ogre/test/&quot;, FileLocator.class&#41;;
&nbsp;
// create the geometry and attach it
final Node model = &#40;Node&#41; assetManager.loadModel&#40;&quot;guy.scene&quot;&#41;;
// resize it, because of the large 3dsmax scales
model.setLocalScale&#40;.02f&#41;;
&nbsp;
// attach to root node
rootNode.attachChild&#40;model&#41;;
addLodControl&#40;model&#41;;
&nbsp;
final AnimControl ac = findAnimControl&#40;model&#41;;
&nbsp;
try &#123;
// add a skeleton debugger to make bones visible
final Skeleton skel = ac.getSkeleton&#40;&#41;;
final SkeletonDebugger skeletonDebug = new SkeletonDebugger&#40;&quot;skeleton&quot;,
skel&#41;;
final Material mat = new Material&#40;assetManager,
&quot;Common/MatDefs/Misc/Unshaded.j3md&quot;&#41;;
mat.setColor&#40;&quot;Color&quot;, ColorRGBA.Green&#41;;
mat.getAdditionalRenderState&#40;&#41;.setDepthTest&#40;false&#41;;
skeletonDebug.setMaterial&#40;mat&#41;;
// model.attachChild(skeletonDebug);
&nbsp;
// create a channel and start the walk animation
final AnimChannel channel = ac.createChannel&#40;&#41;;
channel.setAnim&#40;&quot;walk&quot;&#41;;
&#125; catch &#40;final Exception e&#41; &#123;
e.printStackTrace&#40;&#41;;
&#125;
&nbsp;
flyCam.setMoveSpeed&#40;40f&#41;;
cam.setLocation&#40;new Vector3f&#40;15, 10, 15&#41;&#41;;
cam.lookAt&#40;Vector3f.ZERO, Vector3f.UNIT_Y&#41;;
cam.setFrustumNear&#40;1f&#41;;
&nbsp;
// add some lights
rootNode.addLight&#40;new AmbientLight&#40;&#41;&#41;;
&nbsp;
final PointLight pl = new PointLight&#40;&#41;;
pl.setPosition&#40;new Vector3f&#40;-3f, 3f, 1f&#41;&#41;;
rootNode.addLight&#40;pl&#41;;
&nbsp;
// add a box as floor
final Box b = new Box&#40;100f, 0.1f, 100f&#41;;
final Geometry geo = new Geometry&#40;&quot;floor&quot;, b&#41;;
&nbsp;
final Material mat = new Material&#40;assetManager,
&quot;Common/MatDefs/Misc/Unshaded.j3md&quot;&#41;;
mat.setColor&#40;&quot;Color&quot;, ColorRGBA.LightGray&#41;;
geo.setMaterial&#40;mat&#41;;
&nbsp;
rootNode.attachChild&#40;geo&#41;;
&#125;
&nbsp;
<span>/**
* Method to traverse through the scene graph and add a {@link LodControl} to
* the mesh.
*
* @param parent
* The Node to add the control to.
*/</span>
public void addLodControl&#40;final Spatial parent&#41; &#123;
if &#40;parent instanceof Node&#41; &#123;
for &#40;final Spatial s : &#40;&#40;Node&#41; parent&#41;.getChildren&#40;&#41;&#41; &#123;
addLodControl&#40;s&#41;;
&#125;
&#125; else if &#40;parent instanceof Geometry&#41; &#123;
final LodControl lc = new LodControl&#40;&#41;;
&nbsp;
// the distance for LOD changes is set here, you may adjust this
lc.setDistTolerance&#40;1f&#41;;
parent.addControl&#40;lc&#41;;
&#125;
&#125;
&nbsp;
<span>/**
* Method to find the animation control, because it is not on the models root
* node.
*
* @param parent
* The spatial to search.
* @return The {@link AnimControl} or null if it does not exist.
*/</span>
public AnimControl findAnimControl&#40;final Spatial parent&#41; &#123;
final AnimControl animControl = parent.getControl&#40;AnimControl.class&#41;;
if &#40;animControl != null&#41; &#123;
return animControl;
&#125;
&nbsp;
if &#40;parent instanceof Node&#41; &#123;
for &#40;final Spatial s : &#40;&#40;Node&#41; parent&#41;.getChildren&#40;&#41;&#41; &#123;
final AnimControl animControl2 = findAnimControl&#40;s&#41;;
if &#40;animControl2 != null&#41; &#123;
return animControl2;
&#125;
&#125;
&#125;
&nbsp;
return null;
&#125;
&nbsp;
public static void main&#40;final String&#91;&#93; args&#41; &#123;
new TestOgreMaxImport&#40;&#41;.start&#40;&#41;;
&#125;
&#125;</pre>
<p>
After starting the class, you can see a nice smooth walk animation (if it&#039;s not smooth, you need to adjust your track frames):
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_7.png">
</p>
<p>
As you can see, the LOD is working:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_8.png">
</p>
</div>
<!-- EDIT13 SECTION "Export and Import" [11068-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:external:3dsmax?do=export_xhtmlbody">view online version</a></em></p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

@ -61,21 +61,21 @@ To export an animated model in Blender make sure the following conditions are me
<ol>
<li><div> The animation has to be a <strong>bone animation</strong></div>
</li>
<li><div> Apply Location, Rotation and Scate to the mesh on Blender: On 3D View editor on Blender, select the mesh in Object Mode and go to the 3D View Editor’s header → Object Menu → Apply → Location / Rotation / Scale.</div>
<li><div> Apply Location, Rotation and Scale to the mesh on Blender: On 3D View editor on Blender, select the mesh in Object Mode and go to the 3D View Editor???s header ??? Object Menu ??? Apply ??? Location / Rotation / Scale.</div>
</li>
<li><div> Apply Location, Rotation and Scate to the armature on Blender: On 3D View editor on Blender, select the armature in Object Mode and go to the 3D View Editor’s header → Object Menu → Apply → Location / Rotation / Scale.</div>
<li><div> Apply Location, Rotation and Scale to the armature on Blender: On 3D View editor on Blender, select the armature in Object Mode and go to the 3D View Editor???s header ??? Object Menu ??? Apply ??? Location / Rotation / Scale.</div>
</li>
<li><div> Set the meshs origin point in the bottom of the mesh (see the images below).</div>
<li><div> Set the mesh???s origin point in the bottom of the mesh (see the images below).</div>
</li>
<li><div> Set the armatures origin point in the bottom of the armature (see the images below).</div>
<li><div> Set the armature???s origin point in the bottom of the armature (see the images below).</div>
</li>
<li><div> Armature’s origin point and mesh’s origin point must be in the same location(see the images below).</div>
<li><div> Armature???s origin point and mesh???s origin point must be in the same location(see the images below).</div>
</li>
<li><div> Use a root bone located in the armatures origin. This root bone must be in vertical position (see the images below) and it is the root bone of the armature. If you rotate the root bone, the the entire armature might be rotate when you import the model into jMonkey (I’m just mentioning the result, I don’t know where is the problem (jmonkey importer or blender’s ogre exporter plugin)).</div>
<li><div> Use a root bone located in the armature???s origin. This root bone must be in vertical position (see the images below) and it is the root bone of the armature. If you rotate the root bone, the the entire armature might be rotate when you import the model into jMonkey (I???m just mentioning the result, I don???t know where is the problem (jMonkey importer or blender???s ogre exporter plugin)).</div>
</li>
<li><div> Uncheck “Bone Envelopes” checkbox on the Armature modifier for the mesh (see the images below).</div>
<li><div> Uncheck ???Bone Envelopes??? checkbox on the Armature modifier for the mesh (see the images below).</div>
</li>
<li><div> Uncheck “Envelopes” checkbox on the armature (see the images below).</div>
<li><div> Uncheck ???Envelopes??? checkbox on the armature (see the images below).</div>
</li>
</ol>
@ -417,7 +417,7 @@ Select the texture of the cube and select save environment map.
That is it for Blender. Open the saved image in some image editor (I use the Gimp from <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.gimp.org"><param name="text" value="<html><u>http://www.gimp.org</u></html>"><param name="textColor" value="blue"></object> here).
<p><div>The <acronym title="Software Development Kit">SDK</acronym> also contains an image editor, right-click the image and select &quot;edit image&quot; to open it.
</div></p>
You will notice that Blender has taken the 6 sides of the cube and pasted together into one image (3x2). So now we need to cut it up again into 6 separate images. In gimp I usually set the guides to where I want to cut and then go into Filters→Web→Slice and let gimp cut it up for me.
You will notice that Blender has taken the 6 sides of the cube and pasted together into one image (3x2). So now we need to cut it up again into 6 separate images. In gimp I usually set the guides to where I want to cut and then go into Filters???Web???Slice and let gimp cut it up for me.
</p>
<p>

@ -9,36 +9,36 @@
</div>
<!-- EDIT2 SECTION "I want to create and configure a jME3 Application" [42-103] -->
<h3><a>How do I start with a preconfigured game?</a></h3>
<h3><a>How do I start writing a preconfigured jME game?</a></h3>
<div>
<p>
Extend com.jme3.app.SimpleApplication.
Write a Java class that extends <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/app/SimpleApplication.java"><param name="text" value="<html><u>com.jme3.app.SimpleApplication</u></html>"><param name="textColor" value="blue"></object>.
<br/>
<strong>Learn more:</strong> <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_simpleapplication.html">Hello SimpleApplication</a>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/app/SimpleApplication.java"><param name="text" value="<html><u>com.jme3.app.SimpleApplication</u></html>"><param name="textColor" value="blue"></object>.
</p>
</div>
<!-- EDIT3 SECTION "How do I start with a preconfigured game?" [104-404] -->
<!-- EDIT3 SECTION "How do I start writing a preconfigured jME game?" [104-551] -->
<h3><a>How do I change the background color?</a></h3>
<div>
<pre>viewPort.setBackgroundColor&#40;ColorRGBA.Blue&#41;;</pre>
</div>
<!-- EDIT4 SECTION "How do I change the background color?" [405-515] -->
<!-- EDIT4 SECTION "How do I change the background color?" [552-662] -->
<h3><a>Can I customize the SimpleApplication class?</a></h3>
<div>
<p>
Yes! Actually, you MUST customize it! For your own games, you always create a custom base class that extends <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/app/SimpleApplication.java"><param name="text" value="<html><u>com.jme3.app.SimpleApplication</u></html>"><param name="textColor" value="blue"></object> class. From now on it&#039;s no longer a &quot;simple application&quot; it&#039;s now your game. Configure your <a href="/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html">application settings</a>, implement methods, and customize away!
Yes! Actually, you MUST customize it! For your own games, you always create a custom base class that extends <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/app/SimpleApplication.java"><param name="text" value="<html><u>com.jme3.app.SimpleApplication</u></html>"><param name="textColor" value="blue"></object> class. From now on it&#039;s no longer a &quot;simple application&quot; ??? it&#039;s now your game. Configure your <a href="/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html">application settings</a>, implement methods, and customize away!
<br/>
<strong>Learn more:</strong> <a href="/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html">SimpleApplication</a>, <a href="/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html">AppSettings</a>.
</p>
</div>
<!-- EDIT5 SECTION "Can I customize the SimpleApplication class?" [516-1112] -->
<!-- EDIT5 SECTION "Can I customize the SimpleApplication class?" [663-1259] -->
<h3><a>How can I switch between screens or states?</a></h3>
<div>
@ -50,7 +50,7 @@ You should break app your application logic into components by spreading it out
</p>
</div>
<!-- EDIT6 SECTION "How can I switch between screens or states?" [1113-1657] -->
<!-- EDIT6 SECTION "How can I switch between screens or states?" [1260-1804] -->
<h3><a>How do I pause/unpause a game?</a></h3>
<div>
@ -62,7 +62,7 @@ You split up your application into several AppStates and implement the setEnable
</p>
</div>
<!-- EDIT7 SECTION "How do I pause/unpause a game?" [1658-2263] -->
<!-- EDIT7 SECTION "How do I pause/unpause a game?" [1805-2410] -->
<h3><a>How do I disable logger output to the console?</a></h3>
<div>
@ -86,7 +86,7 @@ For the release, switch the severity level of the default logger to print only S
</p>
</div>
<!-- EDIT8 SECTION "How do I disable logger output to the console?" [2264-2750] -->
<!-- EDIT8 SECTION "How do I disable logger output to the console?" [2411-2897] -->
<h3><a>Why does the executable crash with &quot;Cannot locate resource&quot;?</a></h3>
<div>
@ -98,7 +98,7 @@ Make sure to only load() models converted to .j3o binary format, not the origina
</p>
</div>
<!-- EDIT9 SECTION "Why does the executable crash with Cannot locate resource?" [2751-3081] -->
<!-- EDIT9 SECTION "Why does the executable crash with Cannot locate resource?" [2898-3228] -->
<h3><a>What is java.lang.LinkageError: Version mismatch?</a></h3>
<div>
@ -110,12 +110,12 @@ To fix this, search for .dll (Windows), .jnilib (Mac), and .so (Linux) files for
</p>
</div>
<!-- EDIT10 SECTION "What is java.lang.LinkageError: Version mismatch?" [3082-4465] -->
<!-- EDIT10 SECTION "What is java.lang.LinkageError: Version mismatch?" [3229-4612] -->
<h2><a>I want to load my scene</a></h2>
<div>
</div>
<!-- EDIT11 SECTION "I want to load my scene" [4466-4501] -->
<!-- EDIT11 SECTION "I want to load my scene" [4613-4648] -->
<h3><a>How do I make objects appear / disappear in the 3D scene?</a></h3>
<div>
@ -132,7 +132,7 @@ To make a spatial appear in the scene, you attach it to the rootNode (or to a no
</p>
</div>
<!-- EDIT12 SECTION "How do I make objects appear / disappear in the 3D scene?" [4502-5278] -->
<!-- EDIT12 SECTION "How do I make objects appear / disappear in the 3D scene?" [4649-5425] -->
<h3><a>Why do I get AssetNotFoundException when loading X ?</a></h3>
<div>
@ -158,7 +158,7 @@ this.assetManager.registerLocator&#40;&quot;town.zip&quot;, ZipLocator.class&#41
</p>
</div>
<!-- EDIT13 SECTION "Why do I get AssetNotFoundException when loading X ?" [5279-6161] -->
<!-- EDIT13 SECTION "Why do I get AssetNotFoundException when loading X ?" [5426-6308] -->
<h3><a>How do I Create 3-D models, textures, sounds?</a></h3>
<div>
@ -174,7 +174,7 @@ You create sounds in an audio editor, for example, Audacity, and export them as
</p>
</div>
<!-- EDIT14 SECTION "How do I Create 3-D models, textures, sounds?" [6162-7159] -->
<!-- EDIT14 SECTION "How do I Create 3-D models, textures, sounds?" [6309-7306] -->
<h3><a>How do I load a 3-D model into the scene?</a></h3>
<div>
@ -194,7 +194,7 @@ Spatial ninja = assetManager.loadModel&#40;&quot;Models/Ninja/Ninja.j3o&quot;&#4
</p>
</div>
<!-- EDIT15 SECTION "How do I load a 3-D model into the scene?" [7160-8365] -->
<!-- EDIT15 SECTION "How do I load a 3-D model into the scene?" [7307-8512] -->
<h3><a>How do initialize the scene?</a></h3>
<div>
@ -205,12 +205,12 @@ Use the simpleInitApp() method in SimpleApplication (or initApp() in Application
</p>
</div>
<!-- EDIT16 SECTION "How do initialize the scene?" [8366-8698] -->
<!-- EDIT16 SECTION "How do initialize the scene?" [8513-8845] -->
<h2><a>I want to transform objects in the scene</a></h2>
<div>
</div>
<!-- EDIT17 SECTION "I want to transform objects in the scene" [8699-8751] -->
<!-- EDIT17 SECTION "I want to transform objects in the scene" [8846-8898] -->
<h3><a>How do I move or turn or resize a spatial?</a></h3>
<div>
@ -226,7 +226,7 @@ To move or turn or resize a spatial you use transformations. You can concatenate
</p>
</div>
<!-- EDIT18 SECTION "How do I move or turn or resize a spatial?" [8752-9333] -->
<!-- EDIT18 SECTION "How do I move or turn or resize a spatial?" [8899-9480] -->
<h3><a>How do I make a spatial move by itself?</a></h3>
<div>
@ -239,7 +239,7 @@ Change the geometry&#039;s translation (position) live in the update loop using
</p>
</div>
<!-- EDIT19 SECTION "How do I make a spatial move by itself?" [9334-10197] -->
<!-- EDIT19 SECTION "How do I make a spatial move by itself?" [9481-10344] -->
<h3><a>How do I access a named sub-mesh in Model?</a></h3>
<div>
<pre>Geometry result = spatial.getName&#40;&#41;.startsWith&#40;name&#41;;</pre>
@ -250,7 +250,7 @@ Change the geometry&#039;s translation (position) live in the update loop using
</p>
</div>
<!-- EDIT20 SECTION "How do I access a named sub-mesh in Model?" [10198-10365] -->
<!-- EDIT20 SECTION "How do I access a named sub-mesh in Model?" [10345-10512] -->
<h3><a>How do I make procedural or custom shapes?</a></h3>
<div>
@ -261,12 +261,12 @@ You can programmatically create com.jme3.scene.Mesh&#039;es.
</p>
</div>
<!-- EDIT21 SECTION "How do I make procedural or custom shapes?" [10366-10526] -->
<!-- EDIT21 SECTION "How do I make procedural or custom shapes?" [10513-10673] -->
<h2><a>I want to change the surface of objects in the scene</a></h2>
<div>
</div>
<!-- EDIT22 SECTION "I want to change the surface of objects in the scene" [10527-10591] -->
<!-- EDIT22 SECTION "I want to change the surface of objects in the scene" [10674-10738] -->
<h3><a>Why is my UV wrapping / texture appearance all wrong?</a></h3>
<div>
@ -284,7 +284,7 @@ You can set the boolean value in the constructor of TextureKey to flipped or not
<pre> material.setTexture&#40;&quot;ColorMap&quot;, this.assetManager.loadTexture&#40;new TextureKey&#40;&quot;myTexture.jpg&quot;, false&#41;&#41;&#41;;</pre>
</div>
<!-- EDIT23 SECTION "Why is my UV wrapping / texture appearance all wrong?" [10592-11141] -->
<!-- EDIT23 SECTION "Why is my UV wrapping / texture appearance all wrong?" [10739-11288] -->
<h3><a>How do I scale, mirror, or wrap a texture?</a></h3>
<div>
@ -302,7 +302,7 @@ You can choose among various <code>com.jme3.texture.Texture.WrapMode</code>s for
<pre>material.getTextureParam&#40;&quot;DiffuseMap&quot;&#41;.getTextureValue&#40;&#41;.setWrap&#40;WrapMode.Repeat&#41;;</pre>
</div>
<!-- EDIT24 SECTION "How do I scale, mirror, or wrap a texture?" [11142-11683] -->
<!-- EDIT24 SECTION "How do I scale, mirror, or wrap a texture?" [11289-11830] -->
<h3><a>How do I change color or shininess of an material?</a></h3>
<div>
@ -315,7 +315,7 @@ Use the AssetManager to load Materials, and change material settings.
</p>
</div>
<!-- EDIT25 SECTION "How do I change color or shininess of an material?" [11684-12271] -->
<!-- EDIT25 SECTION "How do I change color or shininess of an material?" [11831-12418] -->
<h3><a>How do I make a surface wood, stone, metal, etc?</a></h3>
<div>
@ -328,7 +328,7 @@ Create Textures as image files. Use the AssetManager to load a Material and use
</p>
</div>
<!-- EDIT26 SECTION "How do I make a surface wood, stone, metal, etc?" [12272-13045] -->
<!-- EDIT26 SECTION "How do I make a surface wood, stone, metal, etc?" [12419-13192] -->
<h3><a>Why are materials too bright, too dark, or flickering?</a></h3>
<div>
@ -337,7 +337,7 @@ If you use a lit material (based on Lighting.j3md) then you must attach a light
</p>
</div>
<!-- EDIT27 SECTION "Why are materials too bright, too dark, or flickering?" [13046-13859] -->
<!-- EDIT27 SECTION "Why are materials too bright, too dark, or flickering?" [13193-14006] -->
<h3><a>How do I make geometries cast a shadow?</a></h3>
<div>
@ -350,7 +350,7 @@ Use com.jme3.shadow.BasicShadowRenderer together with com.jme3.light.Directional
</p>
</div>
<!-- EDIT28 SECTION "How do I make geometries cast a shadow?" [13860-14368] -->
<!-- EDIT28 SECTION "How do I make geometries cast a shadow?" [14007-14515] -->
<h3><a>How do I make materials transparent?</a></h3>
<div>
@ -366,7 +366,7 @@ Assign a texture with an alpha channel to a Material and set the Material&#039;s
</p>
</div>
<!-- EDIT29 SECTION "How do I make materials transparent?" [14369-14805] -->
<!-- EDIT29 SECTION "How do I make materials transparent?" [14516-14952] -->
<h3><a>How do I force or disable culling?</a></h3>
<div>
@ -390,7 +390,7 @@ You can also deactivate the <code>com.jme3.scene.Spatial.CullHint</code> of a wh
</p>
</div>
<!-- EDIT30 SECTION "How do I force or disable culling?" [14806-15354] -->
<!-- EDIT30 SECTION "How do I force or disable culling?" [14953-15501] -->
<h3><a>Can I draw only an outline of the scene?</a></h3>
<div>
@ -406,12 +406,12 @@ Add a renders state to the material&#039;s and activate <code>Wireframe</code>.
</p>
</div>
<!-- EDIT31 SECTION "Can I draw only an outline of the scene?" [15355-15591] -->
<!-- EDIT31 SECTION "Can I draw only an outline of the scene?" [15502-15738] -->
<h2><a>I want to control the camera</a></h2>
<div>
</div>
<!-- EDIT32 SECTION "I want to control the camera" [15592-15632] -->
<!-- EDIT32 SECTION "I want to control the camera" [15739-15779] -->
<h3><a>How do I switch between third-person and first-person view ?</a></h3>
<div>
@ -433,18 +433,18 @@ chaseCam = new ChaseCamera&#40;cam, spatial, inputManager&#41;;</pre>
</ul>
</div>
<!-- EDIT33 SECTION "How do I switch between third-person and first-person view ?" [15633-16689] -->
<!-- EDIT33 SECTION "How do I switch between third-person and first-person view ?" [15780-16836] -->
<h3><a>How do I increase camera speed?</a></h3>
<div>
<pre>flyCam.setMoveSpeed&#40;50f&#41;;</pre>
</div>
<!-- EDIT34 SECTION "How do I increase camera speed?" [16690-16776] -->
<!-- EDIT34 SECTION "How do I increase camera speed?" [16837-16923] -->
<h2><a>Actions, Interactions, Physics</a></h2>
<div>
</div>
<!-- EDIT35 SECTION "Actions, Interactions, Physics" [16777-16819] -->
<!-- EDIT35 SECTION "Actions, Interactions, Physics" [16924-16966] -->
<h3><a>How do I implement game logic / game mechanics?</a></h3>
<div>
@ -455,7 +455,7 @@ Use Controls to define the behaviour of types of Spatials. Use Application State
</p>
</div>
<!-- EDIT36 SECTION "How do I implement game logic / game mechanics?" [16820-17381] -->
<!-- EDIT36 SECTION "How do I implement game logic / game mechanics?" [16967-17528] -->
<h3><a>How do I let players interact via keyboard?</a></h3>
<div>
@ -466,7 +466,7 @@ Use com.jme3.input.KeyInput and a Input Listener.
</p>
</div>
<!-- EDIT37 SECTION "How do I let players interact via keyboard?" [17382-17589] -->
<!-- EDIT37 SECTION "How do I let players interact via keyboard?" [17529-17736] -->
<h3><a>How do I let players interact by clicking?</a></h3>
<div>
@ -479,7 +479,7 @@ Players typically click the mouse to pick up objects, to open doors, to shoot a
</p>
</div>
<!-- EDIT38 SECTION "How do I let players interact by clicking?" [17590-18414] -->
<!-- EDIT38 SECTION "How do I let players interact by clicking?" [17737-18561] -->
<h3><a>How do I animate characters?</a></h3>
<div>
@ -492,7 +492,7 @@ Create an animated OgreMesh model with bones in a 3-D mesh editor (e.g. Blender)
</p>
</div>
<!-- EDIT39 SECTION "How do I animate characters?" [18415-18886] -->
<!-- EDIT39 SECTION "How do I animate characters?" [18562-19033] -->
<h3><a>How do I keep players from falling through walls and floors?</a></h3>
<div>
@ -503,7 +503,7 @@ Use collision detection. The most common solution is to use jme&#039;s physics i
</p>
</div>
<!-- EDIT40 SECTION "How do I keep players from falling through walls and floors?" [18887-19249] -->
<!-- EDIT40 SECTION "How do I keep players from falling through walls and floors?" [19034-19396] -->
<h3><a>How do I make balls/wheels/etc bounce and roll?</a></h3>
<div>
@ -516,17 +516,17 @@ Add physics controls to Spatials and give them spherical or cylindrical bounding
</p>
</div>
<!-- EDIT41 SECTION "How do I make balls/wheels/etc bounce and roll?" [19250-19847] -->
<!-- EDIT41 SECTION "How do I make balls/wheels/etc bounce and roll?" [19397-19994] -->
<h3><a>How do I debug weird Physics behaviour?</a></h3>
<div>
<p>
Maybe your collision shapes overlap or they are not where you think they are. Make the collision shapes visible by adding the following line after the bulletAppState initialization:
Maybe your collision shapes overlap ??? or they are not where you think they are. Make the collision shapes visible by adding the following line after the bulletAppState initialization:
</p>
<pre>bulletAppState.getPhysicsSpace&#40;&#41;.enableDebug&#40;assetManager&#41;;</pre>
</div>
<!-- EDIT42 SECTION "How do I debug weird Physics behaviour?" [19848-20161] -->
<!-- EDIT42 SECTION "How do I debug weird Physics behaviour?" [19995-20308] -->
<h3><a>How do I make a walking character?</a></h3>
<div>
@ -539,7 +539,7 @@ Code samples: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplay
</p>
</div>
<!-- EDIT43 SECTION "How do I make a walking character?" [20162-20720] -->
<!-- EDIT43 SECTION "How do I make a walking character?" [20309-20867] -->
<h3><a>How do I steer vehicles?</a></h3>
<div>
@ -552,7 +552,7 @@ Code samples: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplay
</p>
</div>
<!-- EDIT44 SECTION "How do I steer vehicles?" [20721-21088] -->
<!-- EDIT44 SECTION "How do I steer vehicles?" [20868-21235] -->
<h3><a>Can objects swing like a pendulums, chains, ropebridges?</a></h3>
<div>
@ -564,12 +564,12 @@ Use a PhysicsControl&#039;s hinges and joints.
</p>
</div>
<!-- EDIT45 SECTION "Can objects swing like a pendulums, chains, ropebridges?" [21089-21489] -->
<!-- EDIT45 SECTION "Can objects swing like a pendulums, chains, ropebridges?" [21236-21636] -->
<h2><a>Default GUI Display</a></h2>
<div>
</div>
<!-- EDIT46 SECTION "Default GUI Display" [21490-21521] -->
<!-- EDIT46 SECTION "Default GUI Display" [21637-21668] -->
<h3><a>What are these FPS/Objects/Vertices/Triangles statistics?</a></h3>
<div>
@ -581,7 +581,7 @@ At the bottom left of every default SimpleGame, you see the <a href="/com/jme3/g
</p>
</div>
<!-- EDIT47 SECTION "What are these FPS/Objects/Vertices/Triangles statistics?" [21522-22049] -->
<!-- EDIT47 SECTION "What are these FPS/Objects/Vertices/Triangles statistics?" [21669-22196] -->
<h3><a>How do I get rid of the FPS/Objects statistics?</a></h3>
<div>
@ -600,7 +600,7 @@ setDisplayStatView(false); // to hide the statistics </pre>
</p>
</div>
<!-- EDIT48 SECTION "How do I get rid of the FPS/Objects statistics?" [22050-22314] -->
<!-- EDIT48 SECTION "How do I get rid of the FPS/Objects statistics?" [22197-22461] -->
<h3><a>How do I display score, health, mini-maps, status icons?</a></h3>
<div>
@ -613,7 +613,7 @@ Attach text and pictures to the orthogonal <code>guiNode</code> to create a head
</p>
</div>
<!-- EDIT49 SECTION "How do I display score, health, mini-maps, status icons?" [22315-22907] -->
<!-- EDIT49 SECTION "How do I display score, health, mini-maps, status icons?" [22462-23054] -->
<h3><a>How do I display buttons and UI controls?</a></h3>
<div>
@ -626,7 +626,7 @@ Sample Code: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
</p>
</div>
<!-- EDIT50 SECTION "How do I display buttons and UI controls?" [22908-23352] -->
<!-- EDIT50 SECTION "How do I display buttons and UI controls?" [23055-23499] -->
<h3><a>How do i display a loading screen?</a></h3>
<div>
@ -637,12 +637,12 @@ Instead of having a frozen frame while your games loads, you can have a loading
</p>
</div>
<!-- EDIT51 SECTION "How do i display a loading screen?" [23353-23569] -->
<!-- EDIT51 SECTION "How do i display a loading screen?" [23500-23716] -->
<h2><a>Nifty GUI</a></h2>
<div>
</div>
<!-- EDIT52 SECTION "Nifty GUI" [23570-23591] -->
<!-- EDIT52 SECTION "Nifty GUI" [23717-23738] -->
<h3><a>I get NoSuchElementException when adding controls (buttons etc)!</a></h3>
<div>
@ -653,7 +653,7 @@ Verify that you include a controls definition file link in your <acronym title="
<pre><span>&lt;useControls filename=&quot;nifty-default-controls.xml&quot;/&gt;</span></pre>
</div>
<!-- EDIT53 SECTION "I get NoSuchElementException when adding controls (buttons etc)!" [23592-23827] -->
<!-- EDIT53 SECTION "I get NoSuchElementException when adding controls (buttons etc)!" [23739-23974] -->
<h3><a>Where can I find example code of Nifty GUI&#039;s XML and Java classes?</a></h3>
<div>
@ -662,7 +662,7 @@ Verify that you include a controls definition file link in your <acronym title="
</p>
</div>
<!-- EDIT54 SECTION "Where can I find example code of Nifty GUI's XML and Java classes?" [23828-23990] -->
<!-- EDIT54 SECTION "Where can I find example code of Nifty GUI's XML and Java classes?" [23975-24137] -->
<h3><a>Is there Java Doc for Nifty GUI?</a></h3>
<div>
@ -671,12 +671,12 @@ Verify that you include a controls definition file link in your <acronym title="
</p>
</div>
<!-- EDIT55 SECTION "Is there Java Doc for Nifty GUI?" [23991-24116] -->
<!-- EDIT55 SECTION "Is there Java Doc for Nifty GUI?" [24138-24263] -->
<h2><a>I want to create an environment with sounds, effects, and landscapes</a></h2>
<div>
</div>
<!-- EDIT56 SECTION "I want to create an environment with sounds, effects, and landscapes" [24117-24197] -->
<!-- EDIT56 SECTION "I want to create an environment with sounds, effects, and landscapes" [24264-24344] -->
<h3><a>How do I play sounds and noises?</a></h3>
<div>
@ -689,7 +689,7 @@ Use AudioRenderer, Listener, and AudioNode from com.jme3.audio.*.
</p>
</div>
<!-- EDIT57 SECTION "How do I play sounds and noises?" [24198-24501] -->
<!-- EDIT57 SECTION "How do I play sounds and noises?" [24345-24648] -->
<h3><a>How do I make fire, smoke, explosions, swarms, magic spells?</a></h3>
<div>
@ -702,7 +702,7 @@ For swarm like effects you use particle emitters.
</p>
</div>
<!-- EDIT58 SECTION "How do I make fire, smoke, explosions, swarms, magic spells?" [24502-25157] -->
<!-- EDIT58 SECTION "How do I make fire, smoke, explosions, swarms, magic spells?" [24649-25304] -->
<h3><a>How do I make water, waves, reflections?</a></h3>
<div>
@ -715,8 +715,8 @@ Use a special post-processor renderer from com.jme3.water.*.
</p>
</div>
<!-- EDIT59 SECTION "How do I make water, waves, reflections?" [25158-25918] -->
<h3><a>How do I make fog, bloom, blur, light scrattering?</a></h3>
<!-- EDIT59 SECTION "How do I make water, waves, reflections?" [25305-26065] -->
<h3><a>How do I make fog, bloom, blur, light scattering?</a></h3>
<div>
<p>
@ -726,7 +726,7 @@ Use special post-processor renderers from com.jme3.post.*.
</p>
</div>
<!-- EDIT60 SECTION "How do I make fog, bloom, blur, light scrattering?" [25919-26094] -->
<!-- EDIT60 SECTION "How do I make fog, bloom, blur, light scattering?" [26066-26240] -->
<h3><a>How do I generate a terrain?</a></h3>
<div>
@ -739,7 +739,7 @@ Use com.jme3.terrain.*. The JMonkeyEngine also provides you with a Terrain Edito
</p>
</div>
<!-- EDIT61 SECTION "How do I generate a terrain?" [26095-26478] -->
<!-- EDIT61 SECTION "How do I generate a terrain?" [26241-26624] -->
<h3><a>How do I make a sky?</a></h3>
<div>
@ -757,12 +757,12 @@ skyGeo.setQueueBucket&#40;Bucket.Sky&#41; </pre>
</p>
</div>
<!-- EDIT62 SECTION "How do I make a sky?" [26479-26858] -->
<!-- EDIT62 SECTION "How do I make a sky?" [26625-27004] -->
<h2><a>I want to access to back-end properties</a></h2>
<div>
</div>
<!-- EDIT63 SECTION "I want to access to back-end properties" [26859-26910] -->
<!-- EDIT63 SECTION "I want to access to back-end properties" [27005-27056] -->
<h3><a>How do I read out graphic card capabilities?</a></h3>
<div>
@ -774,7 +774,7 @@ If your game is heavily using features that older cards do not support, you can
Logger.getLogger&#40;HelloJME3.class.getName&#40;&#41;&#41;.log&#40;Level.INFO, &quot;Capabilities: {0}&quot;, caps.toString&#40;&#41;&#41;;</pre>
</div>
<!-- EDIT64 SECTION "How do I read out graphic card capabilities?" [26911-27346] -->
<!-- EDIT64 SECTION "How do I read out graphic card capabilities?" [27057-27492] -->
<h3><a>How do I Run jMonkeyEngine 3 with OpenGL1?</a></h3>
<div>
@ -791,7 +791,7 @@ For the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> it
</p>
</div>
<!-- EDIT65 SECTION "How do I Run jMonkeyEngine 3 with OpenGL1?" [27347-27626] -->
<!-- EDIT65 SECTION "How do I Run jMonkeyEngine 3 with OpenGL1?" [27493-27772] -->
<h3><a>How do I optimize the heck out of the Scene Graph?</a></h3>
<div>
@ -808,7 +808,7 @@ Batching means that all Geometries with the same Material are combined into one
</p>
</div>
<!-- EDIT66 SECTION "How do I optimize the heck out of the Scene Graph?" [27627-28096] -->
<!-- EDIT66 SECTION "How do I optimize the heck out of the Scene Graph?" [27773-28242] -->
<h3><a>How do I prevent users from unzipping my JAR?</a></h3>
<div>
@ -818,12 +818,12 @@ Add an <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><pa
</p>
</div>
<!-- EDIT67 SECTION "How do I prevent users from unzipping my JAR?" [28097-28346] -->
<!-- EDIT67 SECTION "How do I prevent users from unzipping my JAR?" [28243-28492] -->
<h2><a>I want to do maths</a></h2>
<div>
</div>
<!-- EDIT68 SECTION "I want to do maths" [28347-28377] -->
<!-- EDIT68 SECTION "I want to do maths" [28493-28523] -->
<h3><a>What does addLocal() / multLocal() etc mean?</a></h3>
<div>
@ -876,7 +876,7 @@ Many maths functions (mult(), add(), subtract(), etc) come as local and a non-lo
</ol>
</div>
<!-- EDIT69 SECTION "What does addLocal() / multLocal() etc mean?" [28378-29739] -->
<!-- EDIT69 SECTION "What does addLocal() / multLocal() etc mean?" [28524-29885] -->
<h3><a>What is the difference between World and Local coordinates?</a></h3>
<div>
@ -886,7 +886,7 @@ World coordinates of a Spatial are its absolute coordinates in the 3D scene (thi
</p>
</div>
<!-- EDIT70 SECTION "What is the difference between World and Local coordinates?" [29740-30049] -->
<!-- EDIT70 SECTION "What is the difference between World and Local coordinates?" [29886-30195] -->
<h3><a>How do I convert Degrees to Radians?</a></h3>
<div>
@ -900,5 +900,5 @@ Multiply degree value by FastMath.DEG_TO_RAD to convert it to radians.
</span></div>
</div>
<!-- EDIT71 SECTION "How do I convert Degrees to Radians?" [30050-] -->
<!-- EDIT71 SECTION "How do I convert Degrees to Radians?" [30196-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:faq?do=export_xhtmlbody">view online version</a></em></p>

@ -131,7 +131,7 @@ Set VSync to false to deactivate vertical syncing (faster, but possible page tea
</tr>
<tr>
<td>setIcons(new BufferedImage[]{ <br/>
ImageIO.read(new File(&quot;&quot;)), });</td><td>This specifies the little application icon in the titlebar of the application (unused in MacOS?). You should specify the icon in various sizes (256,128,32,16) to look good on various operating systems. Note: This is not the application icon on the desktop.</td><td>null</td>
ImageIO.read(new File(&quot;&quot;)), ???});</td><td>This specifies the little application icon in the titlebar of the application (unused in MacOS?). You should specify the icon in various sizes (256,128,32,16) to look good on various operating systems. Note: This is not the application icon on the desktop.</td><td>null</td>
</tr>
<tr>
<td>setSettingsDialogImage(&quot;Interface/mysplashscreen.png&quot;)</td><td>A custom splashscreen image in the <code>assets/Interface</code> directory which is displayed when the settings dialog is shown.</td><td>&quot;/com/jme3/app/Monkey.png&quot;</td>

@ -126,7 +126,7 @@ E.g. if the game is a &quot;Jump&#039;n&#039;Run&quot;, jumping and running must
</li>
</ul>
</li>
<li><div> Gamma Release, Delta Release = Release Candidates</div>
<li><div> Gamma Release, Delta Release??? = Release Candidates</div>
<ul>
<li><div> Think you&#039;re done? Make test runs incl. packaging and distribution. (Order form? download?)</div>
</li>
@ -158,7 +158,7 @@ Whether you work in a team or alone, keeping a version controlled repository of
<li><div> The jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> supports Subversion, Mercurial, and <acronym title="Concurrent Versions System">CVS</acronym>. <br/>
If you don&#039;t know which to choose, Subversion is a good choice for starters.</div>
</li>
<li><div> Set up your own local server, or get free remote hosting space from various open-source dev portals like <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/"><param name="text" value="<html><u>Sourceforge</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://github.com/"><param name="text" value="<html><u>Github</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://bitbucket.org/"><param name="text" value="<html><u>bitbucket</u></html>"><param name="textColor" value="blue"></object> (supports private projects), <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://home.java.net/create-project"><param name="text" value="<html><u>Java.net</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://code.google.com"><param name="text" value="<html><u>Google Code</u></html>"><param name="textColor" value="blue"></object></div>
<li><div> Set up your own local server, or get free remote hosting space from various open-source dev portals like <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/"><param name="text" value="<html><u>Sourceforge</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://github.com/"><param name="text" value="<html><u>Github</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://bitbucket.org/"><param name="text" value="<html><u>bitbucket</u></html>"><param name="textColor" value="blue"></object> (supports private projects), <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://home.java.net/create-project"><param name="text" value="<html><u>Java.net</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://code.google.com"><param name="text" value="<html><u>Google Code</u></html>"><param name="textColor" value="blue"></object>???</div>
</li>
</ul>
@ -203,7 +203,7 @@ Learn details about the <a href="/com/jme3/gde/core/docs/jme3/intermediate/multi
<p>
<p><div>Many game developers dream of creating their very own &quot;MMORPG with full-physics, AI, post-rendering effects, multi-player networking, procedurally generated maps, and customizable characters&quot;. So why aren&#039;t there tons of MMORPGs out there? <br/>
Even for large experienced game producers, the creation of such a complex game is time-intensive and failure-prone. How familiar are you with multi-threading, persistance, optimization, client-server synchonization, …? Unless your answer is &quot;very!&quot;, then start with a single-player desktop game, and work your way up just as the pros did when they started.
Even for large experienced game producers, the creation of such a complex game is time-intensive and failure-prone. How familiar are you with multi-threading, persistence, optimization, client-server synchonization, ???? Unless your answer is &quot;very!&quot;, then start with a single-player desktop game, and work your way up ??? just as the pros did when they started.
</div></p>
</p>
@ -218,16 +218,22 @@ Every jME3 game is centered around one main class that (directly or indirectly)
</p>
<p>
<p><div>Note that although the &quot;SimpleApplication&quot; name might be misleading, all jME3 applications, including very large projects, are based on this class. The name only implies that this class is a simple application already. You make it &quot;non-simple&quot; by extending it! ;)
<p><div>Note that although the &quot;SimpleApplication&quot; name might be misleading, all jME3 applications, including very large projects, are based on this class. The name only implies that this class itself is a simple application already. You make it &quot;non-simple&quot; by extending it!
</div></p>
</p>
<p>
For your future game releases, you will want to rely on your own base framework: Your framework extends SimpleApplication, and includes your custom methods for loading, saving, and arranging your scenes, your custom navigation, your inputs for pausing and switching your custom screens, your custom user interface (options screen, HUD, etc), your custom NPC factory, your custom physics properties, your custom networking synchronization, etc. Reusing (extending) your own base framework saves you time. When you update your generic base classes, all your games that extend them benefit from the improvements. Also it will give your games a common look and feel.
For your future game releases, you will want to rely on your own framework (based on jME): Your custom framework extends jME&#039;s SimpleApplication, and includes your custom methods for loading, saving, and arranging your scenes, your custom navigation methods, your inputs for pausing and switching your custom screens, your custom user interface (options screen, HUD, etc), your custom NPC factory, your custom physics properties, your custom networking synchronization, etc.
</p>
<p>
<p><div>Writing and reusing (extending) your own base framework saves you time. When you update your generic base classes, all your games that extend them benefit from improvements to the base (just as all jME-based games benefit of improvements to the jME framework). <br/>
Also, your own framework gives all your games a common look and feel.
</div></p>
</p>
</div>
<!-- EDIT9 SECTION "Extend SimpleApplication" [6292-7405] -->
<!-- EDIT9 SECTION "Extend SimpleApplication" [6292-7575] -->
<h3><a>Where to Start?</a></h3>
<div>
@ -238,9 +244,9 @@ You have a list of features that you want in game, but which one do you implemen
<ol>
<li><div> Make sure the game&#039;s high-level frame (screen switching, network sync, loading/saving) is sound and solid. </div>
</li>
<li><div> Start with implementing the most complex game feature first the one that imposes most constraints on the structure of your project (for example: multi-player networking, or physics.)</div>
<li><div> Start with implementing the most complex game feature first ??? the one that imposes most constraints on the structure of your project (for example: multi-player networking, or physics.)</div>
</li>
<li><div> Add only one larger feature at a time. If there are complex interactions (such as &quot;networking + physics&quot;), start with a small test case (&quot;one shared cube&quot;) and work your way up. Starting with a whole scene introduces too many extra soruces of error.</div>
<li><div> Add only one larger feature at a time. If there are complex interactions (such as &quot;networking + physics&quot;), start with a small test case (&quot;one shared cube&quot;) and work your way up. Starting with a whole scene introduces too many extra sources of error.</div>
</li>
<li><div> Implement low-complexity decorations (audio and visual effects) last.</div>
</li>
@ -255,31 +261,66 @@ You have a list of features that you want in game, but which one do you implemen
</p>
</div>
<!-- EDIT10 SECTION "Where to Start?" [7406-8773] -->
<!-- EDIT10 SECTION "Where to Start?" [7576-8943] -->
<h3><a>The Smart Way to Add Custom Methods and Fields</a></h3>
<div>
<p>
Game entities (<code>Nodes</code> and <code>Geometry</code>s) often carry custom fields and custom methods with them. For example, players and NPCs have fields such as <code>health, gold coins, inventory, equipment,</code> etc. We call these fields <strong>user data</strong>. Game entities also have methods that modify user data. Examples include <code>attack(), addGold(), getHealth(), pickUpItem(), dropItem(), useItem(), walk(),</code> etc.
<p><div><strong>Avoid the Anti-Pattern:</strong> Don&#039;t design complex role-based classes using Java inheritance, it will result in an unmaintainable mess. <br/>
Example: You start extending <code>Node</code> ???&gt; <code>MyMobileNode</code> ???&gt; <code>MyNPC</code>. Then you extend <code>MyFighterNPC</code> (defends, attacks) and <code>MyShopKeeperNPC</code> (trades) from <code>MyNPC</code>. What if you need an NPC that trades and defends itself, but doesn&#039;t attack? Do you extend MyShopKeeperNPC and copy and paste the defensive methods from MyFighterNPC? Or do you extend MyFighterNPC and override the attacking methods of its parent? Neither is a clean solution. <br/>
Wouldn&#039;t it be better if behaviours were a separate &quot;system&quot;, and attributes were separate &quot;components&quot; that you add to the &quot;entity&quot; that needs them?
</div></p>
</p>
<p>
You write Java classes named <code>Controls</code> to implement your Game Entities, and define an Entity&#039;s visuals, attributes, and behaviours. In jME, <code>Spatial</code>s (<code>Nodes</code> or <code>Geometry</code>s) are the visual representation of the game entity in the scene graph.
</p>
<ul>
<li><div> Game entities have <strong>attributes</strong> ??? All Entities are neutral <em>things</em>, only their attributes define what an entity actually <em>is</em> (a person or a brick). In jME, we call these class fields of Spatials &quot;user data&quot;. <br/>
Example: Players have <strong>class fields</strong> for <code>id, health, coins, inventory, equipment, profession</code>.</div>
</li>
<li><div> Game entities have <strong>behaviours</strong> ??? Behaviour systems communicate about the game state and modify attributes. In jME, these game mechanics are implemented in modular <code>update()</code> methods that all hook into the main update loop. <br/>
Example: Players have <strong>methods</strong> such as <code>walk(), addGold(), getHealth(), pickUpItem(), dropItem(), useItem(), attack()</code>.</div>
</li>
</ul>
<p>
<p><div> <strong>Follow the Best Practice:</strong> In general, use composition over inheritance and keep &quot;what an entity does&quot; (behaviour system) separate from &quot;what this entity is&quot; (attributes).
</p>
<ul>
<li><div> Use <code><a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">setUserData()</a></code> to add custom attributes to Spatials.</div>
</li>
<li><div> Use <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Controls</a> and <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a> to define custom behaviour systems.</div>
</li>
</ul>
<p>
<strong>Avoid the Anti-Pattern:</strong> You might be tempted to create character classes using Java inheritance: For example, <code>MyMobileNode extends Node</code> and then <code>MyNPC extends MyMobileNode</code>. Then you might create subclasses such as <code>MyFighterNPC extends MyNPC</code> and <code>MyShopKeeperNPC extends MyNPC</code>. But what if you need a group of MyShopKeeperNPCs that fight back? Do you write a MyFightingShopKeeperNPC class, and copy and paste fighting methods from MyFighterNPC? The inheritance approach will soon turn out to be an unmaintainable mess – this is not what you want.
</div></p>
</p>
<p>
<strong>Follow the Best Practice:</strong> You can add user data, accessors, and methods directly to each Spatial.
If your game is even more complex, you may want to learn about &quot;real&quot; Entity Systems, which form a quite different programming paradigm from object oriented coding but are scalable to very large proportions. Note however that this topic is very unintuitive to handle for an OOP programmer and you should really decide on a case basis if you really need this or not and gather some experiences before diving head first into a MMO project <img src="/wiki/lib/images/smileys/icon_smile.gif" class="middle" alt=":-)"/>
</p>
<ul>
<li><div> Use <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">&#039;&#039;setUserData()&#039;&#039;</a> to add custom fields with user data to Spatials.</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/"><param name="text" value="<html><u>http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/</u></html>"><param name="textColor" value="blue"></object> </div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.gamasutra.com/blogs/MeganFox/20101208/88590/Game_Engines_101_The_EntityComponent_Model.php"><param name="text" value="<html><u>http://www.gamasutra.com/blogs/MeganFox/20101208/88590/Game_Engines_101_The_EntityComponent_Model.php</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://gamedev.stackexchange.com/questions/28695/variants-of-entity-component-systems"><param name="text" value="<html><u>http://gamedev.stackexchange.com/questions/28695/variants-of-entity-component-systems</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://louisstowasser.com/post/19279778476/entity-component-systems-inheritance-vs-composition"><param name="text" value="<html><u>http://louisstowasser.com/post/19279778476/entity-component-systems-inheritance-vs-composition</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/"><param name="text" value="<html><u>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/</u></html>"><param name="textColor" value="blue"></object></div>
</li>
<li><div> Use <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Controls</a> to add custom methods (including getters and setters) to Spatials.</div>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://entity-systems.wikidot.com/"><param name="text" value="<html><u>http://entity-systems.wikidot.com/</u></html>"><param name="textColor" value="blue"></object></div>
</li>
</ul>
</div>
<!-- EDIT11 SECTION "The Smart Way to Add Custom Methods and Fields" [8774-10122] -->
<!-- EDIT11 SECTION "The Smart Way to Add Custom Methods and Fields" [8944-12067] -->
<h3><a>The Smart Way to Access Game Features</a></h3>
<div>
@ -297,7 +338,7 @@ An AppState has access to all game features in the SimpleApplication via the <co
this.app.getRootNode&#40;&#41;.attachChild&#40; sky &#41;;</pre>
</div>
<!-- EDIT12 SECTION "The Smart Way to Access Game Features" [10123-10960] -->
<!-- EDIT12 SECTION "The Smart Way to Access Game Features" [12068-12905] -->
<h3><a>The Smart Way to Implement Game Logic</a></h3>
<div>
@ -359,20 +400,20 @@ Read all about <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.ht
</p>
</div>
<!-- EDIT13 SECTION "The Smart Way to Implement Game Logic" [10961-13763] -->
<!-- EDIT13 SECTION "The Smart Way to Implement Game Logic" [12906-15708] -->
<h3><a>Optimize Application Performance</a></h3>
<div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/intermediate/optimization.html">Optimization</a> How to avoid wasting cycles</div>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/intermediate/optimization.html">Optimization</a> ??? How to avoid wasting cycles</div>
</li>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/multithreading.html">Multithreading</a> – Use concurrency for long-running backgroudn tasks, but don&#039;t manipulate the scene graph from outside the main thread (update loop)!</div>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/multithreading.html">Multithreading</a> ??? Use concurrency for long-running background tasks, but don&#039;t manipulate the scene graph from outside the main thread (update loop)!</div>
</li>
<li><div> You can add a <a href="/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html">Java Profiler</a> to the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> via Tools → Plugins → Available. The profiler presents statistics on the lifecycle of methods and objects. Performance problems may be caused by just a few methods that take long, or are called too often (try to cache values to avoid this). If object creation and garbage collection counts keep increasing, you are looking at a memory leak.</div>
<li><div> You can add a <a href="/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html">Java Profiler</a> to the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> via Tools ??? Plugins ??? Available. The profiler presents statistics on the lifecycle of methods and objects. Performance problems may be caused by just a few methods that take long, or are called too often (try to cache values to avoid this). If object creation and garbage collection counts keep increasing, you are looking at a memory leak.</div>
</li>
</ul>
</div>
<!-- EDIT14 SECTION "Optimize Application Performance" [13764-14487] -->
<!-- EDIT14 SECTION "Optimize Application Performance" [15709-16432] -->
<h3><a>Don&#039;t Mess With Geometric State</a></h3>
<div>
@ -390,7 +431,7 @@ Read all about <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.ht
</ul>
</div>
<!-- EDIT15 SECTION "Don't Mess With Geometric State" [14488-14977] -->
<!-- EDIT15 SECTION "Don't Mess With Geometric State" [16433-16922] -->
<h3><a>Maintain Internal Documentation</a></h3>
<div>
@ -413,7 +454,7 @@ Treat javadoc as messages to your future self. &quot;genNextVal() generates the
</p>
</div>
<!-- EDIT16 SECTION "Maintain Internal Documentation" [14978-15714] -->
<!-- EDIT16 SECTION "Maintain Internal Documentation" [16923-17659] -->
<h2><a>Debugging and Test Phase</a></h2>
<div>
@ -427,24 +468,24 @@ Treat javadoc as messages to your future self. &quot;genNextVal() generates the
</p>
<p>
<strong>Unit Testing (<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html"><param name="text" value="<html><u>Java Assertions</u></html>"><param name="textColor" value="blue"></object>)</strong> has a different status in 3D graphics development than in other types of software. You cannot write assertions that automatically test whether the rendered image <em>looks</em> correct, or whether interactions are <em>intuitive</em>. Still you should <a href="/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html">create simple test cases</a> for individual game features such as loaders, content generators, effects. Run the test cases now and then to see whether they still work as intended or whether they are suffering from regressions or side-effects. Keep the test classes in the <code>test</code> directory of your project, don&#039;t include them in the distribution.
<strong>Unit Testing (<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html"><param name="text" value="<html><u>Java Assertions</u></html>"><param name="textColor" value="blue"></object>)</strong> has a different status in 3D graphics development than in other types of software. You cannot write assertions that automatically test whether the rendered image <em>looks</em> correct, or whether interactions are <em>intuitive</em>. Still you should <a href="/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html">create simple test cases</a> for individual game features such as loaders, content generators, effects. Run the test cases now and then to see whether they still work as intended ??? or whether they are suffering from regressions or side-effects. Keep the test classes in the <code>test</code> directory of your project, don&#039;t include them in the distribution.
</p>
<p>
<strong>Quality Assurance (QA)</strong> means repeatedly checking a certain set of features that must work, but that might be unexpectedly broken as a side-effect. Every game has some crazy bugs somewhere but basic tasks <em>must work</em>, no excuse. This includes installing and de-installing; saving and loading; changing options; starting, pausing, quitting; basic actions such as walking, fighting, etc. After every milestone, you go through your QA list again and systematically look for regressions or newly introduced bugs. Check the application <em>on every supported operating system and hardware</em> (!) because not all graphic cards support the same features. If you don&#039;t find the obvious bugs, your users will, and carelessness will put them off.
<strong>Quality Assurance (QA)</strong> means repeatedly checking a certain set of features that must work, but that might be unexpectedly broken as a side-effect. Every game has some crazy bugs somewhere ??? but basic tasks <em>must work</em>, no excuse. This includes installing and de-installing; saving and loading; changing options; starting, pausing, quitting; basic actions such as walking, fighting, etc. After every milestone, you go through your QA list again and systematically look for regressions or newly introduced bugs. Check the application <em>on every supported operating system and hardware</em> (!) because not all graphic cards support the same features. If you don&#039;t find the obvious bugs, your users will, and carelessness will put them off.
</p>
<p>
<strong>Alpha and Beta Testing</strong> means that you ask someone to try to install and run your game. It should be a real user situation, where they are left to figure out the installation and gameplay by themselvesyou only can include the usual read-me and help docs. Provide the testers with an easy method to report back what problems they encountered, what they liked best, or why they gave up. Evaluate whether reported problems are one-off glitches, or whether they must be fixed for the game to be playable for everyone.
<strong>Alpha and Beta Testing</strong> means that you ask someone to try to install and run your game. It should be a real user situation, where they are left to figure out the installation and gameplay by themselves???you only can include the usual read-me and help docs. Provide the testers with an easy method to report back what problems they encountered, what they liked best, or why they gave up. Evaluate whether reported problems are one-off glitches, or whether they must be fixed for the game to be playable for everyone.
</p>
</div>
<!-- EDIT17 SECTION "Debugging and Test Phase" [15715-18331] -->
<!-- EDIT17 SECTION "Debugging and Test Phase" [17660-20276] -->
<h2><a>Release Phase</a></h2>
<div>
</div>
<!-- EDIT18 SECTION "Release Phase" [18332-18358] -->
<!-- EDIT18 SECTION "Release Phase" [20277-20303] -->
<h3><a>Pre-Release To-Do List</a></h3>
<div>
<ul>
@ -454,13 +495,13 @@ Treat javadoc as messages to your future self. &quot;genNextVal() generates the
</li>
<li><div> Verify that your code loads the optimized .j3o files, and not the original model formats.</div>
</li>
<li><div> Prepare licenses of assets that you use for inclusion. (You <em>did</em> obtain permission to use them, right?)</div>
<li><div> Prepare licenses of assets that you use for inclusion. (You <em>did</em> obtain permission to use them, right????)</div>
</li>
<li><div> Switch off fine <a href="/com/jme3/gde/core/docs/jme3/advanced/logging.html">logging</a> output.</div>
</li>
<li><div> Prepare promotional art: The most awesome screenshots (in thumbnail, square, vertical, horizontal, and fullscreen formats) and video clips. Include name, contact info, slogan, etc., so future customers can find you.</div>
</li>
<li><div> Prepare a readme.txt file, or installation guide, or handbook if applicable.</div>
<li><div> Prepare a readme.txt file, or installation guide, or handbook ??? if applicable.</div>
</li>
<li><div> Get a certificate if one is required for your distribution method (see below).</div>
</li>
@ -469,7 +510,7 @@ Treat javadoc as messages to your future self. &quot;genNextVal() generates the
</ul>
</div>
<!-- EDIT19 SECTION "Pre-Release To-Do List" [18359-19310] -->
<!-- EDIT19 SECTION "Pre-Release To-Do List" [20304-21255] -->
<h3><a>Distributing the Executables</a></h3>
<div>
@ -479,7 +520,7 @@ The <a href="/com/jme3/gde/core/docs/sdk/application_deployment.html">jMonkeyEng
</p>
<p>
Decide whether you want to release your game as WebStart, desktop JAR, mobile APK, or browser Applet Each has its pros and cons.
Decide whether you want to release your game as WebStart, desktop JAR, mobile APK, or browser Applet ??? Each has its pros and cons.
</p>
<div><table>
@ -507,7 +548,7 @@ Decide whether you want to release your game as WebStart, desktop JAR, mobile AP
(.APK)</td><td>Game runs on Android devices.</td><td>Android devices do not support post-procesor effects.</td>
</tr>
</table></div>
<!-- EDIT21 TABLE [19764-20984] -->
<!-- EDIT21 TABLE [21709-22929] -->
<p>
Which ever method you choose, a Java-Application works on the main operating systems: Windows, Mac <acronym title="Operating System">OS</acronym>, Linux, Android.
@ -519,5 +560,5 @@ The distribution appears in a newly generated <code>dist</code> directory inside
</p>
</div>
<!-- EDIT20 SECTION "Distributing the Executables" [19311-] -->
<!-- EDIT20 SECTION "Distributing the Executables" [21256-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:intermediate:best_practices?do=export_xhtmlbody">view online version</a></em></p>

@ -312,10 +312,10 @@ Objects in the translucent bucket (e.g. particles) are not affected by SceneProc
<th>Standard Material Transparency</th><th>Description</th><th>Example</th>
</tr>
<tr>
<td>getAdditionalRenderState().setBlendMode(BlendMode.Off);</td><td>This is the default, no transparency.</td><td>Use for all opaque objects like walls, floors, people</td>
<td>getAdditionalRenderState().setBlendMode(BlendMode.Off);</td><td>This is the default, no transparency.</td><td>Use for all opaque objects like walls, floors, people???</td>
</tr>
<tr>
<td>getAdditionalRenderState().setBlendMode(BlendMode.Alpha);</td><td>Interpolates the background pixel with the current pixel by using the current pixel&#039;s alpha.</td><td>This is the most commonly used BlendMode for transparency and translucency: Frosted window panes, ice, glass, alpha-blended vegetation textures </td>
<td>getAdditionalRenderState().setBlendMode(BlendMode.Alpha);</td><td>Interpolates the background pixel with the current pixel by using the current pixel&#039;s alpha.</td><td>This is the most commonly used BlendMode for transparency and translucency: Frosted window panes, ice, glass, alpha-blended vegetation textures??? </td>
</tr>
<tr>
<td>getAdditionalRenderState().setDepthWrite(false);</td><td>Disables writing of the pixel&#039;s depth value to the depth buffer.</td><td>Deactivate this on Materials if you expect two or more transparent/translucent objects to be obscuring one another, but you want to see through both.</td>
@ -334,7 +334,7 @@ Deactivate Alpha Testing for gradually <strong>translucent</strong> objects, suc
<pre>mat.setBoolean&#40;&quot;UseAlpha&quot;,true&#41;;</pre>
<p>
The Material Color bleeds through the transparent areas of the top-layer DiffuseMap texture. In this case you do not need BlendMode Alpha because it&#039;s not the whole Material that is transparent, but only one of the texture layers. You use this bleed-through effect, for example, to generate differently colored uniforms, animals, or plants, where each Material uses the same &quot;template&quot; DiffuseMap texture but combines it with a different color.
The Material Color bleeds through the transparent areas of the top-layer DiffuseMap texture. In this case you do not need BlendMode Alpha ??? because it&#039;s not the whole Material that is transparent, but only one of the texture layers. You use this bleed-through effect, for example, to generate differently colored uniforms, animals, or plants, where each Material uses the same &quot;template&quot; DiffuseMap texture but combines it with a different color.
</div></p>
</p>

@ -12,7 +12,7 @@ Note: Typically you have to string these formulas together. Look in the table fo
</p>
<div><table>
<tr>
<th>I have</th><th>I want</th><th>Formula</th>
<th>I have???</th><th>I want???</th><th>Formula</th>
</tr>
<tr>
<td>normalized direction and length <br/>
@ -23,6 +23,13 @@ new direction vector v0</td><td>v0 = n1.mult(d1)</td>
<td>point and direction vector <br/>
p1,v1</td><td>to move the point <br/>
new point p0</td><td>p0 = p1.add(v1)</td>
</tr>
<tr>
<td> direction, position and distance <br/>
v1,p1,dist</td><td>Position at distance <br/>
p2 </td><td>v1.normalzeLocal() <br/>
scaledDir = v1.mult(dist) <br/>
p2 = p1.add(scaledDir)</td>
</tr>
<tr>
<td>two direction vectors or normals <br/>
@ -52,9 +59,9 @@ new Quaternion q</td><td>Quaternion q = new Quaternion(); <br/>
q.lookAt(v,up)</td>
</tr>
</table></div>
<!-- EDIT3 TABLE [387-1307] --><div><table>
<!-- EDIT3 TABLE [387-1459] --><div><table>
<tr>
<th>I have</th><th>I want</th><th>Formula</th>
<th>I have???</th><th>I want???</th><th>Formula</th>
</tr>
<tr>
<td>angle in degrees <br/>
@ -100,9 +107,9 @@ x and z coordinates</td><td>float x = FastMath.cos(phi)*r; <br/>
float z = FastMath.sin(phi)*r;</td>
</tr>
</table></div>
<!-- EDIT4 TABLE [1309-2403] -->
<!-- EDIT4 TABLE [1461-2555] -->
</div>
<!-- EDIT2 SECTION "Formulas" [32-2405] -->
<!-- EDIT2 SECTION "Formulas" [32-2557] -->
<h2><a>Local vs Non-local methods?</a></h2>
<div>
<ul>
@ -115,5 +122,5 @@ float z = FastMath.sin(phi)*r;</td>
</ul>
</div>
<!-- EDIT5 SECTION "Local vs Non-local methods?" [2406-] -->
<!-- EDIT5 SECTION "Local vs Non-local methods?" [2558-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:intermediate:math?do=export_xhtmlbody">view online version</a></em></p>

@ -128,19 +128,26 @@ Install a graphic editor such as Gimp or Photoshop. <strong>Consult the graphic
<p>
<p><div>Storing the textures inside your project directory is necessary for the paths in JME&#039;s binary model files (.j3o) to work. Treat the paths of your assets like class names of java classes, they define a specific asset. When you later generate .j3o files, compile class files, and distribute the project, paths and files need to be available in their final absolute form. It is imperative to keep the same directory structure from beginning to end. <br/>
Storing the textures inside your project directory is necessary for the paths in JME&#039;s binary model files (.j3o) to work. Treat the paths of your assets like class names of java classes, they define a specific asset. When you later generate .j3o files, compile class files, and distribute the project, paths and files need to be available in their final absolute form. It is imperative to keep the same directory structure from beginning to end.
</p>
<p>
If you ever change the assets directory structure, you will have to do manual refactoring (just as for Java package name changes): You will need to re-export all affected models, regenerate all affected .j3o files, and manually update all affected paths in your code.
</div></p>
</p>
</div>
<!-- EDIT4 SECTION "Create Textures and Materials" [3531-4793] -->
<!-- EDIT4 SECTION "Create Textures and Materials" [3531-4768] -->
<h3><a>Create 3D Models</a></h3>
<div>
<p>
Install a mesh editor such as <a href="/com/jme3/gde/core/docs/jme3/external/blender.html">Blender</a> or 3D Studio MAX. Reuse textures and materials as much as possible. <strong>Consult the mesh editor&#039;s documentation for specific details how to do the following tasks.</strong>
</p>
<p>
<p><div>Note that UV coords are part of the mesh and not part of the material, so if you import your mesh successfully you can later apply the texture again and it will map correctly.
</div></p>
</p>
<ol>
@ -175,10 +182,11 @@ See also: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer">
<p><div><strong>When I load the model in JME, why does it look different than in the 3D editor?</strong> <br/>
3D models will never look identical in a game engine and in a mesh editor. Mesh editors are optimized for high-quality offline rendering, and many of the material and texture options simply do not work in a live rendering context. Also, the shaders that render the materials in JME are different than in your mesh editor&#039;s renderer. Remind your graphic designers to only focus on features that game engines support.
</div></p>
</p>
</div>
<!-- EDIT5 SECTION "Create 3D Models" [4794-6754] -->
<!-- EDIT5 SECTION "Create 3D Models" [4769-6921] -->
<h3><a>Convert 3D Models to .j3o Format</a></h3>
<div>
@ -191,7 +199,7 @@ Convert all models and scenes to jME3&#039;s binary .j3o format to load() them.
<li><div> Confirm that you exported the model into the <code>assets/Textures</code> directory (or subdirectories) together with all its textures.</div>
</li>
<li><div> In the <acronym title="Software Development Kit">SDK</acronym>, right-click the model and choose &quot;Convert to j3o Binary&quot;. <br/>
The paths in the j3o now reference files with an absolute <code>assets/Textures/</code> path.</div>
The paths in the j3o now reference files with an absolute <code>assets/Textures/???</code> path.</div>
</li>
<li><div> Now, move the .j3o into the corresponding <code>assets/Models/</code> or <code>assets/Scenes/</code> directory. </div>
</li>
@ -205,7 +213,7 @@ This process ensures that the texture paths are correct, and it also keeps your
</p>
<p>
<strong>Must I convert to .j3o? Yes!</strong>
<strong>Must I convert to .j3o? ??? Yes!</strong>
</p>
<ul>
<li><div> .j3o is an optimized format to store parts of a jME3 scene graph. A .j3o file can contain one shape, one model, or a whole scene.</div>
@ -228,7 +236,7 @@ Use the jMonkeyEngine SceneComposer to add these properties.</div>
</p>
</div>
<!-- EDIT6 SECTION "Convert 3D Models to .j3o Format" [6755-8816] -->
<!-- EDIT6 SECTION "Convert 3D Models to .j3o Format" [6922-8983] -->
<h2><a>See Also</a></h2>
<div>
<ul>
@ -247,5 +255,5 @@ Use the jMonkeyEngine SceneComposer to add these properties.</div>
</span></div>
</div>
<!-- EDIT7 SECTION "See Also" [8817-] -->
<!-- EDIT7 SECTION "See Also" [8984-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:intermediate:multi-media_asset_pipeline?do=export_xhtmlbody">view online version</a></em></p>

@ -71,11 +71,11 @@ SimpleApplication displays a HUD with statistics. Use <code>app.setDisplayStatVi
The StatsView counts Objects,Uniforms,Triangles,Vertices are in the scene, and it counts how many FrameBuffers, Textures, or Shaders:
</p>
<ul>
<li><div> were switched in the last frame (S)</div>
<li><div> ??? were switched in the last frame (S)</div>
</li>
<li><div> were used during the last frame (F)</div>
<li><div> ??? were used during the last frame (F)</div>
</li>
<li><div> exist in OpenGL memory (M)</div>
<li><div> ??? exist in OpenGL memory (M)</div>
</li>
</ul>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save