- update manual contents from wiki

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9651 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 12 years ago
parent ba2e17ef89
commit 5203eb8aa2
  1. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/1.jpg
  2. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/2.jpg
  3. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/3.jpg
  4. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/3d_models.html
  5. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/4.jpg
  6. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/5.jpg
  7. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/6.jpg
  8. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/application_states.html
  9. 5
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html
  10. 254
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/audio_environment_presets.html
  11. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/camera.html
  12. 16
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/capture_audio_video_to_a_file.html
  13. 12
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html
  14. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_meshes.html
  15. 11
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html
  16. 30
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/jme3_shaders.html
  17. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/light_and_shadow.html
  18. 6
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html
  19. 14
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/localization.html
  20. 60
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/material_definitions.html
  21. 12
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html
  22. 20
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/multiple_camera_views.html
  23. 54
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/networking.html
  24. 21
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_scenarios.html
  25. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ogre_solved.jpg
  26. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ogre_solved2.png
  27. 72
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ogrecompatibility.html
  28. 75
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics.html
  29. 46
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html
  30. 81
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html
  31. 12
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/screenshots.html
  32. 23
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html
  33. 78
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html
  34. 17
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain_collision.html
  35. 14
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/water.html
  36. 41
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html
  37. 32
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html
  38. 25
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html
  39. 28
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html
  40. 11
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html
  41. 28
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_material.html
  42. 37
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_physics.html
  43. 52
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html
  44. 60
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html
  45. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/1.gif
  46. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/2.gif
  47. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3.1.gif
  48. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3.gif
  49. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/4.gif
  50. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/5.gif
  51. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/6.gif
  52. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/7.gif
  53. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/8.gif
  54. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender-material-1.png
  55. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender-material-2.png
  56. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender-material-3.png
  57. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender-material-4.png
  58. 423
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html
  59. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender_apply_bones.png
  60. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender_apply_mesh.png
  61. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender_envelopes.png
  62. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender_finished.png
  63. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender_rootbone.png
  64. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/exception2.gif
  65. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/post-slice.png
  66. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/ready_normal.gif
  67. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/render.png
  68. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/saveenvmap.png
  69. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/scene.png
  70. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/shadeless.png
  71. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/skybox-concept.png
  72. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/start-screen2.png
  73. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/texture.png
  74. 119
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html
  75. 110
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html
  76. 23
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html
  77. 53
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/optimization.html
  78. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/application_deployment.html
  79. 29
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/blender.html
  80. 5
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/material_editing.html
  81. 34
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/project_creation.html
  82. 22
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/troubleshooting.html
  83. 31
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/version_control.html
  84. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/wiki-map.xml
  85. 1
      sdk/jme3-core/javahelp/wiki_help.properties

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

@ -40,14 +40,20 @@ To create 3D models and scenes, you need a 3D Mesh Editor such as <object classi
</p>
<p>
<strong>Tip:</strong> Consider creating <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/UV_Map_Basics"><param name="text" value="<html><u>UV textures</u></html>"><param name="textColor" value="blue"></object> for more complex models, it looks more professional.
<strong>Tip:</strong> Learn how to create <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/UV_Map_Basics"><param name="text" value="<html><u>UV textures</u></html>"><param name="textColor" value="blue"></object> for more complex models, it looks more professional.
</p>
<p>
3D mesh editors are third-party products, so please consult their documentation for instructions how to use them. Here is an example workflow for Blender users:
3D model editors are third-party products, so please consult their documentation for instructions how to use them. Here is an example workflow for Blender users:
</p>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/external/blender.html">Creating jME3 compatible 3D models in Blender</a></div>
</li>
</ul>
<p>
To export your models as Ogre <acronym title="Extensible Markup Language">XML</acronym> meshes with materials:
</p>
<ol>

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@ -156,7 +156,7 @@ this.app = &#40;SimpleApplication&#41; app;</pre>
</td>
</tr>
<tr>
<td>cleanup()</td><td>This methid is executed after you remove the AppState from the game. Here you implement clean-up code for when this state is detached. You can modify the scene graph from here (e.g. detach nodes).</td>
<td>cleanup()</td><td>This method is executed after you remove the AppState from the game. Here you implement clean-up code for when this state is detached. You can modify the scene graph from here (e.g. detach nodes).</td>
</tr>
<tr>
<td>update(float tpf)</td><td>Here you implement the behaviour that you want to hook into the simpleUpdate() loop while this state is attached to the game. You can modify the scene graph from here.</td>

@ -272,6 +272,11 @@ Convert assets as described above.</div>
<p>
<p><div>If you don&#039;t use the <acronym title="Software Development Kit">SDK</acronym> for some reason, you can still convert models to j3o format: Load any model in Ogre3D or Wavefront format with the AssetManager.loadModel() as a spatial. Then save the spatial as j3o file using <a href="/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html">BinaryExporter</a>.
</div></p>
</p>
<p>
<p><div>Use file version control and let team members check out the project. Your developers open the project in Eclipse (etc) as they are used to. Additionally to their graphic tools, ask your graphic designers to install the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>, and to check out the codeless project that you just prepared. This makes it easy for non-coding team member to browse and preview game assets, to arrange scenes, and to convert files. At the same time, non-coders don&#039;t accidentally mess with code, and developers don&#039;t accidentally mess with assets. :)
</div></p>
</p>

@ -14,200 +14,200 @@ Usage:
<pre>Environment Generic = new Environment&#40;
new float&#91;&#93;&#123; 0, 7.5f, 1f, -1000, -100, 0, 1.49f, 0.83f, 1f, -2602,
0.007f, 0f, 0f, 0f, 200, 0.011f, 0f, 0f, 0f, 0.250f,
0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
audioRenderer.setEnvironment&#40;myEnvironment&#41;;</pre>
</div>
<!-- EDIT1 SECTION "Audio Environment Presets" [1-570] -->
<!-- EDIT1 SECTION "Audio Environment Presets" [1-568] -->
<h2><a>Castle</a></h2>
<div>
<pre>CastleSmallRoom = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -800, -2000, 1.22f, 0.83f, 0.31f, -100, 0.022f, 0f, 0f, 0f, 600, 0.011f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41; &#41;;
CastleShortPassage = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -1000, -2000, 2.32f, 0.83f, 0.31f, -100, 0.007f, 0f, 0f, 0f, 200, 0.023f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41; &#41;;
CastleMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.930f, -1000, -1100, -2000, 2.04f, 0.83f, 0.46f, -400, 0.022f, 0f, 0f, 0f, 400, 0.011f, 0f, 0f, 0f, 0.155f, 0.030f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41; &#41;;
CastleLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -800, -2000, 3.42f, 0.83f, 0.31f, -100, 0.007f, 0f, 0f, 0f, 300, 0.023f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41; &#41;;
CastleLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.820f, -1000, -1100, -1800, 2.53f, 0.83f, 0.50f, -700, 0.034f, 0f, 0f, 0f, 200, 0.016f, 0f, 0f, 0f, 0.185f, 0.070f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41; &#41;;
CastleHall = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.810f, -1000, -1100, -1500, 3.14f, 0.79f, 0.62f, -1500, 0.056f, 0f, 0f, 0f, 100, 0.024f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41; &#41;;
CastleCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -1100, -2000, 0.67f, 0.87f, 0.31f, 300, 0.010f, 0f, 0f, 0f, 1100, 0.007f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41; &#41;;
CastleCourtyard = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.420f, -1000, -700, -1400, 2.13f, 0.61f, 0.23f, -1300, 0.160f, 0f, 0f, 0f, -300, 0.036f, 0f, 0f, 0f, 0.250f, 0.370f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41; &#41;;
CastleAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -600, -2000, 1.64f, 0.87f, 0.31f, 00, 0.007f, 0f, 0f, 0f, 300, 0.034f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41; &#41;;</pre>
<pre>CastleSmallRoom = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -800, -2000, 1.22f, 0.83f, 0.31f, -100, 0.022f, 0f, 0f, 0f, 600, 0.011f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41;;
CastleShortPassage = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -1000, -2000, 2.32f, 0.83f, 0.31f, -100, 0.007f, 0f, 0f, 0f, 200, 0.023f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41;;
CastleMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.930f, -1000, -1100, -2000, 2.04f, 0.83f, 0.46f, -400, 0.022f, 0f, 0f, 0f, 400, 0.011f, 0f, 0f, 0f, 0.155f, 0.030f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41;;
CastleLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -800, -2000, 3.42f, 0.83f, 0.31f, -100, 0.007f, 0f, 0f, 0f, 300, 0.023f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41;;
CastleLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.820f, -1000, -1100, -1800, 2.53f, 0.83f, 0.50f, -700, 0.034f, 0f, 0f, 0f, 200, 0.016f, 0f, 0f, 0f, 0.185f, 0.070f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41;;
CastleHall = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.810f, -1000, -1100, -1500, 3.14f, 0.79f, 0.62f, -1500, 0.056f, 0f, 0f, 0f, 100, 0.024f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41;;
CastleCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -1100, -2000, 0.67f, 0.87f, 0.31f, 300, 0.010f, 0f, 0f, 0f, 1100, 0.007f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41;;
CastleCourtyard = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.420f, -1000, -700, -1400, 2.13f, 0.61f, 0.23f, -1300, 0.160f, 0f, 0f, 0f, -300, 0.036f, 0f, 0f, 0f, 0.250f, 0.370f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41;;
CastleAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 0.890f, -1000, -600, -2000, 1.64f, 0.87f, 0.31f, 00, 0.007f, 0f, 0f, 0f, 300, 0.034f, 0f, 0f, 0f, 0.138f, 0.080f, 0.250f, 0f, -5f, 5168.6f, 139.5f, 0f, 0x20&#125; &#41;;</pre>
</div>
<!-- EDIT2 SECTION "Castle" [571-2650] -->
<!-- EDIT2 SECTION "Castle" [569-2630] -->
<h2><a>Warehouse, Factory</a></h2>
<div>
<pre>FactoryAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.590f, -1200, -200, -600, 3.14f, 0.65f, 1.31f, 300, 0.010f, 0f, 0f, 0f, 000, 0.038f, 0f, 0f, 0f, 0.114f, 0.100f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;
<pre>FactoryAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.590f, -1200, -200, -600, 3.14f, 0.65f, 1.31f, 300, 0.010f, 0f, 0f, 0f, 000, 0.038f, 0f, 0f, 0f, 0.114f, 0.100f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41;;
FactoryShortpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.640f, -1200, -200, -600, 2.53f, 0.65f, 1.31f, 0, 0.010f, 0f, 0f, 0f, 200, 0.038f, 0f, 0f, 0f, 0.135f, 0.230f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;
FactoryMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.820f, -1200, -200, -600, 2.76f, 0.65f, 1.31f, -1100, 0.022f, 0f, 0f, 0f, 300, 0.023f, 0f, 0f, 0f, 0.174f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;
FactoryLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.640f, -1200, -200, -600, 4.06f, 0.65f, 1.31f, 0, 0.020f, 0f, 0f, 0f, 200, 0.037f, 0f, 0f, 0f, 0.135f, 0.230f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;
FactoryLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.750f, -1200, -300, -400, 4.24f, 0.51f, 1.31f, -1500, 0.039f, 0f, 0f, 0f, 100, 0.023f, 0f, 0f, 0f, 0.231f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;
FactoryHall = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.750f, -1000, -300, -400, 7.43f, 0.51f, 1.31f, -2400, 0.073f, 0f, 0f, 0f, -100, 0.027f, 0f, 0f, 0f, 0.250f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;
FactoryCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 1.7f, 0.630f, -1200, -200, -600, 0.49f, 0.65f, 1.31f, 200, 0.010f, 0f, 0f, 0f, 600, 0.032f, 0f, 0f, 0f, 0.107f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;
FactoryCourtyard = new Environment &#40; new float&#91;&#93;&#123; 26, 1.7f, 0.570f, -1000, -1000, -400, 2.32f, 0.29f, 0.56f, -1300, 0.140f, 0f, 0f, 0f, -800, 0.039f, 0f, 0f, 0f, 0.250f, 0.290f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;
FactorySmallroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.820f, -1000, -200, -600, 1.72f, 0.65f, 1.31f, -300, 0.010f, 0f, 0f, 0f, 500, 0.024f, 0f, 0f, 0f, 0.119f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41; &#41;;</pre>
FactoryMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.820f, -1200, -200, -600, 2.76f, 0.65f, 1.31f, -1100, 0.022f, 0f, 0f, 0f, 300, 0.023f, 0f, 0f, 0f, 0.174f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41;;
FactoryLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.640f, -1200, -200, -600, 4.06f, 0.65f, 1.31f, 0, 0.020f, 0f, 0f, 0f, 200, 0.037f, 0f, 0f, 0f, 0.135f, 0.230f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41;;
FactoryLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.750f, -1200, -300, -400, 4.24f, 0.51f, 1.31f, -1500, 0.039f, 0f, 0f, 0f, 100, 0.023f, 0f, 0f, 0f, 0.231f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41;;
FactoryHall = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.750f, -1000, -300, -400, 7.43f, 0.51f, 1.31f, -2400, 0.073f, 0f, 0f, 0f, -100, 0.027f, 0f, 0f, 0f, 0.250f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41;;
FactoryCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 1.7f, 0.630f, -1200, -200, -600, 0.49f, 0.65f, 1.31f, 200, 0.010f, 0f, 0f, 0f, 600, 0.032f, 0f, 0f, 0f, 0.107f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41;;
FactoryCourtyard = new Environment &#40; new float&#91;&#93;&#123; 26, 1.7f, 0.570f, -1000, -1000, -400, 2.32f, 0.29f, 0.56f, -1300, 0.140f, 0f, 0f, 0f, -800, 0.039f, 0f, 0f, 0f, 0.250f, 0.290f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41;;
FactorySmallroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.820f, -1000, -200, -600, 1.72f, 0.65f, 1.31f, -300, 0.010f, 0f, 0f, 0f, 500, 0.024f, 0f, 0f, 0f, 0.119f, 0.070f, 0.250f, 0f, -5f, 3762.6f, 362.5f, 0f, 0x20&#125; &#41;;</pre>
</div>
<!-- EDIT3 SECTION "Warehouse, Factory" [2651-4742] -->
<!-- EDIT3 SECTION "Warehouse, Factory" [2631-4706] -->
<h2><a>Ice Palace</a></h2>
<div>
<pre>IcepalaceAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.840f, -1000, -500, -1100, 2.76f, 1.46f, 0.28f, 100, 0.010f, 0f, 0f, 0f, -100, 0.030f, 0f, 0f, 0f, 0.161f, 0.090f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;
<pre>IcepalaceAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.840f, -1000, -500, -1100, 2.76f, 1.46f, 0.28f, 100, 0.010f, 0f, 0f, 0f, -100, 0.030f, 0f, 0f, 0f, 0.161f, 0.090f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41;;
IcepalaceShortpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.750f, -1000, -500, -1100, 1.79f, 1.46f, 0.28f, -600, 0.010f, 0f, 0f, 0f, 100, 0.019f, 0f, 0f, 0f, 0.177f, 0.090f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;
IcepalaceMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.870f, -1000, -500, -700, 2.22f, 1.53f, 0.32f, -800, 0.039f, 0f, 0f, 0f, 100, 0.027f, 0f, 0f, 0f, 0.186f, 0.120f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;
IcepalaceLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.770f, -1000, -500, -800, 3.01f, 1.46f, 0.28f, -200, 0.012f, 0f, 0f, 0f, 200, 0.025f, 0f, 0f, 0f, 0.186f, 0.040f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;
IcepalaceLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 2.9f, 0.810f, -1000, -500, -700, 3.14f, 1.53f, 0.32f, -1200, 0.039f, 0f, 0f, 0f, 000, 0.027f, 0f, 0f, 0f, 0.214f, 0.110f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;
IcepalaceHall = new Environment &#40; new float&#91;&#93;&#123; 26, 2.9f, 0.760f, -1000, -700, -500, 5.49f, 1.53f, 0.38f, -1900, 0.054f, 0f, 0f, 0f, -400, 0.052f, 0f, 0f, 0f, 0.226f, 0.110f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;
IcepalaceCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.830f, -1000, -600, -1300, 0.76f, 1.53f, 0.26f, 100, 0.012f, 0f, 0f, 0f, 600, 0.016f, 0f, 0f, 0f, 0.143f, 0.080f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;
IcepalaceCourtyard = new Environment &#40; new float&#91;&#93;&#123; 26, 2.9f, 0.590f, -1000, -1100, -1000, 2.04f, 1.20f, 0.38f, -1000, 0.173f, 0f, 0f, 0f, -1000, 0.043f, 0f, 0f, 0f, 0.235f, 0.480f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;
IcepalaceSmallroom = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.840f, -1000, -500, -1100, 1.51f, 1.53f, 0.27f, -100, 0.010f, 0f, 0f, 0f, 300, 0.011f, 0f, 0f, 0f, 0.164f, 0.140f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41; &#41;;</pre>
IcepalaceMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.870f, -1000, -500, -700, 2.22f, 1.53f, 0.32f, -800, 0.039f, 0f, 0f, 0f, 100, 0.027f, 0f, 0f, 0f, 0.186f, 0.120f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41;;
IcepalaceLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.770f, -1000, -500, -800, 3.01f, 1.46f, 0.28f, -200, 0.012f, 0f, 0f, 0f, 200, 0.025f, 0f, 0f, 0f, 0.186f, 0.040f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41;;
IcepalaceLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 2.9f, 0.810f, -1000, -500, -700, 3.14f, 1.53f, 0.32f, -1200, 0.039f, 0f, 0f, 0f, 000, 0.027f, 0f, 0f, 0f, 0.214f, 0.110f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41;;
IcepalaceHall = new Environment &#40; new float&#91;&#93;&#123; 26, 2.9f, 0.760f, -1000, -700, -500, 5.49f, 1.53f, 0.38f, -1900, 0.054f, 0f, 0f, 0f, -400, 0.052f, 0f, 0f, 0f, 0.226f, 0.110f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41;;
IcepalaceCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.830f, -1000, -600, -1300, 0.76f, 1.53f, 0.26f, 100, 0.012f, 0f, 0f, 0f, 600, 0.016f, 0f, 0f, 0f, 0.143f, 0.080f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41;;
IcepalaceCourtyard = new Environment &#40; new float&#91;&#93;&#123; 26, 2.9f, 0.590f, -1000, -1100, -1000, 2.04f, 1.20f, 0.38f, -1000, 0.173f, 0f, 0f, 0f, -1000, 0.043f, 0f, 0f, 0f, 0.235f, 0.480f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41;;
IcepalaceSmallroom = new Environment &#40; new float&#91;&#93;&#123; 26, 2.7f, 0.840f, -1000, -500, -1100, 1.51f, 1.53f, 0.27f, -100, 0.010f, 0f, 0f, 0f, 300, 0.011f, 0f, 0f, 0f, 0.164f, 0.140f, 0.250f, 0f, -5f, 12428.5f, 99.6f, 0f, 0x20&#125; &#41;;</pre>
</div>
<!-- EDIT4 SECTION "Ice Palace" [4743-6857] -->
<!-- EDIT4 SECTION "Ice Palace" [4707-6805] -->
<h2><a>Space Station</a></h2>
<div>
<pre>SpacestationAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 1.5f, 0.780f, -1000, -300, -100, 1.16f, 0.81f, 0.55f, 300, 0.007f, 0f, 0f, 0f, 000, 0.018f, 0f, 0f, 0f, 0.192f, 0.210f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41; &#41;;
SpacestationMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.5f, 0.750f, -1000, -400, -100, 3.01f, 0.50f, 0.55f, -800, 0.034f, 0f, 0f, 0f, 100, 0.035f, 0f, 0f, 0f, 0.209f, 0.310f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41; &#41;;
SpacestationShortpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.5f, 0.870f, -1000, -400, -100, 3.57f, 0.50f, 0.55f, 0, 0.012f, 0f, 0f, 0f, 100, 0.016f, 0f, 0f, 0f, 0.172f, 0.200f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41; &#41;;
SpacestationLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.820f, -1000, -400, -100, 4.62f, 0.62f, 0.55f, 0, 0.012f, 0f, 0f, 0f, 200, 0.031f, 0f, 0f, 0f, 0.250f, 0.230f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41; &#41;;
SpacestationLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.810f, -1000, -400, -100, 3.89f, 0.38f, 0.61f, -1000, 0.056f, 0f, 0f, 0f, -100, 0.035f, 0f, 0f, 0f, 0.233f, 0.280f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41; &#41;;
SpacestationHall = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.870f, -1000, -400, -100, 7.11f, 0.38f, 0.61f, -1500, 0.100f, 0f, 0f, 0f, -400, 0.047f, 0f, 0f, 0f, 0.250f, 0.250f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41; &#41;;
SpacestationCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 1.4f, 0.560f, -1000, -300, -100, 0.79f, 0.81f, 0.55f, 300, 0.007f, 0f, 0f, 0f, 500, 0.018f, 0f, 0f, 0f, 0.181f, 0.310f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41; &#41;;
SpacestationSmallroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.5f, 0.700f, -1000, -300, -100, 1.72f, 0.82f, 0.55f, -200, 0.007f, 0f, 0f, 0f, 300, 0.013f, 0f, 0f, 0f, 0.188f, 0.260f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41; &#41;;</pre>
<pre>SpacestationAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 1.5f, 0.780f, -1000, -300, -100, 1.16f, 0.81f, 0.55f, 300, 0.007f, 0f, 0f, 0f, 000, 0.018f, 0f, 0f, 0f, 0.192f, 0.210f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41;;
SpacestationMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.5f, 0.750f, -1000, -400, -100, 3.01f, 0.50f, 0.55f, -800, 0.034f, 0f, 0f, 0f, 100, 0.035f, 0f, 0f, 0f, 0.209f, 0.310f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41;;
SpacestationShortpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.5f, 0.870f, -1000, -400, -100, 3.57f, 0.50f, 0.55f, 0, 0.012f, 0f, 0f, 0f, 100, 0.016f, 0f, 0f, 0f, 0.172f, 0.200f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41;;
SpacestationLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.820f, -1000, -400, -100, 4.62f, 0.62f, 0.55f, 0, 0.012f, 0f, 0f, 0f, 200, 0.031f, 0f, 0f, 0f, 0.250f, 0.230f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41;;
SpacestationLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.810f, -1000, -400, -100, 3.89f, 0.38f, 0.61f, -1000, 0.056f, 0f, 0f, 0f, -100, 0.035f, 0f, 0f, 0f, 0.233f, 0.280f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41;;
SpacestationHall = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.870f, -1000, -400, -100, 7.11f, 0.38f, 0.61f, -1500, 0.100f, 0f, 0f, 0f, -400, 0.047f, 0f, 0f, 0f, 0.250f, 0.250f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41;;
SpacestationCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 1.4f, 0.560f, -1000, -300, -100, 0.79f, 0.81f, 0.55f, 300, 0.007f, 0f, 0f, 0f, 500, 0.018f, 0f, 0f, 0f, 0.181f, 0.310f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41;;
SpacestationSmallroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.5f, 0.700f, -1000, -300, -100, 1.72f, 0.82f, 0.55f, -200, 0.007f, 0f, 0f, 0f, 300, 0.013f, 0f, 0f, 0f, 0.188f, 0.260f, 0.250f, 0f, -5f, 3316.1f, 458.2f, 0f, 0x20&#125; &#41;;</pre>
</div>
<!-- EDIT5 SECTION "Space Station" [6858-8755] -->
<!-- EDIT5 SECTION "Space Station" [6806-8687] -->
<h2><a>Wooden Hut or Ship</a></h2>
<div>
<pre>WoodenAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -1800, -1000, 1.22f, 0.62f, 0.91f, 100, 0.012f, 0f, 0f, 0f, -300, 0.024f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;
WoodenShortpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -1800, -1000, 1.75f, 0.50f, 0.87f, -100, 0.012f, 0f, 0f, 0f, -400, 0.024f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;
WoodenMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -2000, -1100, 1.47f, 0.42f, 0.82f, -100, 0.049f, 0f, 0f, 0f, -100, 0.029f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;
WoodenLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -2000, -1000, 1.99f, 0.40f, 0.79f, 000, 0.020f, 0f, 0f, 0f, -700, 0.036f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;
WoodenLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -2100, -1100, 2.65f, 0.33f, 0.82f, -100, 0.066f, 0f, 0f, 0f, -200, 0.049f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;
WoodenHall = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -2200, -1100, 3.45f, 0.30f, 0.82f, -100, 0.088f, 0f, 0f, 0f, -200, 0.063f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;
WoodenCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -1700, -1000, 0.56f, 0.46f, 0.91f, 100, 0.012f, 0f, 0f, 0f, 100, 0.028f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;
WoodenSmallroom = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -1900, -1000, 0.79f, 0.32f, 0.87f, 00, 0.032f, 0f, 0f, 0f, -100, 0.029f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;
WoodenCourtyard = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 0.650f, -1000, -2200, -1000, 1.79f, 0.35f, 0.79f, -500, 0.123f, 0f, 0f, 0f, -2000, 0.032f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41; &#41;;</pre>
<pre>WoodenAlcove = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -1800, -1000, 1.22f, 0.62f, 0.91f, 100, 0.012f, 0f, 0f, 0f, -300, 0.024f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;
WoodenShortpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -1800, -1000, 1.75f, 0.50f, 0.87f, -100, 0.012f, 0f, 0f, 0f, -400, 0.024f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;
WoodenMediumroom = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -2000, -1100, 1.47f, 0.42f, 0.82f, -100, 0.049f, 0f, 0f, 0f, -100, 0.029f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;
WoodenLongpassage = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -2000, -1000, 1.99f, 0.40f, 0.79f, 000, 0.020f, 0f, 0f, 0f, -700, 0.036f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;
WoodenLargeroom = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -2100, -1100, 2.65f, 0.33f, 0.82f, -100, 0.066f, 0f, 0f, 0f, -200, 0.049f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;
WoodenHall = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -2200, -1100, 3.45f, 0.30f, 0.82f, -100, 0.088f, 0f, 0f, 0f, -200, 0.063f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;
WoodenCupboard = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -1700, -1000, 0.56f, 0.46f, 0.91f, 100, 0.012f, 0f, 0f, 0f, 100, 0.028f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;
WoodenSmallroom = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 1f, -1000, -1900, -1000, 0.79f, 0.32f, 0.87f, 00, 0.032f, 0f, 0f, 0f, -100, 0.029f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;
WoodenCourtyard = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 0.650f, -1000, -2200, -1000, 1.79f, 0.35f, 0.79f, -500, 0.123f, 0f, 0f, 0f, -2000, 0.032f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 4705f, 99.6f, 0f, 0x3f&#125; &#41;;</pre>
</div>
<!-- EDIT6 SECTION "Wooden Hut or Ship" [8756-10801] -->
<!-- EDIT6 SECTION "Wooden Hut or Ship" [8688-10715] -->
<h2><a>Sport</a></h2>
<div>
<pre>SportEmptystadium = new Environment &#40; new float&#91;&#93;&#123; 26, 7.2f, 1f, -1000, -700, -200, 6.26f, 0.51f, 1.10f, -2400, 0.183f, 0f, 0f, 0f, -800, 0.038f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x20&#125; &#41; &#41;;
SportSquashcourt = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 0.750f, -1000, -1000, -200, 2.22f, 0.91f, 1.16f, -700, 0.007f, 0f, 0f, 0f, -200, 0.011f, 0f, 0f, 0f, 0.126f, 0.190f, 0.250f, 0f, -5f, 7176.9f, 211.2f, 0f, 0x20&#125; &#41; &#41;;
SportSmallswimmingpool = new Environment &#40; new float&#91;&#93;&#123; 26, 36.2f, 0.700f, -1000, -200, -100, 2.76f, 1.25f, 1.14f, -400, 0.020f, 0f, 0f, 0f, -200, 0.030f, 0f, 0f, 0f, 0.179f, 0.150f, 0.895f, 0.190f, -5f, 5000f, 250f, 0f, 0x0&#125; &#41; &#41;;
SportLargeswimmingpool = new Environment &#40; new float&#91;&#93;&#123; 26, 36.2f, 0.820f, -1000, -200, 0, 5.49f, 1.31f, 1.14f, -700, 0.039f, 0f, 0f, 0f, -600, 0.049f, 0f, 0f, 0f, 0.222f, 0.550f, 1.159f, 0.210f, -5f, 5000f, 250f, 0f, 0x0&#125; &#41; &#41;;
SportGymnasium = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 0.810f, -1000, -700, -100, 3.14f, 1.06f, 1.35f, -800, 0.029f, 0f, 0f, 0f, -500, 0.045f, 0f, 0f, 0f, 0.146f, 0.140f, 0.250f, 0f, -5f, 7176.9f, 211.2f, 0f, 0x20&#125; &#41; &#41;;
SportFullstadium = new Environment &#40; new float&#91;&#93;&#123; 26, 7.2f, 1f, -1000, -2300, -200, 5.25f, 0.17f, 0.80f, -2000, 0.188f, 0f, 0f, 0f, -1100, 0.038f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x20&#125; &#41; &#41;;</pre>
<pre>SportEmptystadium = new Environment &#40; new float&#91;&#93;&#123; 26, 7.2f, 1f, -1000, -700, -200, 6.26f, 0.51f, 1.10f, -2400, 0.183f, 0f, 0f, 0f, -800, 0.038f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x20&#125; &#41;;
SportSquashcourt = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 0.750f, -1000, -1000, -200, 2.22f, 0.91f, 1.16f, -700, 0.007f, 0f, 0f, 0f, -200, 0.011f, 0f, 0f, 0f, 0.126f, 0.190f, 0.250f, 0f, -5f, 7176.9f, 211.2f, 0f, 0x20&#125; &#41;;
SportSmallswimmingpool = new Environment &#40; new float&#91;&#93;&#123; 26, 36.2f, 0.700f, -1000, -200, -100, 2.76f, 1.25f, 1.14f, -400, 0.020f, 0f, 0f, 0f, -200, 0.030f, 0f, 0f, 0f, 0.179f, 0.150f, 0.895f, 0.190f, -5f, 5000f, 250f, 0f, 0x0&#125; &#41;;
SportLargeswimmingpool = new Environment &#40; new float&#91;&#93;&#123; 26, 36.2f, 0.820f, -1000, -200, 0, 5.49f, 1.31f, 1.14f, -700, 0.039f, 0f, 0f, 0f, -600, 0.049f, 0f, 0f, 0f, 0.222f, 0.550f, 1.159f, 0.210f, -5f, 5000f, 250f, 0f, 0x0&#125; &#41;;
SportGymnasium = new Environment &#40; new float&#91;&#93;&#123; 26, 7.5f, 0.810f, -1000, -700, -100, 3.14f, 1.06f, 1.35f, -800, 0.029f, 0f, 0f, 0f, -500, 0.045f, 0f, 0f, 0f, 0.146f, 0.140f, 0.250f, 0f, -5f, 7176.9f, 211.2f, 0f, 0x20&#125; &#41;;
SportFullstadium = new Environment &#40; new float&#91;&#93;&#123; 26, 7.2f, 1f, -1000, -2300, -200, 5.25f, 0.17f, 0.80f, -2000, 0.188f, 0f, 0f, 0f, -1100, 0.038f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x20&#125; &#41;;</pre>
</div>
<!-- EDIT7 SECTION "Sport" [10802-12203] -->
<!-- EDIT7 SECTION "Sport" [10716-12105] -->
<h2><a>Pipes</a></h2>
<div>
<pre>Sewerpipe = new Environment &#40; new float&#91;&#93;&#123; 21, 1.7f, 0.800f, -1000, -1000, 0, 2.81f, 0.14f, 1f, 429, 0.014f, 0f, 0f, 0f, 1023, 0.021f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
PipeSmall = new Environment &#40; new float&#91;&#93;&#123; 26, 50.3f, 1f, -1000, -900, -1300, 5.04f, 0.10f, 0.10f, -600, 0.032f, 0f, 0f, 0f, 800, 0.015f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x3f&#125; &#41; &#41;;
PipeLongthin = new Environment &#40; new float&#91;&#93;&#123; 26, 1.6f, 0.910f, -1000, -700, -1100, 9.21f, 0.18f, 0.10f, -300, 0.010f, 0f, 0f, 0f, -300, 0.022f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x0&#125; &#41; &#41;;
PipeLarge = new Environment &#40; new float&#91;&#93;&#123; 26, 50.3f, 1f, -1000, -900, -1300, 8.45f, 0.10f, 0.10f, -800, 0.046f, 0f, 0f, 0f, 400, 0.032f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x3f&#125; &#41; &#41;;
PipeResonant = new Environment &#40; new float&#91;&#93;&#123; 26, 1.3f, 0.910f, -1000, -700, -1100, 6.81f, 0.18f, 0.10f, -300, 0.010f, 0f, 0f, 0f, 00, 0.022f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x0&#125; &#41; &#41;;</pre>
<pre>Sewerpipe = new Environment &#40; new float&#91;&#93;&#123; 21, 1.7f, 0.800f, -1000, -1000, 0, 2.81f, 0.14f, 1f, 429, 0.014f, 0f, 0f, 0f, 1023, 0.021f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
PipeSmall = new Environment &#40; new float&#91;&#93;&#123; 26, 50.3f, 1f, -1000, -900, -1300, 5.04f, 0.10f, 0.10f, -600, 0.032f, 0f, 0f, 0f, 800, 0.015f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x3f&#125; &#41;;
PipeLongthin = new Environment &#40; new float&#91;&#93;&#123; 26, 1.6f, 0.910f, -1000, -700, -1100, 9.21f, 0.18f, 0.10f, -300, 0.010f, 0f, 0f, 0f, -300, 0.022f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x0&#125; &#41;;
PipeLarge = new Environment &#40; new float&#91;&#93;&#123; 26, 50.3f, 1f, -1000, -900, -1300, 8.45f, 0.10f, 0.10f, -800, 0.046f, 0f, 0f, 0f, 400, 0.032f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x3f&#125; &#41;;
PipeResonant = new Environment &#40; new float&#91;&#93;&#123; 26, 1.3f, 0.910f, -1000, -700, -1100, 6.81f, 0.18f, 0.10f, -300, 0.010f, 0f, 0f, 0f, 00, 0.022f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x0&#125; &#41;;</pre>
</div>
<!-- EDIT8 SECTION "Pipes" [12204-13294] -->
<!-- EDIT8 SECTION "Pipes" [12106-13186] -->
<h2><a>Moods</a></h2>
<div>
<pre>Heaven = new Environment &#40; new float&#91;&#93;&#123; 26, 19.6f, 0.940f, -1000, -200, -700, 5.04f, 1.12f, 0.56f, -1230, 0.020f, 0f, 0f, 0f, 200, 0.029f, 0f, 0f, 0f, 0.250f, 0.080f, 2.742f, 0.050f, -2f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Hell = new Environment &#40; new float&#91;&#93;&#123; 26, 100f, 0.570f, -1000, -900, -700, 3.57f, 0.49f, 2f, -10000, 0.020f, 0f, 0f, 0f, 300, 0.030f, 0f, 0f, 0f, 0.110f, 0.040f, 2.109f, 0.520f, -5f, 5000f, 139.5f, 0f, 0x40&#125; &#41; &#41;;
Memory = new Environment &#40; new float&#91;&#93;&#123; 26, 8f, 0.850f, -1000, -400, -900, 4.06f, 0.82f, 0.56f, -2800, 0f, 0f, 0f, 0f, 100, 0f, 0f, 0f, 0f, 0.250f, 0f, 0.474f, 0.450f, -10f, 5000f, 250f, 0f, 0x0&#125; &#41; &#41;;
Drugged = new Environment &#40; new float&#91;&#93;&#123; 23, 1.9f, 0.500f, -1000, 0, 0, 8.39f, 1.39f, 1f, -115, 0.002f, 0f, 0f, 0f, 985, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 1f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41; &#41;;
Dizzy = new Environment &#40; new float&#91;&#93;&#123; 24, 1.8f, 0.600f, -1000, -400, 0, 17.23f, 0.56f, 1f, -1713, 0.020f, 0f, 0f, 0f, -613, 0.030f, 0f, 0f, 0f, 0.250f, 1f, 0.810f, 0.310f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41; &#41;;
Psychotic = new Environment &#40; new float&#91;&#93;&#123; 25, 1f, 0.500f, -1000, -151, 0, 7.56f, 0.91f, 1f, -626, 0.020f, 0f, 0f, 0f, 774, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 4f, 1f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41; &#41;;</pre>
<pre>Heaven = new Environment &#40; new float&#91;&#93;&#123; 26, 19.6f, 0.940f, -1000, -200, -700, 5.04f, 1.12f, 0.56f, -1230, 0.020f, 0f, 0f, 0f, 200, 0.029f, 0f, 0f, 0f, 0.250f, 0.080f, 2.742f, 0.050f, -2f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Hell = new Environment &#40; new float&#91;&#93;&#123; 26, 100f, 0.570f, -1000, -900, -700, 3.57f, 0.49f, 2f, -10000, 0.020f, 0f, 0f, 0f, 300, 0.030f, 0f, 0f, 0f, 0.110f, 0.040f, 2.109f, 0.520f, -5f, 5000f, 139.5f, 0f, 0x40&#125; &#41;;
Memory = new Environment &#40; new float&#91;&#93;&#123; 26, 8f, 0.850f, -1000, -400, -900, 4.06f, 0.82f, 0.56f, -2800, 0f, 0f, 0f, 0f, 100, 0f, 0f, 0f, 0f, 0.250f, 0f, 0.474f, 0.450f, -10f, 5000f, 250f, 0f, 0x0&#125; &#41;;
Drugged = new Environment &#40; new float&#91;&#93;&#123; 23, 1.9f, 0.500f, -1000, 0, 0, 8.39f, 1.39f, 1f, -115, 0.002f, 0f, 0f, 0f, 985, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 1f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41;;
Dizzy = new Environment &#40; new float&#91;&#93;&#123; 24, 1.8f, 0.600f, -1000, -400, 0, 17.23f, 0.56f, 1f, -1713, 0.020f, 0f, 0f, 0f, -613, 0.030f, 0f, 0f, 0f, 0.250f, 1f, 0.810f, 0.310f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41;;
Psychotic = new Environment &#40; new float&#91;&#93;&#123; 25, 1f, 0.500f, -1000, -151, 0, 7.56f, 0.91f, 1f, -626, 0.020f, 0f, 0f, 0f, 774, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 4f, 1f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41;;</pre>
</div>
<!-- EDIT9 SECTION "Moods" [13295-14578] -->
<!-- EDIT9 SECTION "Moods" [13187-14458] -->
<h2><a>Car Racing</a></h2>
<div>
<pre>DrivingCommentator = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0f, 1000, -500, -600, 2.42f, 0.88f, 0.68f, -1400, 0.093f, 0f, 0f, 0f, -1200, 0.017f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -10f, 5000f, 250f, 0f, 0x20&#125; &#41; &#41;;
DrivingPitgarage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.590f, -1000, -300, -500, 1.72f, 0.93f, 0.87f, -500, 0f, 0f, 0f, 0f, 200, 0.016f, 0f, 0f, 0f, 0.250f, 0.110f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x0&#125; &#41; &#41;;
DrivingIncarRacer = new Environment &#40; new float&#91;&#93;&#123; 26, 1.1f, 0.800f, -1000, 0, -200, 0.17f, 2f, 0.41f, 500, 0.007f, 0f, 0f, 0f, -300, 0.015f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10268.2f, 251f, 0f, 0x20&#125; &#41; &#41;;
DrivingIncarSports = new Environment &#40; new float&#91;&#93;&#123; 26, 1.1f, 0.800f, -1000, -400, 0, 0.17f, 0.75f, 0.41f, 0, 0.010f, 0f, 0f, 0f, -500, 0f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10268.2f, 251f, 0f, 0x20&#125; &#41; &#41;;
DrivingIncarLuxury = new Environment &#40; new float&#91;&#93;&#123; 26, 1.6f, 1f, -1000, -2000, -600, 0.13f, 0.41f, 0.46f, -200, 0.010f, 0f, 0f, 0f, 400, 0.010f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10268.2f, 251f, 0f, 0x20&#125; &#41; &#41;;
DrivingFullgrandstand = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 1f, -1000, -1100, -400, 3.01f, 1.37f, 1.28f, -900, 0.090f, 0f, 0f, 0f, -1500, 0.049f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10420.2f, 250f, 0f, 0x1f&#125; &#41; &#41;;
DrivingEmptygrandstand = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 1f, -1000, 0, -200, 4.62f, 1.75f, 1.40f, -1363, 0.090f, 0f, 0f, 0f, -1200, 0.049f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10420.2f, 250f, 0f, 0x1f&#125; &#41; &#41;;
DrivingTunnel = new Environment &#40; new float&#91;&#93;&#123; 26, 3.1f, 0.810f, -1000, -800, -100, 3.42f, 0.94f, 1.31f, -300, 0.051f, 0f, 0f, 0f, -300, 0.047f, 0f, 0f, 0f, 0.214f, 0.050f, 0.250f, 0f, -5f, 5000f, 155.3f, 0f, 0x20&#125; &#41; &#41;;</pre>
<pre>DrivingCommentator = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0f, 1000, -500, -600, 2.42f, 0.88f, 0.68f, -1400, 0.093f, 0f, 0f, 0f, -1200, 0.017f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -10f, 5000f, 250f, 0f, 0x20&#125; &#41;;
DrivingPitgarage = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 0.590f, -1000, -300, -500, 1.72f, 0.93f, 0.87f, -500, 0f, 0f, 0f, 0f, 200, 0.016f, 0f, 0f, 0f, 0.250f, 0.110f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x0&#125; &#41;;
DrivingIncarRacer = new Environment &#40; new float&#91;&#93;&#123; 26, 1.1f, 0.800f, -1000, 0, -200, 0.17f, 2f, 0.41f, 500, 0.007f, 0f, 0f, 0f, -300, 0.015f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10268.2f, 251f, 0f, 0x20&#125; &#41;;
DrivingIncarSports = new Environment &#40; new float&#91;&#93;&#123; 26, 1.1f, 0.800f, -1000, -400, 0, 0.17f, 0.75f, 0.41f, 0, 0.010f, 0f, 0f, 0f, -500, 0f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10268.2f, 251f, 0f, 0x20&#125; &#41;;
DrivingIncarLuxury = new Environment &#40; new float&#91;&#93;&#123; 26, 1.6f, 1f, -1000, -2000, -600, 0.13f, 0.41f, 0.46f, -200, 0.010f, 0f, 0f, 0f, 400, 0.010f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10268.2f, 251f, 0f, 0x20&#125; &#41;;
DrivingFullgrandstand = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 1f, -1000, -1100, -400, 3.01f, 1.37f, 1.28f, -900, 0.090f, 0f, 0f, 0f, -1500, 0.049f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10420.2f, 250f, 0f, 0x1f&#125; &#41;;
DrivingEmptygrandstand = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 1f, -1000, 0, -200, 4.62f, 1.75f, 1.40f, -1363, 0.090f, 0f, 0f, 0f, -1200, 0.049f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 10420.2f, 250f, 0f, 0x1f&#125; &#41;;
DrivingTunnel = new Environment &#40; new float&#91;&#93;&#123; 26, 3.1f, 0.810f, -1000, -800, -100, 3.42f, 0.94f, 1.31f, -300, 0.051f, 0f, 0f, 0f, -300, 0.047f, 0f, 0f, 0f, 0.214f, 0.050f, 0.250f, 0f, -5f, 5000f, 155.3f, 0f, 0x20&#125; &#41;;</pre>
</div>
<!-- EDIT10 SECTION "Car Racing" [14579-16389] -->
<!-- EDIT10 SECTION "Car Racing" [14459-16253] -->
<h2><a>City</a></h2>
<div>
<pre>CityIndoors = new Environment &#40; new float&#91;&#93;&#123; 16, 7.5f, 0.500f, -1000, -800, 0, 1.49f, 0.67f, 1f, -2273, 0.007f, 0f, 0f, 0f, -1691, 0.011f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
CityStreets = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0.780f, -1000, -300, -100, 1.79f, 1.12f, 0.91f, -1100, 0.046f, 0f, 0f, 0f, -1400, 0.028f, 0f, 0f, 0f, 0.250f, 0.200f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x20&#125; &#41; &#41;;
CitySubway = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0.740f, -1000, -300, -100, 3.01f, 1.23f, 0.91f, -300, 0.046f, 0f, 0f, 0f, 200, 0.028f, 0f, 0f, 0f, 0.125f, 0.210f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x20&#125; &#41; &#41;;
CityMuseum = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.820f, -1000, -1500, -1500, 3.28f, 1.40f, 0.57f, -1200, 0.039f, 0f, 0f, -0f, -100, 0.034f, 0f, 0f, 0f, 0.130f, 0.170f, 0.250f, 0f, -5f, 2854.4f, 107.5f, 0f, 0x0&#125; &#41; &#41;;
CityLibrary = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.820f, -1000, -1100, -2100, 2.76f, 0.89f, 0.41f, -900, 0.029f, 0f, 0f, -0f, -100, 0.020f, 0f, 0f, 0f, 0.130f, 0.170f, 0.250f, 0f, -5f, 2854.4f, 107.5f, 0f, 0x0&#125; &#41; &#41;;
CityUnderpass = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0.820f, -1000, -700, -100, 3.57f, 1.12f, 0.91f, -800, 0.059f, 0f, 0f, 0f, -100, 0.037f, 0f, 0f, 0f, 0.250f, 0.140f, 0.250f, 0f, -7f, 5000f, 250f, 0f, 0x20&#125; &#41; &#41;;
CityAbandoned = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0.690f, -1000, -200, -100, 3.28f, 1.17f, 0.91f, -700, 0.044f, 0f, 0f, 0f, -1100, 0.024f, 0f, 0f, 0f, 0.250f, 0.200f, 0.250f, 0f, -3f, 5000f, 250f, 0f, 0x20&#125; &#41; &#41;;</pre>
<pre>CityIndoors = new Environment &#40; new float&#91;&#93;&#123; 16, 7.5f, 0.500f, -1000, -800, 0, 1.49f, 0.67f, 1f, -2273, 0.007f, 0f, 0f, 0f, -1691, 0.011f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
CityStreets = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0.780f, -1000, -300, -100, 1.79f, 1.12f, 0.91f, -1100, 0.046f, 0f, 0f, 0f, -1400, 0.028f, 0f, 0f, 0f, 0.250f, 0.200f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x20&#125; &#41;;
CitySubway = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0.740f, -1000, -300, -100, 3.01f, 1.23f, 0.91f, -300, 0.046f, 0f, 0f, 0f, 200, 0.028f, 0f, 0f, 0f, 0.125f, 0.210f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x20&#125; &#41;;
CityMuseum = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.820f, -1000, -1500, -1500, 3.28f, 1.40f, 0.57f, -1200, 0.039f, 0f, 0f, -0f, -100, 0.034f, 0f, 0f, 0f, 0.130f, 0.170f, 0.250f, 0f, -5f, 2854.4f, 107.5f, 0f, 0x0&#125; &#41;;
CityLibrary = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.820f, -1000, -1100, -2100, 2.76f, 0.89f, 0.41f, -900, 0.029f, 0f, 0f, -0f, -100, 0.020f, 0f, 0f, 0f, 0.130f, 0.170f, 0.250f, 0f, -5f, 2854.4f, 107.5f, 0f, 0x0&#125; &#41;;
CityUnderpass = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0.820f, -1000, -700, -100, 3.57f, 1.12f, 0.91f, -800, 0.059f, 0f, 0f, 0f, -100, 0.037f, 0f, 0f, 0f, 0.250f, 0.140f, 0.250f, 0f, -7f, 5000f, 250f, 0f, 0x20&#125; &#41;;
CityAbandoned = new Environment &#40; new float&#91;&#93;&#123; 26, 3f, 0.690f, -1000, -200, -100, 3.28f, 1.17f, 0.91f, -700, 0.044f, 0f, 0f, 0f, -1100, 0.024f, 0f, 0f, 0f, 0.250f, 0.200f, 0.250f, 0f, -3f, 5000f, 250f, 0f, 0x20&#125; &#41;;</pre>
</div>
<!-- EDIT11 SECTION "City" [16390-17951] -->
<!-- EDIT11 SECTION "City" [16254-17801] -->
<h2><a>Small Indoor Rooms</a></h2>
<div>
<pre>Room = new Environment &#40; new float&#91;&#93;&#123; 2, 1.9f, 1f, -1000, -454, 0, 0.40f, 0.83f, 1f, -1646, 0.002f, 0f, 0f, 0f, 53, 0.003f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Bathroom = new Environment &#40; new float&#91;&#93;&#123; 3, 1.4f, 1f, -1000, -1200, 0, 1.49f, 0.54f, 1f, -370, 0.007f, 0f, 0f, 0f, 1030, 0.011f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Livingroom = new Environment &#40; new float&#91;&#93;&#123; 4, 2.5f, 1f, -1000, -6000, 0, 0.50f, 0.10f, 1f, -1376, 0.003f, 0f, 0f, 0f, -1104, 0.004f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Paddedcell = new Environment &#40; new float&#91;&#93;&#123; 1, 1.4f, 1f, -1000, -6000, 0, 0.17f, 0.10f, 1f, -1204, 0.001f, 0f, 0f, 0f, 207, 0.002f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Stoneroom = new Environment &#40; new float&#91;&#93;&#123; 5, 11.6f, 1f, -1000, -300, 0, 2.31f, 0.64f, 1f, -711, 0.012f, 0f, 0f, 0f, 83, 0.017f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;</pre>
<pre>Room = new Environment &#40; new float&#91;&#93;&#123; 2, 1.9f, 1f, -1000, -454, 0, 0.40f, 0.83f, 1f, -1646, 0.002f, 0f, 0f, 0f, 53, 0.003f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Bathroom = new Environment &#40; new float&#91;&#93;&#123; 3, 1.4f, 1f, -1000, -1200, 0, 1.49f, 0.54f, 1f, -370, 0.007f, 0f, 0f, 0f, 1030, 0.011f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Livingroom = new Environment &#40; new float&#91;&#93;&#123; 4, 2.5f, 1f, -1000, -6000, 0, 0.50f, 0.10f, 1f, -1376, 0.003f, 0f, 0f, 0f, -1104, 0.004f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Paddedcell = new Environment &#40; new float&#91;&#93;&#123; 1, 1.4f, 1f, -1000, -6000, 0, 0.17f, 0.10f, 1f, -1204, 0.001f, 0f, 0f, 0f, 207, 0.002f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Stoneroom = new Environment &#40; new float&#91;&#93;&#123; 5, 11.6f, 1f, -1000, -300, 0, 2.31f, 0.64f, 1f, -711, 0.012f, 0f, 0f, 0f, 83, 0.017f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;</pre>
</div>
<!-- EDIT12 SECTION "Small Indoor Rooms" [17952-19013] -->
<!-- EDIT12 SECTION "Small Indoor Rooms" [17802-18853] -->
<h2><a>Medium-Sized Indoor Rooms</a></h2>
<div>
<pre>Workshop = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 1f, -1000, -1700, -800, 0.76f, 1f, 1f, 0, 0.012f, 0f, 0f, 0f, 100, 0.012f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x0&#125; &#41; &#41;;
Schoolroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.86f, 0.690f, -1000, -400, -600, 0.98f, 0.45f, 0.18f, 300, 0.017f, 0f, 0f, 0f, 300, 0.015f, 0f, 0f, 0f, 0.095f, 0.140f, 0.250f, 0f, -5f, 7176.9f, 211.2f, 0f, 0x20&#125; &#41; &#41;;
Practiseroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.86f, 0.870f, -1000, -800, -600, 1.12f, 0.56f, 0.18f, 200, 0.010f, 0f, 0f, 0f, 300, 0.011f, 0f, 0f, 0f, 0.095f, 0.140f, 0.250f, 0f, -5f, 7176.9f, 211.2f, 0f, 0x20&#125; &#41; &#41;;
Outhouse = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.820f, -1000, -1900, -1600, 1.38f, 0.38f, 0.35f, -100, 0.024f, 0f, 0f, -0f, -400, 0.044f, 0f, 0f, 0f, 0.121f, 0.170f, 0.250f, 0f, -5f, 2854.4f, 107.5f, 0f, 0x0&#125; &#41; &#41;;
Caravan = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 1f, -1000, -2100, -1800, 0.43f, 1.50f, 1f, 0, 0.012f, 0f, 0f, 0f, 600, 0.012f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41; &#41;;
Dustyroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.560f, -1000, -200, -300, 1.79f, 0.38f, 0.21f, -600, 0.002f, 0f, 0f, 0f, 200, 0.006f, 0f, 0f, 0f, 0.202f, 0.050f, 0.250f, 0f, -10f, 13046f, 163.3f, 0f, 0x20&#125; &#41; &#41;;
Chapel = new Environment &#40; new float&#91;&#93;&#123; 26, 19.6f, 0.840f, -1000, -500, 0, 4.62f, 0.64f, 1.23f, -700, 0.032f, 0f, 0f, 0f, -200, 0.049f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0.110f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;</pre>
<pre>Workshop = new Environment &#40; new float&#91;&#93;&#123; 26, 1.9f, 1f, -1000, -1700, -800, 0.76f, 1f, 1f, 0, 0.012f, 0f, 0f, 0f, 100, 0.012f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x0&#125; &#41;;
Schoolroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.86f, 0.690f, -1000, -400, -600, 0.98f, 0.45f, 0.18f, 300, 0.017f, 0f, 0f, 0f, 300, 0.015f, 0f, 0f, 0f, 0.095f, 0.140f, 0.250f, 0f, -5f, 7176.9f, 211.2f, 0f, 0x20&#125; &#41;;
Practiseroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.86f, 0.870f, -1000, -800, -600, 1.12f, 0.56f, 0.18f, 200, 0.010f, 0f, 0f, 0f, 300, 0.011f, 0f, 0f, 0f, 0.095f, 0.140f, 0.250f, 0f, -5f, 7176.9f, 211.2f, 0f, 0x20&#125; &#41;;
Outhouse = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.820f, -1000, -1900, -1600, 1.38f, 0.38f, 0.35f, -100, 0.024f, 0f, 0f, -0f, -400, 0.044f, 0f, 0f, 0f, 0.121f, 0.170f, 0.250f, 0f, -5f, 2854.4f, 107.5f, 0f, 0x0&#125; &#41;;
Caravan = new Environment &#40; new float&#91;&#93;&#123; 26, 8.3f, 1f, -1000, -2100, -1800, 0.43f, 1.50f, 1f, 0, 0.012f, 0f, 0f, 0f, 600, 0.012f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41;;
Dustyroom = new Environment &#40; new float&#91;&#93;&#123; 26, 1.8f, 0.560f, -1000, -200, -300, 1.79f, 0.38f, 0.21f, -600, 0.002f, 0f, 0f, 0f, 200, 0.006f, 0f, 0f, 0f, 0.202f, 0.050f, 0.250f, 0f, -10f, 13046f, 163.3f, 0f, 0x20&#125; &#41;;
Chapel = new Environment &#40; new float&#91;&#93;&#123; 26, 19.6f, 0.840f, -1000, -500, 0, 4.62f, 0.64f, 1.23f, -700, 0.032f, 0f, 0f, 0f, -200, 0.049f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0.110f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;</pre>
</div>
<!-- EDIT13 SECTION "Medium-Sized Indoor Rooms" [19014-20574] -->
<!-- EDIT13 SECTION "Medium-Sized Indoor Rooms" [18854-20400] -->
<h2><a>Large Indoor Rooms</a></h2>
<div>
<pre>Auditorium = new Environment &#40; new float&#91;&#93;&#123; 6, 21.6f, 1f, -1000, -476, 0, 4.32f, 0.59f, 1f, -789, 0.020f, 0f, 0f, 0f, -289, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Concerthall = new Environment &#40; new float&#91;&#93;&#123; 7, 19.6f, 1f, -1000, -500, 0, 3.92f, 0.70f, 1f, -1230, 0.020f, 0f, 0f, 0f, -02, 0.029f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Cave = new Environment &#40; new float&#91;&#93;&#123; 8, 14.6f, 1f, -1000, 0, 0, 2.91f, 1.30f, 1f, -602, 0.015f, 0f, 0f, 0f, -302, 0.022f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41; &#41;;
Arena = new Environment &#40; new float&#91;&#93;&#123; 9, 36.2f, 1f, -1000, -698, 0, 7.24f, 0.33f, 1f, -1166, 0.020f, 0f, 0f, 0f, 16, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Hangar = new Environment &#40; new float&#91;&#93;&#123; 10, 50.3f, 1f, -1000, -1000, 0, 10.05f, 0.23f, 1f, -602, 0.020f, 0f, 0f, 0f, 198, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
DomeTomb = new Environment &#40; new float&#91;&#93;&#123; 26, 51.8f, 0.790f, -1000, -900, -1300, 4.18f, 0.21f, 0.10f, -825, 0.030f, 0f, 0f, 0f, 450, 0.022f, 0f, 0f, 0f, 0.177f, 0.190f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x0&#125; &#41; &#41;;
DomeSaintPauls = new Environment &#40; new float&#91;&#93;&#123; 26, 50.3f, 0.870f, -1000, -900, -1300, 10.48f, 0.19f, 0.10f, -1500, 0.090f, 0f, 0f, 0f, 200, 0.042f, 0f, 0f, 0f, 0.250f, 0.120f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x3f&#125; &#41; &#41;;</pre>
<pre>Auditorium = new Environment &#40; new float&#91;&#93;&#123; 6, 21.6f, 1f, -1000, -476, 0, 4.32f, 0.59f, 1f, -789, 0.020f, 0f, 0f, 0f, -289, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Concerthall = new Environment &#40; new float&#91;&#93;&#123; 7, 19.6f, 1f, -1000, -500, 0, 3.92f, 0.70f, 1f, -1230, 0.020f, 0f, 0f, 0f, -02, 0.029f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Cave = new Environment &#40; new float&#91;&#93;&#123; 8, 14.6f, 1f, -1000, 0, 0, 2.91f, 1.30f, 1f, -602, 0.015f, 0f, 0f, 0f, -302, 0.022f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41;;
Arena = new Environment &#40; new float&#91;&#93;&#123; 9, 36.2f, 1f, -1000, -698, 0, 7.24f, 0.33f, 1f, -1166, 0.020f, 0f, 0f, 0f, 16, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Hangar = new Environment &#40; new float&#91;&#93;&#123; 10, 50.3f, 1f, -1000, -1000, 0, 10.05f, 0.23f, 1f, -602, 0.020f, 0f, 0f, 0f, 198, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
DomeTomb = new Environment &#40; new float&#91;&#93;&#123; 26, 51.8f, 0.790f, -1000, -900, -1300, 4.18f, 0.21f, 0.10f, -825, 0.030f, 0f, 0f, 0f, 450, 0.022f, 0f, 0f, 0f, 0.177f, 0.190f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x0&#125; &#41;;
DomeSaintPauls = new Environment &#40; new float&#91;&#93;&#123; 26, 50.3f, 0.870f, -1000, -900, -1300, 10.48f, 0.19f, 0.10f, -1500, 0.090f, 0f, 0f, 0f, 200, 0.042f, 0f, 0f, 0f, 0.250f, 0.120f, 0.250f, 0f, -5f, 2854.4f, 20f, 0f, 0x3f&#125; &#41;;</pre>
</div>
<!-- EDIT14 SECTION "Large Indoor Rooms" [20575-22089] -->
<!-- EDIT14 SECTION "Large Indoor Rooms" [20401-21901] -->
<h2><a>Hallways, Alleys</a></h2>
<div>
<pre>Carpettedhallway = new Environment &#40; new float&#91;&#93;&#123; 11, 1.9f, 1f, -1000, -4000, 0, 0.30f, 0.10f, 1f, -1831, 0.002f, 0f, 0f, 0f, -1630, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Hallway = new Environment &#40; new float&#91;&#93;&#123; 12, 1.8f, 1f, -1000, -300, 0, 1.49f, 0.59f, 1f, -1219, 0.007f, 0f, 0f, 0f, 441, 0.011f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Stonecorridor = new Environment &#40; new float&#91;&#93;&#123; 13, 13.5f, 1f, -1000, -237, 0, 2.70f, 0.79f, 1f, -1214, 0.013f, 0f, 0f, 0f, 395, 0.020f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Alley = new Environment &#40; new float&#91;&#93;&#123; 14, 7.5f, 0.300f, -1000, -270, 0, 1.49f, 0.86f, 1f, -1204, 0.007f, 0f, 0f, 0f, -4, 0.011f, 0f, 0f, 0f, 0.125f, 0.950f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;</pre>
<pre>Carpettedhallway = new Environment &#40; new float&#91;&#93;&#123; 11, 1.9f, 1f, -1000, -4000, 0, 0.30f, 0.10f, 1f, -1831, 0.002f, 0f, 0f, 0f, -1630, 0.030f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Hallway = new Environment &#40; new float&#91;&#93;&#123; 12, 1.8f, 1f, -1000, -300, 0, 1.49f, 0.59f, 1f, -1219, 0.007f, 0f, 0f, 0f, 441, 0.011f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Stonecorridor = new Environment &#40; new float&#91;&#93;&#123; 13, 13.5f, 1f, -1000, -237, 0, 2.70f, 0.79f, 1f, -1214, 0.013f, 0f, 0f, 0f, 395, 0.020f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Alley = new Environment &#40; new float&#91;&#93;&#123; 14, 7.5f, 0.300f, -1000, -270, 0, 1.49f, 0.86f, 1f, -1204, 0.007f, 0f, 0f, 0f, -4, 0.011f, 0f, 0f, 0f, 0.125f, 0.950f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;</pre>
</div>
<!-- EDIT15 SECTION "Hallways, Alleys" [22090-22975] -->
<!-- EDIT15 SECTION "Hallways, Alleys" [21902-22779] -->
<h2><a>Outdoors</a></h2>
<div>
<pre>Backyard = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.450f, -1000, -1200, -600, 1.12f, 0.34f, 0.46f, -700, 0.069f, 0f, 0f, -0f, -300, 0.023f, 0f, 0f, 0f, 0.218f, 0.340f, 0.250f, 0f, -5f, 4399.1f, 242.9f, 0f, 0x0&#125; &#41; &#41;;
Plain = new Environment &#40; new float&#91;&#93;&#123; 19, 42.5f, 0.210f, -1000, -2000, 0, 1.49f, 0.50f, 1f, -2466, 0.179f, 0f, 0f, 0f, -1926, 0.100f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Rollingplains = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0f, -1000, -3900, -400, 2.13f, 0.21f, 0.46f, -1500, 0.300f, 0f, 0f, -0f, -700, 0.019f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -5f, 4399.1f, 242.9f, 0f, 0x0&#125; &#41; &#41;;
Deepcanyon = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.740f, -1000, -1500, -400, 3.89f, 0.21f, 0.46f, -1000, 0.223f, 0f, 0f, -0f, -900, 0.019f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -5f, 4399.1f, 242.9f, 0f, 0x0&#125; &#41; &#41;;
Creek = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.350f, -1000, -1500, -600, 2.13f, 0.21f, 0.46f, -800, 0.115f, 0f, 0f, -0f, -1400, 0.031f, 0f, 0f, 0f, 0.218f, 0.340f, 0.250f, 0f, -5f, 4399.1f, 242.9f, 0f, 0x0&#125; &#41; &#41;;
Valley = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.280f, -1000, -3100, -1600, 2.88f, 0.26f, 0.35f, -1700, 0.263f, 0f, 0f, -0f, -800, 0.100f, 0f, 0f, 0f, 0.250f, 0.340f, 0.250f, 0f, -5f, 2854.4f, 107.5f, 0f, 0x0&#125; &#41; &#41;;
Forest = new Environment &#40; new float&#91;&#93;&#123; 15, 38f, 0.300f, -1000, -3300, 0, 1.49f, 0.54f, 1f, -2560, 0.162f, 0f, 0f, 0f, -229, 0.088f, 0f, 0f, 0f, 0.125f, 1f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Mountains = new Environment &#40; new float&#91;&#93;&#123; 17, 100f, 0.270f, -1000, -2500, 0, 1.49f, 0.21f, 1f, -2780, 0.300f, 0f, 0f, 0f, -1434, 0.100f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41; &#41;;
Quarry = new Environment &#40; new float&#91;&#93;&#123; 18, 17.5f, 1f, -1000, -1000, 0, 1.49f, 0.83f, 1f, -10000, 0.061f, 0f, 0f, 0f, 500, 0.025f, 0f, 0f, 0f, 0.125f, 0.700f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Parkinglot = new Environment &#40; new float&#91;&#93;&#123; 20, 8.3f, 1f, -1000, 0, 0, 1.65f, 1.50f, 1f, -1363, 0.008f, 0f, 0f, 0f, -1153, 0.012f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41; &#41;;</pre>
<pre>Backyard = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.450f, -1000, -1200, -600, 1.12f, 0.34f, 0.46f, -700, 0.069f, 0f, 0f, -0f, -300, 0.023f, 0f, 0f, 0f, 0.218f, 0.340f, 0.250f, 0f, -5f, 4399.1f, 242.9f, 0f, 0x0&#125; &#41;;
Plain = new Environment &#40; new float&#91;&#93;&#123; 19, 42.5f, 0.210f, -1000, -2000, 0, 1.49f, 0.50f, 1f, -2466, 0.179f, 0f, 0f, 0f, -1926, 0.100f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Rollingplains = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0f, -1000, -3900, -400, 2.13f, 0.21f, 0.46f, -1500, 0.300f, 0f, 0f, -0f, -700, 0.019f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -5f, 4399.1f, 242.9f, 0f, 0x0&#125; &#41;;
Deepcanyon = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.740f, -1000, -1500, -400, 3.89f, 0.21f, 0.46f, -1000, 0.223f, 0f, 0f, -0f, -900, 0.019f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -5f, 4399.1f, 242.9f, 0f, 0x0&#125; &#41;;
Creek = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.350f, -1000, -1500, -600, 2.13f, 0.21f, 0.46f, -800, 0.115f, 0f, 0f, -0f, -1400, 0.031f, 0f, 0f, 0f, 0.218f, 0.340f, 0.250f, 0f, -5f, 4399.1f, 242.9f, 0f, 0x0&#125; &#41;;
Valley = new Environment &#40; new float&#91;&#93;&#123; 26, 80.3f, 0.280f, -1000, -3100, -1600, 2.88f, 0.26f, 0.35f, -1700, 0.263f, 0f, 0f, -0f, -800, 0.100f, 0f, 0f, 0f, 0.250f, 0.340f, 0.250f, 0f, -5f, 2854.4f, 107.5f, 0f, 0x0&#125; &#41;;
Forest = new Environment &#40; new float&#91;&#93;&#123; 15, 38f, 0.300f, -1000, -3300, 0, 1.49f, 0.54f, 1f, -2560, 0.162f, 0f, 0f, 0f, -229, 0.088f, 0f, 0f, 0f, 0.125f, 1f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Mountains = new Environment &#40; new float&#91;&#93;&#123; 17, 100f, 0.270f, -1000, -2500, 0, 1.49f, 0.21f, 1f, -2780, 0.300f, 0f, 0f, 0f, -1434, 0.100f, 0f, 0f, 0f, 0.250f, 1f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41;;
Quarry = new Environment &#40; new float&#91;&#93;&#123; 18, 17.5f, 1f, -1000, -1000, 0, 1.49f, 0.83f, 1f, -10000, 0.061f, 0f, 0f, 0f, 500, 0.025f, 0f, 0f, 0f, 0.125f, 0.700f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Parkinglot = new Environment &#40; new float&#91;&#93;&#123; 20, 8.3f, 1f, -1000, 0, 0, 1.65f, 1.50f, 1f, -1363, 0.008f, 0f, 0f, 0f, -1153, 0.012f, 0f, 0f, 0f, 0.250f, 0f, 0.250f, 0f, -5f, 5000f, 250f, 0f, 0x1f&#125; &#41;;</pre>
</div>
<!-- EDIT16 SECTION "Outdoors" [22976-25173] -->
<!-- EDIT16 SECTION "Outdoors" [22780-24957] -->
<h2><a>Water</a></h2>
<div>
<pre>Underwater = new Environment &#40; new float&#91;&#93;&#123; 22, 1.8f, 1f, -1000, -4000, 0, 1.49f, 0.10f, 1f, -449, 0.007f, 0f, 0f, 0f, 1700, 0.011f, 0f, 0f, 0f, 0.250f, 0f, 1.180f, 0.348f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41; &#41;;
Smallwaterroom = new Environment &#40; new float&#91;&#93;&#123; 26, 36.2f, 0.700f, -1000, -698, 0, 1.51f, 1.25f, 1.14f, -100, 0.020f, 0f, 0f, 0f, 300, 0.030f, 0f, 0f, 0f, 0.179f, 0.150f, 0.895f, 0.190f, -7f, 5000f, 250f, 0f, 0x0&#125; &#41; &#41;;</pre>
<pre>Underwater = new Environment &#40; new float&#91;&#93;&#123; 22, 1.8f, 1f, -1000, -4000, 0, 1.49f, 0.10f, 1f, -449, 0.007f, 0f, 0f, 0f, 1700, 0.011f, 0f, 0f, 0f, 0.250f, 0f, 1.180f, 0.348f, -5f, 5000f, 250f, 0f, 0x3f&#125; &#41;;
Smallwaterroom = new Environment &#40; new float&#91;&#93;&#123; 26, 36.2f, 0.700f, -1000, -698, 0, 1.51f, 1.25f, 1.14f, -100, 0.020f, 0f, 0f, 0f, 300, 0.030f, 0f, 0f, 0f, 0.179f, 0.150f, 0.895f, 0.190f, -7f, 5000f, 250f, 0f, 0x0&#125; &#41;;</pre>
</div>
<!-- EDIT17 SECTION "Water" [25174-] -->
<!-- EDIT17 SECTION "Water" [24958-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:audio_environment_presets?do=export_xhtmlbody">view online version</a></em></p>

@ -64,7 +64,7 @@ The camera object is created with the following defaults:
<td>cam.resize(width, height, fixAspect)</td><td>Resize an existing camera object while keeping all other settings. Set fixAspect to true to adjust the aspect ratio (?)</td>
</tr>
<tr>
<td>cam.setFrustum( near, far, left, right, top, bottom )</td><td>The frustum is defined by the near/far plane, left/rught plane, top/bottom plane (all distances as float values)</td>
<td>cam.setFrustum( near, far, left, right, top, bottom )</td><td>The frustum is defined by the near/far plane, left/right plane, top/bottom plane (all distances as float values)</td>
</tr>
<tr>
<td>cam.setFrustumPerspective( fovY, aspect ratio, near, far)</td><td>The frustum is defined by view angle along the Y axis (in degrees), aspect ratio, and the near/far plane.</td>

@ -28,7 +28,7 @@ feature to record high-quality game trailers!
<p>
First off, if all you need is to record video at 30fps with no sound, then look
no further then jMonkeyEngine3&#039;s built in <code>VideoRecorderAppState</code>
no further than jMonkeyEngine 3&#039;s built in <code>VideoRecorderAppState</code>
class.
</p>
@ -50,7 +50,7 @@ That&#039;s all!
</p>
</div>
<!-- EDIT2 SECTION "Simple Way" [631-1314] -->
<!-- EDIT2 SECTION "Simple Way" [631-1315] -->
<h2><a>Advanced Way</a></h2>
<div>
@ -153,7 +153,7 @@ a file.
</p>
</div>
<!-- EDIT3 SECTION "Advanced Way" [1315-4507] -->
<!-- EDIT3 SECTION "Advanced Way" [1316-4508] -->
<h3><a>Basic Example</a></h3>
<div>
@ -201,7 +201,7 @@ public class Basic &#123;
&#125;</pre>
</div>
<!-- EDIT4 SECTION "Basic Example" [4508-5640] -->
<!-- EDIT4 SECTION "Basic Example" [4509-5641] -->
<h3><a>How it works</a></h3>
<div>
@ -242,7 +242,7 @@ would be useless.
</p>
</div>
<!-- EDIT5 SECTION "How it works" [5641-7279] -->
<!-- EDIT5 SECTION "How it works" [5642-7280] -->
<h3><a>Advanced Example</a></h3>
<div>
@ -596,7 +596,7 @@ The <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param
</p>
</div>
<!-- EDIT6 SECTION "Advanced Example" [7280-17183] -->
<!-- EDIT6 SECTION "Advanced Example" [7281-17184] -->
<h3><a>Using Advanced features to Record from more than one perspective at once</a></h3>
<div>
@ -617,7 +617,7 @@ The <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param
</p>
</div>
<!-- EDIT7 SECTION "Using Advanced features to Record from more than one perspective at once" [17184-17325] -->
<!-- EDIT7 SECTION "Using Advanced features to Record from more than one perspective at once" [17185-17326] -->
<h2><a>More Information</a></h2>
<div>
@ -649,5 +649,5 @@ listeners can be found here.
</p>
</div>
<!-- EDIT8 SECTION "More Information" [17326-] -->
<!-- EDIT8 SECTION "More Information" [17327-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:capture_audio_video_to_a_file?do=export_xhtmlbody">view online version</a></em></p>

@ -52,7 +52,7 @@ To implement game logic for a type of spatial, you will either extend AbstractCo
Use <span><a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Controls</a></span> to implement the <em>behaviour of types of game entities</em>.
</p>
<ul>
<li><div> Use Controls add a type of behaviour (that is, methods and fields) to individual Spatials. </div>
<li><div> Use Controls to add a type of behaviour (that is, methods and fields) to individual Spatials. </div>
</li>
<li><div> Each Control has its own <code>update()</code> loop that hooks into <code>simpleUpdate()</code>. Use Controls to move blocks of code out of the <code>simpleUpdate()</code> loop.</div>
</li>
@ -91,7 +91,7 @@ The possibilities are endless. <img src="/wiki/lib/images/smileys/icon_smile.gif
</p>
</div>
<!-- EDIT2 SECTION "Usage" [1748-3212] -->
<!-- EDIT2 SECTION "Usage" [1748-3215] -->
<h2><a>Example Code</a></h2>
<div>
@ -115,7 +115,7 @@ Existing examples in the code base include:
</ul>
</div>
<!-- EDIT3 SECTION "Example Code" [3213-4497] -->
<!-- EDIT3 SECTION "Example Code" [3216-4500] -->
<h2><a>AbstractControl Class</a></h2>
<div>
@ -214,7 +214,7 @@ See also:
</ul>
</div>
<!-- EDIT4 SECTION "AbstractControl Class" [4498-7443] -->
<!-- EDIT4 SECTION "AbstractControl Class" [4501-7446] -->
<h2><a>The Control Interface</a></h2>
<div>
@ -321,7 +321,7 @@ Usage example:
&#125;</pre>
</div>
<!-- EDIT5 SECTION "The Control Interface" [7444-10695] -->
<!-- EDIT5 SECTION "The Control Interface" [7447-10698] -->
<h2><a>Best Practices</a></h2>
<div>
@ -387,5 +387,5 @@ vehicleSpatial.addControl&#40;new ManualVehicleControl&#40;&#41;&#41;;
c.steerX&#40;steerX&#41;;</pre>
</div>
<!-- EDIT6 SECTION "Best Practices" [10696-] -->
<!-- EDIT6 SECTION "Best Practices" [10699-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:custom_controls?do=export_xhtmlbody">view online version</a></em></p>

@ -284,7 +284,7 @@ In case that your use case requires the backfaces to be visible, you have two op
</p>
<ul>
<li><div> If you have a very simple scene, you can just deactivate backface culling for this one mesh&#039;s material. <br/>
<code>mat.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off));</code></div>
<code>mat.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off);</code></div>
</li>
<li><div> The recommended solution is to specify each triangle twice, the second time with the opposite order of vertices. The second, reversed triangle makes up the backface. <br/>
<code>int[] indexes = { 2,0,1, 1,3,2, 2,3,1, 1,0,2 }; </code></div>

@ -339,6 +339,15 @@ The file <code>assets/Models/Tree/Leaves.j3m</code> contains:
<p>
The <acronym title="Portable Network Graphics">PNG</acronym> file is in the same directory, <code>assets/Models/Tree/…</code>
</p>
</div>
<!-- EDIT14 SECTION "Example 3: Transparent" [8811-9444] -->
<h2><a>Related Links</a></h2>
<div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/material_specification.html">Developer specification of the jME3 material system (.j3md,.j3m)</a></div>
</li>
</ul>
<div><span>
<a href="/wiki/doku.php/tag:material?do=showtag&amp;tag=tag%3Amaterial">material</a>,
<a href="/wiki/doku.php/tag:texture?do=showtag&amp;tag=tag%3Atexture">texture</a>,
@ -349,5 +358,5 @@ The <acronym title="Portable Network Graphics">PNG</acronym> file is in the same
</span></div>
</div>
<!-- EDIT14 SECTION "Example 3: Transparent" [8811-] -->
<!-- EDIT15 SECTION "Related Links" [9445-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:j3m_material_files?do=export_xhtmlbody">view online version</a></em></p>

@ -58,7 +58,7 @@ There are different types of scope for variables in a shader :
</li>
<li><div> attribute : Per-vertex variables passed by the engine to the shader, like position, normal, etc (Mesh data in the graphic)</div>
</li>
<li><div> varrying : Variables passed from the vertex shader to the fragment shader.</div>
<li><div> varying : Variables passed from the vertex shader to the fragment shader.</div>
</li>
</ul>
@ -71,7 +71,7 @@ There is a large panel of variable types to be used, for more information about
</p>
</div>
<!-- EDIT4 SECTION "Variables scope" [1484-2150] -->
<!-- EDIT4 SECTION "Variables scope" [1484-2149] -->
<h3><a>Spaces and Matrices</a></h3>
<div>
@ -88,7 +88,7 @@ The engine passes the object space coordinates to the vertex shader. We need to
</p>
</div>
<!-- EDIT5 SECTION "Spaces and Matrices" [2151-2695] -->
<!-- EDIT5 SECTION "Spaces and Matrices" [2150-2694] -->
<h3><a>Simple example : rendering a solid color on an object</a></h3>
<div>
@ -138,7 +138,7 @@ For example applying this shader to a sphere would render a solid blue sphere on
</p>
</div>
<!-- EDIT6 SECTION "Simple example : rendering a solid color on an object" [2696-3933] -->
<!-- EDIT6 SECTION "Simple example : rendering a solid color on an object" [2695-3932] -->
<h1><a>How to use shaders in JME3</a></h1>
<div>
@ -184,7 +184,7 @@ For more information on JME3 material system, i suggest you read this <object cl
</p>
</div>
<!-- EDIT7 SECTION "How to use shaders in JME3" [3934-5177] -->
<!-- EDIT7 SECTION "How to use shaders in JME3" [3933-5176] -->
<h3><a>JME3 Global uniforms</a></h3>
<div>
@ -203,7 +203,7 @@ The complete list of global uniforms that can be used in JME3 can be found <obje
</p>
</div>
<!-- EDIT8 SECTION "JME3 Global uniforms" [5178-5799] -->
<!-- EDIT8 SECTION "JME3 Global uniforms" [5177-5798] -->
<h3><a>JME3 Lighting Global uniforms</a></h3>
<div>
@ -241,7 +241,7 @@ these uniforms are passed to the shader without having to declare them in the j3
</p>
</div>
<!-- EDIT9 SECTION "JME3 Lighting Global uniforms" [5800-6890] -->
<!-- EDIT9 SECTION "JME3 Lighting Global uniforms" [5799-6889] -->
<h3><a>JME3 attributes</a></h3>
<div>
@ -258,7 +258,7 @@ Note that in the shader the attributes names will be prefixed by a “in”.<br/
</p>
</div>
<!-- EDIT10 SECTION "JME3 attributes" [6891-7273] -->
<!-- EDIT10 SECTION "JME3 attributes" [6890-7272] -->
<h3><a>User&#039;s uniforms</a></h3>
<div>
@ -320,7 +320,7 @@ The uniforms will be populated at runtime with the value you sent.
</p>
</div>
<!-- EDIT11 SECTION "User's uniforms" [7274-8876] -->
<!-- EDIT11 SECTION "User's uniforms" [7273-8875] -->
<h3><a>Example: Adding Color Keying to the Lighting.j3md Material Definition</a></h3>
<div>
@ -384,7 +384,7 @@ A result preview can be seen here: <object classid="java:org.netbeans.modules.ja
</p>
</div>
<!-- EDIT12 SECTION "Example: Adding Color Keying to the Lighting.j3md Material Definition" [8877-10367] -->
<!-- EDIT12 SECTION "Example: Adding Color Keying to the Lighting.j3md Material Definition" [8876-10366] -->
<h3><a>Step by step</a></h3>
<div>
<ul>
@ -414,12 +414,12 @@ A result preview can be seen here: <object classid="java:org.netbeans.modules.ja
</p>
</div>
<!-- EDIT13 SECTION "Step by step" [10368-10987] -->
<!-- EDIT13 SECTION "Step by step" [10367-10986] -->
<h3><a>JME3 and OpenGL 3 &amp; 4 compatibility</a></h3>
<div>
<p>
GLSL 1.0 to 1.2 comes with build 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>
@ -452,9 +452,9 @@ Those attributes are deprecated since GLSL 1.3 (opengl 3), hence JME3 global uni
<td>gl_NormalMatrix </td><td>g_NormalMatrix</td>
</tr>
</table></div>
<!-- EDIT15 TABLE [11313-11624] -->
<!-- EDIT15 TABLE [11312-11623] -->
</div>
<!-- EDIT14 SECTION "JME3 and OpenGL 3 & 4 compatibility" [10988-11624] -->
<!-- EDIT14 SECTION "JME3 and OpenGL 3 & 4 compatibility" [10987-11623] -->
<h3><a>Useful links</a></h3>
<div>
@ -463,5 +463,5 @@ Those attributes are deprecated since GLSL 1.3 (opengl 3), hence JME3 global uni
</p>
</div>
<!-- EDIT16 SECTION "Useful links" [11625-] -->
<!-- EDIT16 SECTION "Useful links" [11624-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:jme3_shaders?do=export_xhtmlbody">view online version</a></em></p>

@ -366,7 +366,7 @@ Full sample code
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.61&#41;;
SSAOFilter ssaoFilter = new SSAOFilter&#40;12.94f, 43.92f, 0.33f, 0.61f&#41;;
fpp.addFilter&#40;ssaoFilter&#41;;
viewPort.addProcessor&#40;fpp&#41;;</pre>

@ -257,8 +257,7 @@ public class TestLoadingScreen extends SimpleApplication implements ScreenContro
&#125; else if &#40;frameCount == 5&#41; &#123;
AbstractHeightMap heightmap = null;
Texture heightMapImage = assetManager.loadTexture&#40;&quot;Textures/Terrain/splat/mountains512.png&quot;&#41;;
heightmap = new ImageBasedHeightMap&#40;
ImageToAwt.convert&#40;heightMapImage.getImage&#40;&#41;, false, true, 0&#41;&#41;;
heightmap = new ImageBasedHeightMap&#40;heightMapImage.getImage&#40;&#41;&#41;;
&nbsp;
heightmap.load&#40;&#41;;
terrain = new TerrainQuad&#40;&quot;my terrain&quot;, 65, 513, heightmap.getHeightMap&#40;&#41;&#41;;
@ -479,8 +478,7 @@ public class TestLoadingScreen1 extends SimpleApplication implements ScreenContr
&nbsp;
AbstractHeightMap heightmap = null;
Texture heightMapImage = assetManager.loadTexture&#40;&quot;Textures/Terrain/splat/mountains512.png&quot;&#41;;
heightmap = new ImageBasedHeightMap&#40;
ImageToAwt.convert&#40;heightMapImage.getImage&#40;&#41;, false, true, 0&#41;&#41;;
heightmap = new ImageBasedHeightMap&#40;heightMapImage.getImage&#40;&#41;&#41;;
&nbsp;
heightmap.load&#40;&#41;;
terrain = new TerrainQuad&#40;&quot;my terrain&quot;, 65, 513, heightmap.getHeightMap&#40;&#41;&#41;;

@ -151,18 +151,20 @@ 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 find a work-around.</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 and work closely with the localizers if they require extra info.</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 right character encoding for the language.</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>
</ul>
</div>
<!-- EDIT6 SECTION "Common Localization Problems" [3919-4662] -->
<!-- EDIT6 SECTION "Common Localization Problems" [3919-5131] -->
<h2><a>More Documentation</a></h2>
<div>
@ -177,5 +179,5 @@ Typical problems include:
</p>
</div>
<!-- EDIT7 SECTION "More Documentation" [4663-] -->
<!-- EDIT7 SECTION "More Documentation" [5132-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:localization?do=export_xhtmlbody">view online version</a></em></p>

@ -4,7 +4,16 @@
<p>
All Geometries need a Materual. Every Material is based on a Material Definition. The most common Material Definitions are included in the engine, advanced users can create custom ones.
All Geometries need a Material to be visible. Every Material is based on a Material Definition. Material definitions provide the &quot;logic&quot; for the material, and a shader draws the material according to the parameters specified in the definition. The J3MD file abstracts the shader and its configuration away from the user, allowing a simple interface where the user can simply set a few parameters on the material to change its appearance and the way its handled by the shaders.
</p>
<p>
The most common Material Definitions are included in the engine, advanced users can create custom ones. In this case you will also be interested in the <a href="/com/jme3/gde/core/docs/jme3/advanced/material_specification.html">in-depth developer specification of the jME3 material system</a>.
</p>
<p>
<strong>Example:</strong>
</p>
<pre>Spatial myGeometry = assetManager.loadModel&#40;&quot;Models/Teapot/Teapot.j3o&quot;&#41;;
Material mat = new Material&#40;assetManager, // Create new material and...
@ -13,44 +22,44 @@ mat.setColor&#40;&quot;Color&quot;, ColorRGBA.Blue&#41;; // Set one or more
myGeometry.setMaterial&#40;mat&#41;; // Use material on this Geometry.</pre>
<p>
<p><div>If you use one custom material very often, read about storing material configurations in user-friendly <a href="/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html">j3m Material Files</a>. Either <a href="/com/jme3/gde/core/docs/sdk/material_editing.html">use the jMonkeyEngine SDK to create .j3m files</a> (easier), or <a href="/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html">write .j3m files in a text editor</a>.
<p><div>If you use one custom material with certain settings very often, learn about storing material settings in <a href="/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html">j3m Material Files</a>. You either <a href="/com/jme3/gde/core/docs/sdk/material_editing.html">use the jMonkeyEngine SDK to create .j3m files</a> (user-friendly), or you <a href="/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html">write .j3m files in a text editor</a> (IDE-independent).
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "How to Use Material Definitions (.j3md)" [1-987] -->
<!-- EDIT1 SECTION "How to Use Material Definitions (.j3md)" [1-1585] -->
<h2><a>Preparing a Material</a></h2>
<div>
<p>
In the <a href="/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html">Materials Overview</a> list,
In the <a href="/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html">Materials Overview</a> list:
</p>
<ol>
<li><div> Choose a Material Definition that has the features that you need. </div>
<ul>
<li><div> Tip: If you don&#039;t know, you can always start with <code>Unshaded.j3md</code>.</div>
<li><div> Tip: If you don&#039;t know, start with <code>Unshaded.j3md</code> or <code>Lighting.j3md</code>.</div>
</li>
</ul>
</li>
<li><div> Look at the applicable parameters of the Material Definition and determine which parameters you need to achieve the desired effect (e.g. &quot;glow&quot; or &quot;color&quot;). Most parameters are optional. </div>
<li><div> Look at the applicable parameters of the Material Definition and determine which parameters you need to achieve the desired effect (e.g. &quot;glow&quot; or &quot;color&quot;). Most parameters are optional! </div>
</li>
<li><div> Create and save the necessary Texture files to your assets directory.</div>
<li><div> Create and save the necessary Texture files to your <code>assets/Textures</code> directory.</div>
<ul>
<li><div> E.g. ColorMap; DiffuseMap, NormalMap, 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. Colors, floats, booleans, etc… </div>
<li><div> E.g. set colors, floats, booleans, etc… </div>
</li>
</ul>
</li>
</ol>
</div>
<!-- EDIT2 SECTION "Preparing a Material" [988-1647] -->
<!-- EDIT2 SECTION "Preparing a Material" [1586-2329] -->
<h2><a>Using a Material</a></h2>
<div>
@ -68,7 +77,7 @@ In your Java code,
<li><div> Apply your prepared Material to a Geometry: <pre>myGeometry.setMaterial&#40;mat&#41;;</pre>
</div>
</li>
<li><div> (Optional) Adjust the texture scale: <pre>geometry.scaleTextureCoordinates&#40;new Vector2f&#40;1f, .5f&#41;&#41;;</pre>
<li><div> (Optional) Adjust the texture scale of the mesh: <pre>myGeometryMesh.scaleTextureCoordinates&#40;new Vector2f&#40;2f, 2f&#41;&#41;;</pre>
</div>
</li>
</ol>
@ -79,7 +88,7 @@ For details see also: <a href="/com/jme3/gde/core/docs/jme3/intermediate/how_to_
</p>
</div>
<!-- EDIT3 SECTION "Using a Material" [1648-2337] -->
<!-- EDIT3 SECTION "Using a Material" [2330-3036] -->
<h3><a>Examples</a></h3>
<div>
@ -135,19 +144,23 @@ rootNode.attachChild&#40;geom&#41;;</pre>
</p>
</div>
<!-- EDIT4 SECTION "Examples" [2338-3711] -->
<!-- EDIT4 SECTION "Examples" [3037-4410] -->
<h2><a>Creating a Custom Material Definition</a></h2>
<div>
<p>
Check out the <a href="/com/jme3/gde/core/docs/jme3/build_from_sources.html">engine source code</a> and have a look at how Material Definitions are implemented. You can create your own Material Definitions and place them in your projects MatDefs directory.
First read the <a href="/com/jme3/gde/core/docs/jme3/advanced/material_specification.html">developer specification of the jME3 material system (.j3md,.j3m)</a>. Also check out the <a href="/com/jme3/gde/core/docs/jme3/build_from_sources.html">engine source code</a> and have a look at how some Material Definitions are implemented.
</p>
<p>
You can create your own Material Definitions and place them in your project&#039;s <code>assets/MatDefs</code> directory.
</p>
<ol>
<li><div> Find the existing MatDefs are in <code>engine/src/core-data/Common/MatDefs/</code>. </div>
<li><div> Find the existing MatDefs in <code>engine/src/core-data/Common/MatDefs/</code>. </div>
</li>
<li><div> Open a Something.j3md file in a text editor. You see that this jme3 file defines Material Parameters and Techniques.</div>
<li><div> Open a Something.j3md file in a text editor. You see that this .j3md file defines Material Parameters and Techniques.</div>
<ul>
<li><div> Material Parameters are the ones that you set in Materials, as shown in the examples above.</div>
</li>
@ -155,11 +168,20 @@ Check out the <a href="/com/jme3/gde/core/docs/jme3/build_from_sources.html">eng
</li>
</ul>
</li>
<li><div> Learn about GLSL (OpenGL Shading Language) to understand the .vert and .frag syntax, and write your own.</div>
<li><div> Learn about GLSL (OpenGL Shading Language) to understand the .vert and .frag syntax, then write your own.</div>
</li>
</ol>
</div>
<!-- EDIT5 SECTION "Creating a Custom Material Definition" [4411-5384] -->
<h2><a>Related Links</a></h2>
<div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/material_specification.html">Developer specification of the jME3 material system (.j3md,.j3m)</a></div>
</li>
</ul>
<div><span>
<a href="/wiki/doku.php/tag:material?do=showtag&amp;tag=tag%3Amaterial">material</a>,
<a href="/wiki/doku.php/tag:material?do=showtag&amp;tag=tag%3Amaterial">Material</a>,
<a href="/wiki/doku.php/tag:sdk?do=showtag&amp;tag=tag%3Asdk">SDK</a>,
<a href="/wiki/doku.php/tag:matdef?do=showtag&amp;tag=tag%3Amatdef">MatDef</a>,
<a href="/wiki/doku.php/tag:file?do=showtag&amp;tag=tag%3Afile">file</a>,
@ -167,5 +189,5 @@ Check out the <a href="/com/jme3/gde/core/docs/jme3/build_from_sources.html">eng
</span></div>
</div>
<!-- EDIT5 SECTION "Creating a Custom Material Definition" [3712-] -->
<!-- EDIT6 SECTION "Related Links" [5385-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:material_definitions?do=export_xhtmlbody">view online version</a></em></p>

@ -368,7 +368,17 @@ Later, put the Geometry (not the Material!) in the appropriate render queue
<td>getAdditionalRenderState().setPolyOffset();</td><td>Enable polygon offset.</td><td>Use this when you have meshes that have triangles really close to each over (e.g. <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Coplanarity"><param name="text" value="<html><u>Coplanar</u></html>"><param name="textColor" value="blue"></object>), it will shift the depth values to prevent <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Z-fighting"><param name="text" value="<html><u>Z-fighting</u></html>"><param name="textColor" value="blue"></object>.</td>
</tr>
</table></div>
<!-- EDIT17 TABLE [14511-15277] --><div><span>
<!-- EDIT17 TABLE [14511-15277] -->
<p>
<strong>Related Links</strong>
</p>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/material_specification.html">Developer specification of the jME3 material system (.j3md,.j3m)</a></div>
</li>
</ul>
<div><span>
<a href="/wiki/doku.php/tag:material?do=showtag&amp;tag=tag%3Amaterial">material</a>,
<a href="/wiki/doku.php/tag:texture?do=showtag&amp;tag=tag%3Atexture">texture</a>,
<a href="/wiki/doku.php/tag:matdefs?do=showtag&amp;tag=tag%3Amatdefs">MatDefs</a>,

@ -4,7 +4,7 @@
<p>
You can split the screen and look into the 3D scene from different camera angles at the same time.
You can split the screen and look into the 3D scene from different camera angles at the same time. E.g. you can have two rootnodes with different scene graphs, and two viewPorts, each of which can only see its own subset of the scene with its own subset of port-processing filters, so you get two very different views of the scene.
</p>
<p>
@ -12,13 +12,13 @@ The packages used in this example are <code>com.jme3.renderer.Camera</code> and
</p>
</div>
<!-- EDIT1 SECTION "Multiple Camera Views" [1-418] -->
<!-- EDIT1 SECTION "Multiple Camera Views" [1-650] -->
<h2><a>How to resize and Position ViewPorts</a></h2>
<div>
<p>
The default viewPort is as big as the window. If you have several, the must be of different sizes, either overlapping or adjacent to one another. How do you tell jME which of the ViewPorts should appear where on the screen, and how big it should be?
The default viewPort is as big as the window. If you have several, they must be of different sizes, either overlapping or adjacent to one another. How do you tell jME which of the ViewPorts should appear where on the screen, and how big they should be?
</p>
<p>
@ -74,7 +74,7 @@ Example: Cam2&#039;s rectangle is int he bottom right: It extends from mid (x1=0
</p>
</div>
<!-- EDIT2 SECTION "How to resize and Position ViewPorts" [419-2059] -->
<!-- EDIT2 SECTION "How to resize and Position ViewPorts" [651-2294] -->
<h2><a>Four-Time Split Screen</a></h2>
<div>
@ -84,7 +84,7 @@ In this example, you create four views (2x2) with the same aspect ratio as the w
</p>
</div>
<!-- EDIT3 SECTION "Four-Time Split Screen" [2060-2228] -->
<!-- EDIT3 SECTION "Four-Time Split Screen" [2295-2463] -->
<h3><a>Set up the First View</a></h3>
<div>
@ -104,7 +104,7 @@ Optionally, place the main camera in the scene and rotate it in its start positi
cam.setRotation&#40;new Quaternion &#40;-0.07f, 0.92f, -0.25f, -0.27f&#41;&#41;;</pre>
</div>
<!-- EDIT4 SECTION "Set up the First View" [2229-2725] -->
<!-- EDIT4 SECTION "Set up the First View" [2464-2960] -->
<h3><a>Set Up Three More Views</a></h3>
<div>
@ -169,7 +169,7 @@ cam3.setViewPort&#40; 0.0f , 0.5f , 0.5f , 1.0f&#41;;
cam4.setViewPort&#40; 0.5f , 1.0f , 0.5f , 1.0f&#41;;</pre>
</div>
<!-- EDIT5 SECTION "Set Up Three More Views" [2726-4536] -->
<!-- EDIT5 SECTION "Set Up Three More Views" [2961-4771] -->
<h2><a>Picture in Picture</a></h2>
<div>
@ -199,8 +199,8 @@ viewPort2.setClearFlags&#40;true, true, true&#41;;
viewPort2.attachScene&#40;rootNode&#41;;</pre>
</div>
<!-- EDIT6 SECTION "Picture in Picture" [4537-5417] -->
<h2><a>Settings</a></h2>
<!-- EDIT6 SECTION "Picture in Picture" [4772-5652] -->
<h2><a>ViewPort Settings</a></h2>
<div>
<p>
@ -229,5 +229,5 @@ You have full control to determine which Nodes the camera can see! It can see th
</span></div>
</div>
<!-- EDIT7 SECTION "Settings" [5418-] -->
<!-- EDIT7 SECTION "ViewPort Settings" [5653-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:multiple_camera_views?do=export_xhtmlbody">view online version</a></em></p>

@ -10,17 +10,17 @@ This document introduces you to the SpiderMonkey networking <acronym title="Appl
<ul>
<li><div> The central server (one headless SimpleApplication) coordinates the game in the background.</div>
</li>
<li><div> Each player runs a game client (a standard SimpleApplications) and connects to the central server.</div>
<li><div> Each player runs a game client (a standard SimpleApplication) and connects to the central server.</div>
</li>
</ul>
<p>
Each Client keeps the the Server informed about its player&#039;s moves and actions. The Server centrally maintains the game state and broadcasts the state info back to all connected clients. This network synchronization allows all clients share the same game world. Each client then displays the game state to one player from this player&#039;s perspective.
Each Client keeps the Server informed about its player&#039;s moves and actions. The Server centrally maintains the game state and broadcasts the state info back to all connected clients. This network synchronization allows all clients to share the same game world. Each client then displays the game state to one player from this player&#039;s perspective.
</p>
</div>
<!-- EDIT1 SECTION "SpiderMonkey: Multi-Player Networking" [1-843] -->
<!-- EDIT1 SECTION "SpiderMonkey: Multi-Player Networking" [1-841] -->
<h2><a>SpiderMonkey API Overview</a></h2>
<div>
@ -41,7 +41,7 @@ The SpiderMonkey <acronym title="Application Programming Interface">API</acronym
<td> com.jme3.network.Client </td><td> == </td><td> com.jme3.network.HostedConnection </td>
</tr>
</table></div>
<!-- EDIT3 TABLE [1769-1887] -->
<!-- EDIT3 TABLE [1767-1885] -->
<p>
You can register several types of listeners to be notified of changes.
@ -56,12 +56,12 @@ You can register several types of listeners to be notified of changes.
</ul>
</div>
<!-- EDIT2 SECTION "SpiderMonkey API Overview" [844-2388] -->
<!-- EDIT2 SECTION "SpiderMonkey API Overview" [842-2386] -->
<h2><a>Client and Server</a></h2>
<div>
</div>
<!-- EDIT4 SECTION "Client and Server" [2389-2419] -->
<!-- EDIT4 SECTION "Client and Server" [2387-2417] -->
<h3><a>Creating a Server</a></h3>
<div>
@ -96,7 +96,7 @@ When you run this app on a host, the server is ready to accept clients. Let&#039
</p>
</div>
<!-- EDIT5 SECTION "Creating a Server" [2420-3372] -->
<!-- EDIT5 SECTION "Creating a Server" [2418-3370] -->
<h3><a>Creating a Client</a></h3>
<div>
@ -135,7 +135,7 @@ When you run this client, it connects to the server.
</p>
</div>
<!-- EDIT6 SECTION "Creating a Client" [3373-4540] -->
<!-- EDIT6 SECTION "Creating a Client" [3371-4538] -->
<h3><a>Getting Info About a Client</a></h3>
<div>
@ -158,7 +158,7 @@ The server refers to a connected client as com.jme3.network.HostedConnection obj
<td>myServer.getConnection(0)</td><td>Server gets the first (0), second (1), etc, connected HostedConnection object (one client).</td>
</tr>
</table></div>
<!-- EDIT8 TABLE [4717-5096] -->
<!-- EDIT8 TABLE [4715-5094] -->
<p>
Your game can define its own game data based on whatever criteria you want, typically these include player ID and state. If the server needs to look up player/client-specific information, you can store this information directly on the HostedConnection object. The following examples read and write a custom Java object <code>MyState</code> in the HostedConnection object <code>conn</code>:
@ -175,14 +175,14 @@ Your game can define its own game data based on whatever criteria you want, typi
<td> MyState state = conn.getAttribute(&quot;MyState&quot;)</td><td> Server can read an attribute of the HostedConnection. </td>
</tr>
</table></div>
<!-- EDIT9 TABLE [5471-5700] -->
<!-- EDIT9 TABLE [5469-5698] -->
</div>
<!-- EDIT7 SECTION "Getting Info About a Client" [4541-5701] -->
<!-- EDIT7 SECTION "Getting Info About a Client" [4539-5699] -->
<h2><a>Messaging</a></h2>
<div>
</div>
<!-- EDIT10 SECTION "Messaging" [5702-5724] -->
<!-- EDIT10 SECTION "Messaging" [5700-5722] -->
<h3><a>Creating Message Types</a></h3>
<div>
@ -203,7 +203,7 @@ You must register each message type to the com.jme3.network.serializing.Serializ
<pre>Serializer.registerClass&#40;HelloMessage.class&#41;;</pre>
</div>
<!-- EDIT11 SECTION "Creating Message Types" [5725-6677] -->
<!-- EDIT11 SECTION "Creating Message Types" [5723-6675] -->
<h3><a>Responding to Messages</a></h3>
<div>
@ -260,7 +260,7 @@ For each message type, register a server listener to the server:
<pre>myServer.addMessageListener&#40;new ServerListener&#40;&#41;, HelloMessage.class&#41;;</pre>
</div>
<!-- EDIT12 SECTION "Responding to Messages" [6678-8422] -->
<!-- EDIT12 SECTION "Responding to Messages" [6676-8420] -->
<h3><a>Creating and Sending Messages</a></h3>
<div>
@ -293,11 +293,11 @@ Or the server can send the message to all but a few selected clients (e.g. to al
<pre>myServer.broadcast&#40; Filters.notEqualTo&#40; conn4 &#41;, message &#41;;</pre>
<p>
The last two broadcasting methods use com.jme3.network.Filters to select a subset of recipients. If you know the exact list of recipients, always send the messages directly to them using the Filters; avoid floodig the network with unnessary broadcasts to all.
The last two broadcasting methods use com.jme3.network.Filters to select a subset of recipients. If you know the exact list of recipients, always send the messages directly to them using the Filters; avoid flooding the network with unnecessary broadcasts to all.
</p>
</div>
<!-- EDIT13 SECTION "Creating and Sending Messages" [8423-9509] -->
<!-- EDIT13 SECTION "Creating and Sending Messages" [8421-9510] -->
<h2><a>Identification and Rejection</a></h2>
<div>
@ -328,7 +328,7 @@ A server has a game version and game name property. Each client expects to commu
<td> myClient.getVersion() </td><td> Client queries the version of the server it is connected to. </td>
</tr>
</table></div>
<!-- EDIT15 TABLE [10101-10470] -->
<!-- EDIT15 TABLE [10102-10471] -->
<p>
<p><div>Typically, your networked game defines its own attributes (such as player ID) based on whatever criteria you want. If you want to look up player/client-specific information beyond the game version, you can set this information directly on the Client/HostedConnection object (see Getting Info About a Client).
@ -336,12 +336,12 @@ A server has a game version and game name property. Each client expects to commu
</p>
</div>
<!-- EDIT14 SECTION "Identification and Rejection" [9510-10798] -->
<!-- EDIT14 SECTION "Identification and Rejection" [9511-10799] -->
<h2><a>Closing Clients and Server Cleanly</a></h2>
<div>
</div>
<!-- EDIT16 SECTION "Closing Clients and Server Cleanly" [10799-10845] -->
<!-- EDIT16 SECTION "Closing Clients and Server Cleanly" [10800-10846] -->
<h3><a>Closing a Client</a></h3>
<div>
@ -357,7 +357,7 @@ You must override the client&#039;s destroy() method to close the connection cle
&#125;</pre>
</div>
<!-- EDIT17 SECTION "Closing a Client" [10846-11121] -->
<!-- EDIT17 SECTION "Closing a Client" [10847-11122] -->
<h3><a>Closing a Server</a></h3>
<div>
@ -373,7 +373,7 @@ You must override the server&#039;s destroy() method to close the connection whe
&#125;</pre>
</div>
<!-- EDIT18 SECTION "Closing a Server" [11122-11378] -->
<!-- EDIT18 SECTION "Closing a Server" [11123-11379] -->
<h3><a>Kicking a Client</a></h3>
<div>
@ -384,7 +384,7 @@ The server can kick a HostedConnection to make it disconnect. You should provide
<pre>conn.close&#40;&quot;We kick cheaters.&quot;&#41;;</pre>
</div>
<!-- EDIT19 SECTION "Kicking a Client" [11379-11769] -->
<!-- EDIT19 SECTION "Kicking a Client" [11380-11770] -->
<h2><a>Listening to Connection Notification</a></h2>
<div>
@ -394,7 +394,7 @@ The server and clients are notified about connection changes.
</p>
</div>
<!-- EDIT20 SECTION "Listening to Connection Notification" [11770-11881] -->
<!-- EDIT20 SECTION "Listening to Connection Notification" [11771-11882] -->
<h3><a>ClientStateListener</a></h3>
<div>
@ -408,21 +408,21 @@ The com.jme3.network.ClientStateListener notifies the Client when the Client has
<th> ClientStateListener interface method </th><th> Purpose </th>
</tr>
<tr>
<td> public void clientConnected(Client c){} </td><td> Implement here what happens as soon as this clients has fully connected to the server. </td>
<td> public void clientConnected(Client c){} </td><td> Implement here what happens as soon as this client has fully connected to the server. </td>
</tr>
<tr>
<td> public void clientDisconnected(Client c, DisconnectInfo info){} </td><td> Implement here what happens after the server kicks this client. For example, display the DisconnectInfo to the user. </td>
</tr>
</table></div>
<!-- EDIT22 TABLE [12124-12494] -->
<!-- EDIT22 TABLE [12125-12494] -->
<p>
First implement the ClientStateListener interface in the Client class. Then register it to myClient in MyGameClient&#039;s simeplInitApp() method:
First implement the ClientStateListener interface in the Client class. Then register it to myClient in MyGameClient&#039;s simpleInitApp() method:
</p>
<pre>myClient.addClientStateListener&#40;this&#41;;</pre>
</div>
<!-- EDIT21 SECTION "ClientStateListener" [11882-12696] -->
<!-- EDIT21 SECTION "ClientStateListener" [11883-12696] -->
<h3><a>ConnectionListener</a></h3>
<div>

@ -275,6 +275,25 @@ guiViewPort.addProcessor&#40;niftyDisplay&#41;;</pre>
</div>
<!-- EDIT12 SECTION "Load Several XML Files" [7676-8724] -->
<h2><a>Register additional explicit screen controllers</a></h2>
<div>
<p>
In addition to the <code>nifty.addXml()</code> methods to attach many nifty <acronym title="Extensible Markup Language">XML</acronym> files, there exists a <code>nifty.registerScreenController()</code> method to explicitly attach more screen controllers.
</p>
<p>
The following code sample shows how you can explicitly attach several screen controllers before adding the <acronym title="Extensible Markup Language">XML</acronym> file to nifty, which would otherwise cause nifty to implicitly instantiate the screen controller class.
</p>
<pre>NiftyJmeDisplay niftyDisplay = new NiftyJmeDisplay&#40;assetManager, inputManager, audioRenderer, viewPort&#41;;
Nifty nifty = niftyDisplay.getNifty&#40;&#41;;
&nbsp;
nifty.registerScreenController&#40;new OptionsScreenController&#40;randomConstructorArgument&#41;&#41;;
nifty.addXml&#40;&quot;Interface/Screens/OptionsScreen.xml&quot;&#41;;</pre>
</div>
<!-- EDIT13 SECTION "Register additional explicit screen controllers" [8725-9493] -->
<h2><a>Design Your Own Styles</a></h2>
<div>
@ -326,5 +345,5 @@ Learn more from the NiftyGUI page:
</span></div>
</div>
<!-- EDIT13 SECTION "Design Your Own Styles" [8725-] -->
<!-- EDIT14 SECTION "Design Your Own Styles" [9494-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:nifty_gui_scenarios?do=export_xhtmlbody">view online version</a></em></p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

@ -0,0 +1,72 @@
<h1><a>Working Blender and OgreXML Versions</a></h1>
<div>
<p>
Here you can find working combinations of Blender and the OgreXML exporter, with any tips or bugs associated with each.
</p>
<div><table>
<tr>
<th> Blender Version </th><th> OgreXML Exporter Version </th><th> Notes </th>
</tr>
<tr>
<td> 2.6.2 </td><td> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/blender2ogre/downloads/list"><param name="text" value="<html><u>0.5.5</u></html>"><param name="textColor" value="blue"></object> </td><td> Root bone, no transforms on object, no envelopes </td>
</tr>
<tr>
<td> 2.6.1 </td><td> ? </td><td> </td>
</tr>
<tr>
<td> 2.6.0 </td><td> ? </td><td> </td>
</tr>
</table></div>
<!-- EDIT2 TABLE [173-391] -->
</div>
<!-- EDIT1 SECTION "Working Blender and OgreXML Versions" [1-392] -->
<h1><a>Tips</a></h1>
<div>
<p>
Tips for exporting animations through OgreXML correctly:
</p>
<ul>
<li><div> apply all transformations</div>
</li>
<li><div> armature should have 0,0,0 transformation (loc,rot,scale)</div>
</li>
<li><div> model object should have 0,0,0 transformation (loc,rot,scale)</div>
</li>
<li><div> root bone should have 0,0,0 transformation (loc,rot,scale)</div>
</li>
<li><div> no envelopes</div>
</li>
</ul>
<p>
Test Character - <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://dl.dropbox.com/u/26887202/123/jme_blender/characterOgre26.zip"><param name="text" value="<html><u>http://dl.dropbox.com/u/26887202/123/jme_blender/characterOgre26.zip</u></html>"><param name="textColor" value="blue"></object>
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/ogre_solved.jpg">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/ogre_solved2.png">
</p>
</div>
<!-- EDIT3 SECTION "Tips" [393-869] -->
<h1><a>Troubleshooting</a></h1>
<div>
<p>
<strong>Q:</strong> <em>My animation is stretched.</em>
</p>
<p>
<strong>A:</strong> Use the exporting tips provided above
</p>
</div>
<!-- EDIT4 SECTION "Troubleshooting" [870-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:ogrecompatibility?do=export_xhtmlbody">view online version</a></em></p>

@ -196,7 +196,7 @@ All non-mesh CollisionShapes can be used for dynamic, kinematic, as well as stat
<strong>Limitations:</strong> CPU intensive, use sparingly! We recommend using HullCollisionShape (or CompoundShape) instead to improve performance. Collisions between two mesh-accurate shapes cannot be detected, only non-mesh shapes can collide with this shape. </td><td> Complex dynamic objects (like spiders) in Virtual Reality or scientific simulations. </td>
</tr>
<tr>
<td> HeightFieldCollisionShape </td><td> A mesh-accurate shape optimized for static terrains. This shape is much faster than other mesh-accurate shapes. <br/>
<td> HeightfieldCollisionShape </td><td> A mesh-accurate shape optimized for static terrains. This shape is much faster than other mesh-accurate shapes. <br/>
<strong>Limitations:</strong> Requires heightmap data. Collisions between two mesh-accurate shapes cannot be detected, only non-mesh shapes can collide with this shape.</td><td>Static terrains.</td>
</tr>
</table></div>
@ -380,23 +380,33 @@ myThing_geo.removeFromParent&#40;&#41;;</pre>
<p>
The PhysicsSpace also manages global physics settings. Typically, you can leave the defaults, and you don&#039;t need to change the following settings:
</p>
<ul>
<li><div> Specify physics accuracy.<pre>bulletAppState.getPhysicsSpace&#40;&#41;.setAccuracy&#40;1f/60f;&#41;;</pre>
</div>
</li>
<li><div> Specify global gravity. <pre>bulletAppState.getPhysicsSpace&#40;&#41;.setGravity&#40;new Vector3f&#40;0, -9.81f, 0&#41;&#41;;</pre>
</div>
</li>
<li><div> Specify the size of the physics space as two opposite corners (only applies to AXIS_SWEEP broadphase).<pre>bulletAppState.getPhysicsSpace&#40;&#41;.setWorldMax&#40;new Vector3f&#40;10000f, 10000f, 10000f&#41;&#41;;
bulletAppState.getPhysicsSpace&#40;&#41;.setWorldMin&#40;new Vector3f&#40;-10000f, -10000f, -10000f&#41;&#41;;</pre>
</div>
</li>
</ul>
The PhysicsSpace also manages global physics settings. Typically, you can leave the defaults, and you don&#039;t need to change the following settings, but it&#039;s good to know what they are for:
</p>
<div><table>
<tr>
<th>bulletAppState.getPhysicsSpace() Method</th><th>Usage</th>
</tr>
<tr>
<td>setGravity(new Vector3f(0, -9.81f, 0));</td><td>Specifies the global gravity.</td>
</tr>
<tr>
<td>setAccuracy(1f/60f);</td><td>Specifies physics accuracy. The higher the accuracy, the slower the game. Increase value if objects are passing through one another, or bounce oddly.</td>
</tr>
<tr>
<td>setMaxSubSteps(4);</td><td>Compensates low FPS: Specifies the maximum amount of extra steps that will be used to step the physics when the game fps is below the physics fps. This maintains determinism in physics in slow (low-fps) games. For example a maximum number of 2 can compensate for framerates as low as 30 fps (physics has a default accuracy of 60 fps). Note that setting this value too high can make the physics drive down its own fps in case its overloaded.</td>
</tr>
<tr>
<td>setWorldMax(new Vector3f(10000f, 10000f, 10000f)); <br/>
setWorldMin(new Vector3f(-10000f, -10000f, -10000f));</td><td>Specifies the size of the physics space as two opposite corners (only applies to AXIS_SWEEP broadphase).</td>
</tr>
<tr>
<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] -->
</div>
<!-- EDIT15 SECTION "PhysicsSpace Code Samples" [13661-14361] -->
<!-- EDIT15 SECTION "PhysicsSpace Code Samples" [13661-15095] -->
<h2><a>Specify Physical Properties</a></h2>
<div>
@ -431,11 +441,12 @@ Soil, concrete, rock: 1.0f </td>
</tr>
<tr>
<td> setRestitution(0.0f) </td><td> Bounciness. By default objects are not bouncy (0.0f). For a bouncy rubber object set this &gt; 0.0f. <br/>
Both the object and the surface must have non-zero restitution for bouncing to occur. <br/>
This setting has an impact on performance, so use it sparingly. </td><td> Brick: 0.0f <br/>
Rubber ball: 1.0f </td>
</tr>
</table></div>
<!-- EDIT17 TABLE [14586-16007] -->
<!-- EDIT18 TABLE [15320-16830] -->
<p>
On a RigidBodyControl, you can apply the following physical forces:
@ -451,17 +462,14 @@ On a RigidBodyControl, you can apply the following physical forces:
<tr>
<td> setPhysicsRotation()</td><td>Rotates the object. Do not use setLocalRotate() for physical objects.</td>
</tr>
<tr>
<td> setCcdMotionThreshold(0.1f) </td><td> The amount of motion in 1 physics tick to trigger the continuous motion detection. Rarely used, but necessary if you need to fiddle with details. </td>
</tr>
<tr>
<td> setKinematic(true) </td><td> By default, RigidBodyControls are dynamic (kinematic=false) and are affected by forces. If you set kinematic=true, the object is no longer affected by forces, but it still affects others. A kinematic is solid, and must have a mass. <br/>
(See detailed explanation below.) </td>
</tr>
</table></div>
<!-- EDIT18 TABLE [16078-16868] -->
<!-- EDIT19 TABLE [16901-17511] -->
</div>
<!-- EDIT16 SECTION "Specify Physical Properties" [14362-16869] -->
<!-- EDIT17 SECTION "Specify Physical Properties" [15096-17512] -->
<h3><a>Kinematic vs Dynamic vs Static</a></h3>
<div>
@ -511,7 +519,7 @@ setKinematic(true);</td><td>setMass(1f); <br/>
setKinematic(false);</td>
</tr>
</table></div>
<!-- EDIT20 TABLE [17106-18165] -->
<!-- EDIT21 TABLE [17749-18808] -->
</div>
<h4><a>When Do I Use Kinematic Objects?</a></h4>
@ -534,7 +542,7 @@ setKinematic(false);</td>
</p>
</div>
<!-- EDIT19 SECTION "Kinematic vs Dynamic vs Static" [16870-19271] -->
<!-- EDIT20 SECTION "Kinematic vs Dynamic vs Static" [17513-19914] -->
<h2><a>Forces: Moving Dynamic Objects</a></h2>
<div>
@ -572,7 +580,7 @@ Use the following methods to move dynamic physical objects.
<td> clearForces()</td><td>Cancels out all forces (force, torque) etc and stops the motion.</td>
</tr>
</table></div>
<!-- EDIT22 TABLE [19377-20366] -->
<!-- EDIT23 TABLE [20020-21009] -->
<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.
@ -606,13 +614,13 @@ removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer
<td> setSleepingThreshold(float,float)</td><td>Sets the sleeping thresholds which define when the object gets deactivated to save resources. The first value is the linear threshold and the second the angular. Low values keep the object active when it barely moves (slow precise performance), high values put the object to sleep immediately (imprecise fast performance). (?) </td>
</tr>
<tr>
<td> setCcdMotionThreshold(0f) </td><td>Sets the amount of motion that has to happen in one physics tick to trigger the continuous motion detection. This avoids the problem of fast objects moving through other objects. Set to zero to disable (default).</td>
<td> setCcdMotionThreshold(0f) </td><td>Sets the amount of motion that has to happen in one physics tick to trigger the continuous motion detection in movign obejcts that push one another. This avoids the problem of fast objects moving through other objects. Set to zero to disable (default).</td>
</tr>
<tr>
<td> setCcdSweptSphereRadius(.5f)</td><td>Bullet does not use the full collision shape for continuous collision detection, insteadit uses a &quot;swept sphere&quot; shape to approximate a motion. Only relevant for fast moving dynamic bodies. (?) </td>
<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>
<!-- EDIT23 TABLE [20784-22589] -->
<!-- EDIT24 TABLE [21427-23383] -->
<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.
@ -620,7 +628,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer
</p>
</div>
<!-- EDIT21 SECTION "Forces: Moving Dynamic Objects" [19272-22931] -->
<!-- EDIT22 SECTION "Forces: Moving Dynamic Objects" [19915-23725] -->
<h2><a>Best Practices</a></h2>
<div>
<ul>
@ -634,12 +642,17 @@ removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer
</li>
</ul>
<ul>
<li><div> <strong>Buggy?</strong> If you get weird behaviour, such as 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>
</ul>
<ul>
<li><div> <strong>Buggy?</strong> If you get weird behaviour, such as physical nodes passing through one another, or getting stuck for no reason. <br/>
<strong>Solution:</strong> Look at the physics space accessors and change the acuracy and other parameters.</div>
</li>
</ul>
<ul>
<li><div> <strong>Need more interactivity?</strong> You can actively <em>control</em> a physical game by triggering forces. You may also want to be able <em>respond</em> to collisions, e.g. by substracting health, awarding points, or by playing a sound. <br/>
<strong>Solution:</strong> To specify how the game responds to collisions, you use <a href="/com/jme3/gde/core/docs/jme3/advanced/physics_listeners.html">Physics Listeners</a>.</div>
</li>
@ -651,7 +664,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)</td><td>Collision Groups are integer
</span></div>
</div>
<!-- EDIT24 SECTION "Best Practices" [22932-] --><div>
<!-- EDIT25 SECTION "Best Practices" [23726-] --><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>

@ -4,7 +4,7 @@
<p>
The awesome SeaMonkey water Filter is highly configurable. It can render any type of water and also simulates the underwater part of the effect, including &quot;caustics&quot;. It is 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:
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>
@ -12,11 +12,12 @@ The awesome SeaMonkey water Filter is highly configurable. It can render any typ
</p>
<p>
Need simpler <a href="/com/jme3/gde/core/docs/jme3/advanced/water.html">water</a>?
<p><div>The SeaMonkey WaterFilter is ideal for oceans and lakes, and expecially for under-water scenes. If you only need a small simple water surface, such as a water trough or a shallow fountain, the <a href="/com/jme3/gde/core/docs/jme3/advanced/water.html">SimpleWaterProcessor</a> may already be all you need.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "Rendering Water as Post-Process Effect" [1-590] -->
<!-- EDIT1 SECTION "Rendering Water as Post-Process Effect" [1-855] -->
<h2><a>The Theory</a></h2>
<div>
@ -34,7 +35,7 @@ The GameDev.net article describes how those effects are achieved, but the main i
</p>
</div>
<!-- EDIT2 SECTION "The Theory" [591-1706] -->
<!-- EDIT2 SECTION "The Theory" [856-1971] -->
<h2><a>How Did We Implement it in jME3?</a></h2>
<div>
@ -56,7 +57,7 @@ Now we have the rendered scene in a texture, and we can reconstruct the position
</p>
</div>
<!-- EDIT3 SECTION "How Did We Implement it in jME3?" [1707-2442] -->
<!-- EDIT3 SECTION "How Did We Implement it in jME3?" [1972-2707] -->
<h2><a>Sample Code</a></h2>
<div>
@ -68,20 +69,20 @@ There are two test cases in the jME3 repository:
<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> (ocean island)</div>
</li>
</ul>
<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/TestPostWaterLake.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestPostWaterLake.java</u></html>"><param name="textColor" value="blue"></object> (calm and muddy water pond)</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/TestMultiPostWater.java"><param name="text" value="<html><u>jme3/src/test/jme3test/water/TestMultiPostWater.java</u></html>"><param name="textColor" value="blue"></object> (several ponds of different sizes at different heights etc)</div>
</li>
</ul>
</div>
<!-- EDIT4 SECTION "Sample Code" [2443-2901] -->
<!-- EDIT4 SECTION "Sample Code" [2708-3399] -->
<h3><a>Using the Water Filter</a></h3>
<div>
<p>
In the <code>simpleInitApp()</code> method, you attach your scene to the rootNode, typically a terrain with a sky. Remember to add a directional light, since the water relies on the light direction vector. The WaterFilter constrcutor expects a node with the scene attached that should be reflected in the water, and vector information from the light source&#039;s direction.
In the <code>simpleInitApp()</code> method, you attach your scene to the rootNode, typically a terrain with a sky. Remember to add a directional light, since the water relies on the light direction vector. The WaterFilter constructor expects a node with the scene attached that should be reflected in the water, and vector information from the light source&#039;s direction.
</p>
<p>
@ -108,7 +109,7 @@ Usually you make the water reflect everything attached to the rootNode. But you
</p>
</div>
<!-- EDIT5 SECTION "Using the Water Filter" [2902-4206] -->
<!-- EDIT5 SECTION "Using the Water Filter" [3400-4704] -->
<h3><a>Optional: Waves</a></h3>
<div>
@ -128,7 +129,7 @@ public void simpleUpdate&#40;float tpf&#41; &#123;
&#125;</pre>
</div>
<!-- EDIT6 SECTION "Optional: Waves" [4207-4731] -->
<!-- EDIT6 SECTION "Optional: Waves" [4705-5229] -->
<h3><a>Optional: Water Wave and Color Effects</a></h3>
<div>
@ -175,7 +176,7 @@ manager.loadTexture(&quot;Textures/wavenormals.png&quot;) )</td><td>This normal
<td>water.setNormalScale(0.5f)</td><td>Sets the normal scaling factors to apply to the normal map. The higher the value, the more small ripples will be visible on the waves.</td><td>1.0f</td>
</tr>
</table></div>
<!-- EDIT8 TABLE [4898-6062] --><div><table>
<!-- EDIT8 TABLE [5396-6560] --><div><table>
<tr>
<th> Water method example</th><th> Effects: Color</th><th>Default</th>
</tr>
@ -200,10 +201,14 @@ Vector3f(0.0f, 0.0f,0.2f,1.0f)</td>
<td>water.setColorExtinction(new Vector3f(10f,20f,30f));</td><td>Sets At what depth the refraction color extincts. The three values are RGB (red, green, blue) in this order. Play with these parameters to &quot;muddy&quot; the water.</td><td>Vector3f(5f,20f,30f)</td>
</tr>
</table></div>
<!-- EDIT9 TABLE [6064-7068] --><div><table>
<!-- EDIT9 TABLE [6562-7566] --><div><table>
<tr>
<th> Water method example</th><th> Effects: Shore</th><th>Default</th>
</tr>
<tr>
<td>water.setCenter(Vector3f.ZERO); <br/>
water.setRadius(260);</td><td>Limit the water filter to a semisphere with the given center and radius. Use this for lakes and smaller bodies of water. Skip this for oceans.</td><td>unused</td>
</tr>
<tr>
<td>water.setShoreHardness(1.0f);</td><td>Sets how soft the transition between shore and water should be. High values mean a harder transition between shore and water.</td><td>0.1f</td>
</tr>
@ -211,7 +216,7 @@ Vector3f(0.0f, 0.0f,0.2f,1.0f)</td>
<td>water.setUseHQShoreline(false);</td><td>Renders shoreline with better quality ?</td><td>true</td>
</tr>
</table></div>
<!-- EDIT10 TABLE [7070-7359] --><div><table>
<!-- EDIT10 TABLE [7568-8066] --><div><table>
<tr>
<th> Water method example</th><th> Effects: Foam</th><th>Default</th>
</tr>
@ -229,7 +234,7 @@ Vector3f(0.0f, 0.0f,0.2f,1.0f)</td>
manager.loadTexture(&quot;Textures/foam.png&quot;) )</td><td>This foam texture will be used with WrapMode.Repeat</td><td>&quot;Common/MatDefs/Water/Textures/foam.jpg&quot;</td>
</tr>
</table></div>
<!-- EDIT11 TABLE [7361-8006] --><div><table>
<!-- EDIT11 TABLE [8068-8713] --><div><table>
<tr>
<th> Water method example</th><th> Effects: Light</th><th>Default</th>
</tr>
@ -255,9 +260,9 @@ manager.loadTexture(&quot;Textures/foam.png&quot;) )</td><td>This foam texture w
<td>water.setReflectionMapSize(256)</td><td>Sets the size of the reflection map. The higher, the better the quality, but the slower the effect.</td><td>512</td>
</tr>
</table></div>
<!-- EDIT12 TABLE [8008-8923] -->
<!-- EDIT12 TABLE [8715-9630] -->
</div>
<!-- EDIT7 SECTION "Optional: Water Wave and Color Effects" [4732-8925] -->
<!-- EDIT7 SECTION "Optional: Water Wave and Color Effects" [5230-9632] -->
<h3><a>Sound Effects</a></h3>
<div>
@ -268,6 +273,11 @@ You should also add audio nodes with water sounds to complete the effect.
<pre>AudioNode waves = new AudioNode&#40;assetManager, &quot;Sound/Environment/Ocean Waves.ogg&quot;, false&#41;;
waves.setLooping&#40;true&#41;;
audioRenderer.playSource&#40;waves&#41;;</pre>
<p>
See also: <a href="/com/jme3/gde/core/docs/jme3/advanced/audio.html">audio</a>.
</p>
<hr />
<p>
@ -281,5 +291,5 @@ See also:
</ul>
</div>
<!-- EDIT13 SECTION "Sound Effects" [8926-] -->
<!-- EDIT13 SECTION "Sound Effects" [9633-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:post-processor_water?do=export_xhtmlbody">view online version</a></em></p>

@ -1,19 +1,27 @@
<h1><a>Saving and Loading Games</a></h1>
<h1><a>Saving and Loading Games (.j3o)</a></h1>
<div>
<p>
Spatials can contain Nodes, Geometries, and user data (player score, health, inventory, etc). You can save and load individual Nodes or Geometries, as well as whole scenes using <code>com.jme3.export.binary.BinaryExporter</code> and <code>com.jme3.export.binary.BinaryImporter</code>. The jMonkeyEngine&#039;s serialization system is the <code>com.jme3.export.Savable</code> interface; the jMonkeyEngine&#039;s binary file format is called <code>.j3o</code>. You can open, view, and edit .j3o files in the jMonkeyEngine <a href="/com/jme3/gde/core/docs/sdk.html">SDK</a>.
Spatials (that is Nodes and Geometries) can contain audio and light nodes, particle emitters, controls, and user data (player score, health, inventory, etc). For your game distribution, you must convert all original models to a faster binary format. You save individual Spatials as well as scenes using <code>com.jme3.export.binary.BinaryExporter</code>.
</p>
<p>
<p><div>JME&#039;s BinaryExporter/BinaryImporter can read and write standard Java objects, JME objects, and primitive data types that are included in a <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">spatial&#039;s user data</a>. See below how to make additional custom classes &quot;Savable&quot;.
The jMonkeyEngine&#039;s binary file format is called <code>.j3o</code>. You can convert, view and edit .j3o files and their materials in the jMonkeyEngine <a href="/com/jme3/gde/core/docs/sdk.html">SDK</a> and compose scenes (this does not include editing meshes). For the conversion, you can either use the BinaryExporters, or a context menu in the <acronym title="Software Development Kit">SDK</acronym>.
</p>
<p>
<p><div>The jMonkeyEngine&#039;s serialization system is the <code>com.jme3.export.Savable</code> interface. JME3&#039;s BinaryExporter can write standard Java objects, JME3 objects, and primitive data types that are included in a <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">spatial&#039;s user data</a>. If you use custom game data classes, see below how to make them &quot;Savable&quot;.
</div></p>
</p>
<p>
There is also a com.jme3.export.xml.XMLExporter and com.jme3.export.xml.XMLImporter that similarly converts jme3 spatials to an <acronym title="Extensible Markup Language">XML</acronym> format. But you wouldn&#039;t use that to load models at runtime (quite slow).
</p>
</div>
<!-- EDIT1 SECTION "Saving and Loading Games" [1-781] -->
<!-- EDIT1 SECTION "Saving and Loading Games (.j3o)" [1-1239] -->
<h2><a>Sample Code</a></h2>
<div>
<ul>
@ -22,70 +30,50 @@ Spatials can contain Nodes, Geometries, and user data (player score, health, inv
</ul>
</div>
<!-- EDIT2 SECTION "Sample Code" [782-939] -->
<!-- EDIT2 SECTION "Sample Code" [1240-1397] -->
<h2><a>Saving a Node</a></h2>
<div>
<p>
The following example overrides <code>destroy()</code> to save the rootNode to a file when the user quits the application. The saved rootNode is a normal .j3o binary file that you open in the <a href="/com/jme3/gde/core/docs/sdk.html">SDK</a>.
The following example overrides <code>stop()</code> in SimpleApplication to save the rootNode to a file when the user quits the application. The saved rootNode is a normal .j3o binary file that you can open in the <a href="/com/jme3/gde/core/docs/sdk.html">SDK</a>.
</p>
<p>
<p><div>Note that when you save a model that has textures the textures are references to those textures are stored as absolute paths, so when loading the j3o file they have to be accessible at the exact location (relative to the assetmanager root) they were loaded from. This is why the <acronym title="Software Development Kit">SDK</acronym> manages the conversion on the project level.
<p><div>Note that when you save a model that has textures, the references to those textures are stored as absolute paths, so when loading the j3o file again, the textures have to be accessible at the exact location (relative to the assetmanager root, by default the <code>assets</code> directory) they were loaded from. This is why the <acronym title="Software Development Kit">SDK</acronym> manages the conversion on the project level.
</div></p>
</p>
<pre> /* This is called when the user quits the app. */
@Override
public void destroy&#40;&#41; &#123;
public void stop&#40;&#41; &#123;
String userHome = System.getProperty&#40;&quot;user.home&quot;&#41;;
BinaryExporter exporter = BinaryExporter.getInstance&#40;&#41;;
File file = new File&#40;userHome+&quot;/MySuperGame/&quot;+&quot;LastSavedGame.j3o&quot;&#41;;
File file = new File&#40;userHome+&quot;/Models/&quot;+&quot;MyModel.j3o&quot;&#41;;
try &#123;
exporter.save&#40;rootNode, file&#41;;
&#125; catch &#40;IOException ex&#41; &#123;
Logger.getLogger&#40;Main.class.getName&#40;&#41;&#41;.log&#40;Level.SEVERE, &quot;Error: Failed to save game!&quot;, ex&#41;;
&#125;
super.destroy&#40;&#41;; // continue quitting the game
super.stop&#40;&#41;; // continue quitting the game
&#125;</pre>
<p>
<p><div>You can add a timestamp to your saved files:
</p>
<pre>long timestamp = System.currentTimeMillis&#40;&#41;/1000;
File file = new File&#40;userHome+&quot;/MySuperGame/&quot;+&quot;/SavedGame-&quot;+timestamp+&quot;.j3o&quot;&#41;;</pre>
<p>
</div></p>
</p>
</div>
<!-- EDIT3 SECTION "Saving a Node" [940-2256] -->
<!-- EDIT3 SECTION "Saving a Node" [1398-2548] -->
<h2><a>Loading a Node</a></h2>
<div>
<p>
The following example uses simpleInitApp() to load the last saved game when the game is initialized.
The following example overrides <code>simpleInitApp()</code> in SimpleApplication to load <code>Models/MyModel.j3o</code> when the game is initialized.
</p>
<pre> @Override
public void simpleInitApp&#40;&#41; &#123;
String userHome = System.getProperty&#40;&quot;user.home&quot;&#41;;
BinaryImporter importer = BinaryImporter.getInstance&#40;&#41;;
importer.setAssetManager&#40;assetManager&#41;;
File file = new File&#40;userHome+&quot;/MySuperGame/&quot;+&quot;LastSavedGame.j3o&quot;&#41;;
if&#40;file.exists&#40;&#41;&#41;&#123;
try &#123;
Node loadedNode = &#40;Node&#41;importer.load&#40;file&#41;;
loadedNode.setName&#40;&quot;loaded node&quot;&#41;;
rootNode.attachChild&#40;loadedNode&#41;;
&#125; catch &#40;IOException ex&#41; &#123;
Logger.getLogger&#40;Main.class.getName&#40;&#41;&#41;.log&#40;Level.SEVERE, &quot;Could not load saved game.&quot;, ex&#41;;
&#125;
else &#123;
// No previous game. Create new game, or let user browse to file, etc...
&#125;
String userHome = System.getProperty&#40;&quot;user.home&quot;&#41;;
assetManager.registerLocator&#40;userHome, FileLocator.class&#41;;
Node loadedNode = &#40;Node&#41;assetManager.loadModel&#40;&quot;Models/MyModel.j3o&quot;&#41;;
loadedNode.setName&#40;&quot;loaded node&quot;&#41;;
rootNode.attachChild&#40;loadedNode&#41;;
&#125;
&nbsp;</pre>
<p>
@ -94,13 +82,13 @@ The following example uses simpleInitApp() to load the last saved game when the
</p>
</div>
<!-- EDIT4 SECTION "Loading a Node" [2257-3344] -->
<!-- EDIT4 SECTION "Loading a Node" [2549-3302] -->
<h2><a>Custom Savable Class</a></h2>
<div>
<p>
JME&#039;s BinaryExporter/BinaryImporter can read and write standard Java objects (String, ArrayList, buffers, etc), JME objects (Savables, such as Material), and primitive data types (int, float, etc). If you are using any custom class together with a Spatial, then the custom class must implement the <code>com.jme3.export.Savable</code> interface. There are two common cases where this is relevant:
JME&#039;s BinaryExporter can write standard Java objects (String, ArrayList, buffers, etc), JME objects (Savables, such as Material), and primitive data types (int, float, etc). If you are using any custom class together with a Spatial, then the custom class must implement the <code>com.jme3.export.Savable</code> interface. There are two common cases where this is relevant:
</p>
<ul>
@ -182,7 +170,18 @@ To make a custom class savable:
<p><div>As with all serialization, remember that if you ever change data types in custom classes, the updated read() methods will no longer be able to read your old files.
</div></p>
</p>
<div><span>
<a href="/wiki/doku.php/tag:convert?do=showtag&amp;tag=tag%3Aconvert">convert</a>,
<a href="/wiki/doku.php/tag:j3o?do=showtag&amp;tag=tag%3Aj3o">j3o</a>,
<a href="/wiki/doku.php/tag:models?do=showtag&amp;tag=tag%3Amodels">models</a>,
<a href="/wiki/doku.php/tag:load?do=showtag&amp;tag=tag%3Aload">load</a>,
<a href="/wiki/doku.php/tag:save?do=showtag&amp;tag=tag%3Asave">save</a>,
<a href="/wiki/doku.php/tag:documentation?do=showtag&amp;tag=tag%3Adocumentation">documentation</a>,
<a href="/wiki/doku.php/tag:serialization?do=showtag&amp;tag=tag%3Aserialization">serialization</a>,
<a href="/wiki/doku.php/tag:import?do=showtag&amp;tag=tag%3Aimport">import</a>,
<a href="/wiki/doku.php/tag:export?do=showtag&amp;tag=tag%3Aexport">export</a>
</span></div>
</div>
<!-- EDIT5 SECTION "Custom Savable Class" [3345-] -->
<!-- EDIT5 SECTION "Custom Savable Class" [3303-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:save_and_load?do=export_xhtmlbody">view online version</a></em></p>

@ -8,14 +8,18 @@ The com.jme3.app.state.ScreenshotAppState enables your users to take screenshots
</p>
<p>
You activate it as follows in your simpleInitApp() method:
You activate this feature as follows in your simpleInitApp() method:
</p>
<pre>ScreenshotAppState state = new ScreenshotAppState&#40;&#41;;
this.stateManager.attach&#40;state&#41;;</pre>
<pre>ScreenshotAppState screenShotState = new ScreenshotAppState&#40;&#41;;
this.stateManager.attach&#40;screenShotState&#41;;</pre>
<p>
The default screenshot key is KeyInput.KEY_SYSRQ, alos known as &quot;System Request / Print Screen&quot; key. On Mac <acronym title="Operating System">OS</acronym>, you can take screenshots using Command+Shift+3 (fullscreen) or Command+Shift+4, and then press space to select a window.
The default screenshot key is KeyInput.KEY_SYSRQ, alos known as &quot;System Request / Print Screen&quot; key. On Mac keyboards, this key does not exist, so on Mac <acronym title="Operating System">OS</acronym> you take screenshots using Command+Shift+3 (fullscreen) or Command+Shift+4 (windowed: press space to select a window and then click).
</p>
<p>
The screenshot is saved to the user directory.
</p>

@ -101,12 +101,13 @@ These maths objects are invisible and are used for collision testing (ray castin
<div>
<p>
To add a shape to the scene:
</p>
<ol>
<li><div> Create the base mesh shape.</div>
</li>
<li><div> Wrap it into a Geometry.</div>
<li><div> Wrap the mesh into a Geometry.</div>
</li>
<li><div> Assign a Material to the Geometry.</div>
</li>
@ -114,6 +115,12 @@ To add a shape to the scene:
</li>
</ol>
<p>
<p><div>Create one static shape as mesh and use it in several geometries, or clone() the geometries.
</div></p>
</p>
</div>
<h4><a>Complex Shapes</a></h4>
@ -141,7 +148,7 @@ The order is important: First arrange around origin, then transform. Otherwise,
</p>
</div>
<!-- EDIT4 SECTION "Usage" [2636-4110] -->
<!-- EDIT4 SECTION "Usage" [2636-4228] -->
<h2><a>Code Examples</a></h2>
<div>
@ -171,5 +178,15 @@ geom.setMaterial&#40;mat&#41;; // assign material to geo
rootNode.attachChild&#40;geom&#41;; // attach geometry to a node</pre>
</div>
<!-- EDIT5 SECTION "Code Examples" [4111-] -->
<!-- EDIT5 SECTION "Code Examples" [4229-5359] -->
<h2><a>See also</a></h2>
<div>
<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.
</p>
</div>
<!-- EDIT6 SECTION "See also" [5360-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:shape?do=export_xhtmlbody">view online version</a></em></p>

@ -22,7 +22,7 @@ If you think you need to understand the scene graph concept better, please read
<p>
In your Java code, a Spatial is either a <code>com.jme3.scene.Node</code> or a <code>com.jme3.scene.Geometry</code>. You use the two for different purposes:
In your Java code, a Spatial is either a <code>com.jme3.scene.Node</code> or a <code>com.jme3.scene.Geometry</code> instance. You use the two types of Spatials for different purposes:
</p>
<p>
@ -34,7 +34,7 @@ In your Java code, a Spatial is either a <code>com.jme3.scene.Node</code> or a <
<td> </td><th>com.jme3.scene.Spatial </th>
</tr>
<tr>
<th> Purpose: </th><td> A Spatial is an abstract data structure that stores transformations (translation, rotation, scale) of elements of the 3D scene graph. Spatials can be saved and loaded using the <a href="/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html">Asset Manager</a>. </td>
<th> Purpose: </th><td> A Spatial is an abstract data structure that stores transformations (= translation, rotation, scale) of elements of the 3D scene graph. Spatials can be saved and loaded using the <a href="/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html">Asset Manager</a>. </td>
</tr>
<tr>
<td> </td><th> com.jme3.scene.Geometry </th><th> com.jme3.scene.Node </th>
@ -44,27 +44,27 @@ In your Java code, a Spatial is either a <code>com.jme3.scene.Node</code> or a <
</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/>
You can attach a Geometry to a Node. </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 attached to itself. <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>
<tr>
<th> Content: </th><td> Transformations; custom user data; <br/>
mesh, material; </td><td> Transformations; custom user data; <br/>
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 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 [1151-2451] -->
<!-- EDIT3 TABLE [1178-2522] -->
<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 either create a Node or a Geometry object. Some methods however require a Spatial argument: This is because they are able to accept both Nodes and Geometries as arguments. In this case, you must <em>cast</em> a Node or Geometry to Spatial.
<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 a com.jme3.scene.Geometry object. Some methods, however, require a spatial 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.
</div></p>
</p>
</div>
<!-- EDIT2 SECTION "Node versus Geometry" [935-2905] -->
<!-- EDIT2 SECTION "Node versus Geometry" [935-3014] -->
<h3><a>Mesh</a></h3>
<div>
@ -83,7 +83,36 @@ The polygon <a href="/com/jme3/gde/core/docs/jme3/advanced/mesh.html">Mesh</a> i
</ul>
</div>
<!-- EDIT4 SECTION "Mesh" [2906-3585] -->
<!-- EDIT4 SECTION "Mesh" [3015-3694] -->
<h2><a>What is a Clone?</a></h2>
<div>
<p>
Cloned spatials share the same mesh, while each cloned spatial can have its own local transformation (translation, rotation, and scale) in the scene. This means you only use <code>clone()</code> on spatials whose meshes never change. The most common use case for cloning is when you use several Spatials that are based on the same <a href="/com/jme3/gde/core/docs/jme3/advanced/shape.html">Shape</a>s.
</p>
<p>
The second use case is: When you load a model using <code>loadModel()</code> from the AssetManager, you may get a <code>clone()</code>ed object. In particular:
</p>
<ul>
<li><div> If the model is not animated (it has no <code><a href="/com/jme3/gde/core/docs/jme3/advanced/animation.html">AnimControl</a></code>), you get a clone. All clones share one mesh object. (Uses less memory)</div>
</li>
<li><div> If the model is animated (it has a <code><a href="/com/jme3/gde/core/docs/jme3/advanced/animation.html">AnimControl</a></code>), then <code>loadModel()</code> duplicates the mesh for each loaded instance. (Uses more memory)</div>
</li>
</ul>
<p>
Usually there is no need to manually use any of the <code>clone()</code> methods on models. Using the <a href="/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html">Asset Manager</a>&#039;s <code>loadModel()</code> method will automatically do the right thing for your models.
</p>
<p>
<p><div>&quot;Box worlds&quot; are not made up of statically cloned <code>Box()</code> shapes, this would still be too slow for large worlds. To learn how to make real fast box worlds, search the web for <em>voxelization</em> techniques.
</div></p>
</p>
</div>
<!-- EDIT5 SECTION "What is a Clone?" [3695-4950] -->
<h2><a>How to Add Fields and Methods to a Spatial</a></h2>
<div>
@ -93,24 +122,23 @@ You can include custom user data –that is, custom Java objects and methods–
</p>
<p>
<p><div>Neither do you need to ever extend Node to be able to add custom accessor methods to a spatial – use <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a> instead. There is no need to create a custom class that extends Node or Geometry to be able to add custom fields – use the provided <code>setUserData()</code> method instead. Where ever the Spatial is accessible, you can easily access the object&#039;s game data and accessors this way.
<p><div>You want to add custom accessor methods to a spatial? Do not extend <code>Node</code> or <code>Geometry</code>, use <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a> instead. You want to add custom fields to a spatial? Do not extend <code>Node</code> or <code>Geometry</code>, use the built-in <code>setUserData()</code> method instead. Where ever the Spatial is accessible, you can easily access the object&#039;s class fields (user data) and accessors (control methods) this way.
</div></p>
</p>
<p>
The following example adds an integer field named <code>health</code> to the Spatil <code>player_node</code>, and initializes it to 100.
This first example adds an integer field named <code>health</code> to the Spatial <code>player_node</code>, and initializes it to 100.
</p>
<pre>player_node.setUserData&#40;&quot;health&quot;, 100&#41;;</pre>
<p>
To be able to add accessors to the player, you create a <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">custom PlayerControl</a> class and add it to the Spatial.
The second example adds a set of custom accessor methods to the player object. You create a <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">custom PlayerControl() class</a> and you add this control to the Spatial:
</p>
<pre>player_node.addControl&#40;PlayerControl.class&#41;;</pre>
<pre>player_node.addControl&#40;new PlayerControl&#40;&#41;&#41;;</pre>
<p>
In PlayerControl you define methods that set and get your users data in the <code>spatial</code> object.
In your PlayerControl() class, you define custom methods that set and get your user data in the <code>spatial</code> object. For example, the control could add accessors that set and get the player&#039;s health:
</p>
<pre>public int getHealth&#40;&#41; &#123;
return &#40;Integer&#41;spatial.getUserData&#40;&quot;health&quot;&#41;;
@ -126,11 +154,11 @@ Elsewhere in your code, you can access this data wherever you have access to the
...
player_node.getControl&#40;PlayerControl.class&#41;.setHealth&#40;99&#41;;</pre>
<ul>
<li><div> You can add as many data objects (including Strings, Integers, Floats, Arrays,) to a Spatial as you want. Just make sure to label them with unique Strings (<code>health</code>, <code>inventory</code>, <code>equipment</code>, etc). </div>
<li><div> You can add as many data objects (of String, Boolean, Integer, Float, Array types) to a Spatial as you want. Just make sure to label them with unique case-sensitive strings (<code>health</code>, <code>Inventory</code>, <code>equipment</code>, etc). </div>
</li>
<li><div> The saved data can be custom Java objects if you make the custom Java class <a href="/com/jme3/gde/core/docs/jme3/advanced/save_and_load#custom_savable_class.html">implement the Savable interface</a>. </div>
<li><div> The saved data can even be a custom Java object if you make the custom Java class <a href="/com/jme3/gde/core/docs/jme3/advanced/save_and_load#custom_savable_class.html">implement the Savable interface</a>! </div>
</li>
<li><div> When you save a Spatial as a .j3o file, the custom data is saved, too, and it will be restored the next time you load the .j3o!</div>
<li><div> When you save a Spatial as a .j3o file, the custom data is saved, too, and all Savables are restored the next time you load the .j3o! </div>
</li>
</ul>
@ -143,7 +171,7 @@ This is how you list all data keys that are already defined for one Spatial:
&#125;</pre>
</div>
<!-- EDIT5 SECTION "How to Add Fields and Methods to a Spatial" [3586-5973] -->
<!-- EDIT6 SECTION "How to Add Fields and Methods to a Spatial" [4951-7527] -->
<h2><a>How to Access a Named Sub-Mesh</a></h2>
<div>
@ -168,5 +196,15 @@ 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>
<!-- EDIT6 SECTION "How to Access a Named Sub-Mesh" [5974-] -->
<!-- EDIT7 SECTION "How to Access a Named Sub-Mesh" [7528-8331] -->
<h2><a>See also</a></h2>
<div>
<p>
* <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.
</p>
</div>
<!-- EDIT8 SECTION "See also" [8332-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:spatial?do=export_xhtmlbody">view online version</a></em></p>

@ -101,8 +101,7 @@ public class HelloTerrainCollision extends SimpleApplication
AbstractHeightMap heightmap = null;
Texture heightMapImage = assetManager.loadTexture&#40;
&quot;Textures/Terrain/splat/mountains512.png&quot;&#41;;
heightmap = new ImageBasedHeightMap&#40;
ImageToAwt.convert&#40;heightMapImage.getImage&#40;&#41;, false, true, 0&#41;&#41;;
heightmap = new ImageBasedHeightMap&#40;heightMapImage.getImage&#40;&#41;&#41;;
heightmap.load&#40;&#41;;
&nbsp;
<span>/** 3. We have prepared material and heightmap.
@ -145,7 +144,7 @@ public class HelloTerrainCollision extends SimpleApplication
player.setJumpSpeed&#40;20&#41;;
player.setFallSpeed&#40;30&#41;;
player.setGravity&#40;30&#41;;
player.setPhysicsLocation&#40;new Vector3f&#40;0, 10, 0&#41;&#41;;
player.setPhysicsLocation&#40;new Vector3f&#40;-10, 10, 10&#41;&#41;;
&nbsp;
// We attach the scene and the player to the rootnode and the physics space,
// to make them appear in the game world.
@ -214,12 +213,12 @@ Compile and run the code. You should see a terrain. You can use the WASD keys an
</p>
</div>
<!-- EDIT2 SECTION "Sample Code" [402-8830] -->
<!-- EDIT2 SECTION "Sample Code" [402-8791] -->
<h2><a>Understanding the Code</a></h2>
<div>
</div>
<!-- EDIT3 SECTION "Understanding the Code" [8831-8863] -->
<!-- EDIT3 SECTION "Understanding the Code" [8792-8824] -->
<h3><a>The Terrain Code</a></h3>
<div>
@ -237,7 +236,7 @@ Read <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html">Hello Te
</ol>
</div>
<!-- EDIT4 SECTION "The Terrain Code" [8864-9320] -->
<!-- EDIT4 SECTION "The Terrain Code" [8825-9281] -->
<h3><a>The Collision Detection Code</a></h3>
<div>
@ -261,7 +260,7 @@ Read <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html">Hello
</ol>
</div>
<!-- EDIT5 SECTION "The Collision Detection Code" [9321-10221] -->
<!-- EDIT5 SECTION "The Collision Detection Code" [9282-10182] -->
<h3><a>Combining the Two</a></h3>
<div>
@ -291,7 +290,7 @@ You attach the <code>terrain</code> and the first-person <code>player</code> to
bulletAppState.getPhysicsSpace&#40;&#41;.add&#40;player&#41;;</pre>
</div>
<!-- EDIT6 SECTION "Combining the Two" [10222-11070] -->
<!-- EDIT6 SECTION "Combining the Two" [10183-11031] -->
<h2><a>Conclusion</a></h2>
<div>
@ -321,5 +320,5 @@ See also:
</span></div>
</div>
<!-- EDIT7 SECTION "Conclusion" [11071-] -->
<!-- EDIT7 SECTION "Conclusion" [11032-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:terrain_collision?do=export_xhtmlbody">view online version</a></em></p>

@ -4,6 +4,10 @@
<p>
jMonkeyEngine offers a SimpleWaterProcessor that turns any quad (flat rectangle) into a reflective water surface with waves. You can use this quad for simple limited water surfaces such as water troughs, shallow fountains, puddles, shallow water in channels. The SimpleWaterProcessor has less performance impact on your game than the full featured <a href="/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html">SeaMonkey WaterFilter</a>; the main difference is that the SimpleWaterProcessor does not include under-water effects.
</p>
<p>
Here is some background info for JME3&#039;s basic water implementation:
</p>
<ul>
@ -21,7 +25,7 @@ Here is some background info for JME3&#039;s basic water implementation:
</p>
</div>
<!-- EDIT1 SECTION "Simple Water" [1-362] -->
<!-- EDIT1 SECTION "Simple Water" [1-865] -->
<h2><a>SimpleWaterProcessor</a></h2>
<div>
@ -60,7 +64,7 @@ To achieve a water effect, JME3 uses shaders and a special material, <code>Commo
</ol>
</div>
<!-- EDIT2 SECTION "SimpleWaterProcessor" [363-1687] -->
<!-- EDIT2 SECTION "SimpleWaterProcessor" [866-2190] -->
<h2><a>Usage</a></h2>
<div>
@ -121,7 +125,7 @@ To achieve a water effect, JME3 uses shaders and a special material, <code>Commo
</ol>
</div>
<!-- EDIT3 SECTION "Usage" [1688-2762] -->
<!-- EDIT3 SECTION "Usage" [2191-3265] -->
<h2><a>Sample Code</a></h2>
<div>
@ -160,7 +164,7 @@ water.setMaterial&#40;waterProcessor.getMaterial&#40;&#41;&#41;;
rootNode.attachChild&#40;water&#41;;</pre>
</div>
<!-- EDIT4 SECTION "Sample Code" [2763-4062] -->
<!-- EDIT4 SECTION "Sample Code" [3266-4565] -->
<h2><a>Settings</a></h2>
<div>
@ -209,5 +213,5 @@ You can offer a switch to set the water Material to a static texture – for use
</p>
</div>
<!-- EDIT5 SECTION "Settings" [4063-] -->
<!-- EDIT5 SECTION "Settings" [4566-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:water?do=export_xhtmlbody">view online version</a></em></p>

@ -16,8 +16,14 @@ This tutorial shows how to add an animation controller and channels, and how to
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/beginner/beginner-animation.png">
</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.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (7) - Hello Animation" [1-311] -->
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (7) - Hello Animation" [1-514] -->
<h2><a>Sample Code</a></h2>
<div>
<pre>package jme3test.helloworld;
@ -93,7 +99,7 @@ public class HelloAnimation extends SimpleApplication
&#125;</pre>
</div>
<!-- EDIT2 SECTION "Sample Code" [312-2738] -->
<!-- EDIT2 SECTION "Sample Code" [515-2941] -->
<h2><a>Creating and Loading Animated Models</a></h2>
<div>
@ -122,7 +128,7 @@ Don&#039;t forget to add a light source to make the material visible.
</p>
</div>
<!-- EDIT3 SECTION "Creating and Loading Animated Models" [2739-4159] -->
<!-- EDIT3 SECTION "Creating and Loading Animated Models" [2942-4362] -->
<h2><a>Animation Controler and Channel</a></h2>
<div>
@ -151,8 +157,27 @@ After you load the animated model, you register it to the Animation Controller.
channel.setAnim&#40;&quot;stand&quot;&#41;;
...</pre>
<p>
<p><div>In response to a question about animations on different channels interefering with each other, <strong>Nehon on the jME forum <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/groups/general-2/forum/topic/helloanimation-animations-seem-to-be-clashing/#post-180994"><param name="text" value="<html><u>wrote</u></html>"><param name="textColor" value="blue"></object>,</strong>
</p>
<p>
&quot;You have to consider channels as part of the skeleton that are animated. The default behavior is to use the whole skeleton for a channel.
In your example the first channel plays the walk anim, then the second channel plays the dodge animation.
Arms and feet are probably not affected by the doge animation so you can see the walk anim for them, but the rest of the body plays the dodge animation.
</p>
<p>
Usually multiple channels are used to animate different part of the body. For example you create one channel for the lower part of the body and one for the upper part. This allow you to play a walk animation with the lower part and for example a shoot animation with the upper part. This way your character can walk while shooting.
</p>
<p>
In your case, where you want animations to chain for the whole skeleton, you just have to use one channel.&quot;
</div></p>
</p>
</div>
<!-- EDIT4 SECTION "Animation Controler and Channel" [4160-4997] -->
<!-- EDIT4 SECTION "Animation Controler and Channel" [4363-6301] -->
<h2><a>Responding to Animation Events</a></h2>
<div>
@ -177,7 +202,7 @@ Add <code>implements AnimEventListener</code> to the class declaration. This int
&#125;</pre>
</div>
<!-- EDIT5 SECTION "Responding to Animation Events" [4998-5885] -->
<!-- EDIT5 SECTION "Responding to Animation Events" [6302-7189] -->
<h2><a>Trigger Animations After User Input</a></h2>
<div>
@ -233,7 +258,7 @@ Test for each action by name, and set the channel to the corresponding animation
&#125;;</pre>
</div>
<!-- EDIT6 SECTION "Trigger Animations After User Input" [5886-7774] -->
<!-- EDIT6 SECTION "Trigger Animations After User Input" [7190-9078] -->
<h2><a>Exercises</a></h2>
<div>
@ -302,7 +327,7 @@ Can you identify individual bones in the skeleton?
</p>
</div>
<!-- EDIT7 SECTION "Exercises" [7775-9642] -->
<!-- EDIT7 SECTION "Exercises" [9079-10946] -->
<h2><a>Conclusion</a></h2>
<div>
@ -332,5 +357,5 @@ See also: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer">
</span></div>
</div>
<!-- EDIT8 SECTION "Conclusion" [9643-] -->
<!-- EDIT8 SECTION "Conclusion" [10947-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_animation?do=export_xhtmlbody">view online version</a></em></p>

@ -10,8 +10,14 @@ Previous: <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html">Hel
This tutorial explains how to add 3D sound to a game, and how make sounds play together with events, such as clicking. You learn how to use an Audio Listener and Audio Nodes. You also make use of an Action Listener and a MouseButtonTrigger from the previous <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html">Hello Input</a> tutorial to make a mouse click trigger a gun shot sound.
</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.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (11) - Hello Audio" [1-477] -->
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (11) - Hello Audio" [1-680] -->
<h2><a>Sample Code</a></h2>
<div>
<pre>package jme3test.helloworld;
@ -104,7 +110,7 @@ When you run the sample, you should see a blue cube. You should hear a nature-li
</p>
</div>
<!-- EDIT2 SECTION "Sample Code" [478-3313] -->
<!-- EDIT2 SECTION "Sample Code" [681-3516] -->
<h2><a>Understanding the Code Sample</a></h2>
<div>
@ -122,7 +128,7 @@ Let&#039;s have a closer look at <code>initAudio()</code> to learn how to use <c
</p>
</div>
<!-- EDIT3 SECTION "Understanding the Code Sample" [3314-3923] -->
<!-- EDIT3 SECTION "Understanding the Code Sample" [3517-4126] -->
<h2><a>AudioNodes</a></h2>
<div>
@ -178,7 +184,7 @@ Here you make audio_nature a positional sound that comes from a certain place. F
</p>
</div>
<!-- EDIT4 SECTION "AudioNodes" [3924-6585] -->
<!-- EDIT4 SECTION "AudioNodes" [4127-6788] -->
<h2><a>Triggering Sound</a></h2>
<div>
@ -210,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" [6586-8050] -->
<!-- EDIT5 SECTION "Triggering Sound" [6789-8253] -->
<h2><a>Ambient or Situational?</a></h2>
<div>
@ -239,7 +245,7 @@ Now every sound knows whether it should loop or not.
</p>
<p>
Apart from the looping boolean, another difference is where <code>play()</code> (<code>playInstace()</code>) is called on those nodes:
Apart from the looping boolean, another difference is where <code>play().playInstance()</code> is called on those nodes:
</p>
<ul>
<li><div> You start playing the background nature sound right after you have created it, in the initAudio() method.<pre> audio_nature.play&#40;&#41;; // play continuously!</pre>
@ -259,7 +265,7 @@ Apart from the looping boolean, another difference is where <code>play()</code>
</ul>
</div>
<!-- EDIT6 SECTION "Ambient or Situational?" [8051-9286] -->
<!-- EDIT6 SECTION "Ambient or Situational?" [8254-9484] -->
<h2><a>Buffered or Streaming?</a></h2>
<div>
@ -282,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?" [9287-9868] -->
<!-- EDIT7 SECTION "Buffered or Streaming?" [9485-10066] -->
<h2><a>Play() or PlayInstance()?</a></h2>
<div>
<div><table>
@ -299,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 [9908-10152] -->
<!-- EDIT9 TABLE [10106-10350] -->
</div>
<!-- EDIT8 SECTION "Play() or PlayInstance()?" [9869-10153] -->
<!-- EDIT8 SECTION "Play() or PlayInstance()?" [10067-10351] -->
<h2><a>Your Ear in the Scene</a></h2>
<div>
@ -323,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" [10154-10856] -->
<!-- EDIT10 SECTION "Your Ear in the Scene" [10352-11054] -->
<h2><a>Global, Directional, Positional?</a></h2>
<div>
@ -350,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?" [10857-12215] -->
<!-- EDIT11 SECTION "Global, Directional, Positional?" [11055-12413] -->
<h2><a>Conclusion</a></h2>
<div>
@ -385,5 +391,5 @@ See also:
</span></div>
</div>
<!-- EDIT12 SECTION "Conclusion" [12216-] -->
<!-- EDIT12 SECTION "Conclusion" [12414-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_audio?do=export_xhtmlbody">view online version</a></em></p>

@ -46,8 +46,13 @@ These scene elements cannot be modeled by meshes. In very simple terms:
Particle effects can be animated (e.g. sparks, drops) and static (strands of grass, hair). Non-particle effects include bloom/glow, and motion blur/afterimage. In this tutorial you learn how to make animated particles (com.jme3.effect).
</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.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (12) - Hello Effects" [1-937] -->
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (12) - Hello Effects" [1-1141] -->
<h2><a>Sample Code</a></h2>
<div>
<pre>package jme3test.helloworld;
@ -116,7 +121,7 @@ You should see an explosion that sends debris flying, and a fire.
</p>
</div>
<!-- EDIT2 SECTION "Sample Code" [938-3321] -->
<!-- EDIT2 SECTION "Sample Code" [1142-3525] -->
<h3><a>Texture Animation and Variation</a></h3>
<div>
@ -164,7 +169,7 @@ The fire material is created the same way, just using &quot;Effects/Explosion/fl
</p>
</div>
<!-- EDIT3 SECTION "Texture Animation and Variation" [3322-5180] -->
<!-- EDIT3 SECTION "Texture Animation and Variation" [3526-5384] -->
<h3><a>Default Particle Textures</a></h3>
<div>
@ -193,14 +198,14 @@ The following particle textures included in <code>test-data.jar</code>. You can
<td> Effects/Smoke/Smoke.png </td><td> 1*15 </td><td> <img src="/wiki/lib/exe/fetch.php"> </td>
</tr>
</table></div>
<!-- EDIT5 TABLE [5329-6128] -->
<!-- EDIT5 TABLE [5533-6332] -->
<p>
Copy them into you <code>assets/Effects</code> directory to use them.
</p>
</div>
<!-- EDIT4 SECTION "Default Particle Textures" [5181-6191] -->
<!-- EDIT4 SECTION "Default Particle Textures" [5385-6395] -->
<h2><a>Creating Custom Textures</a></h2>
<div>
@ -246,7 +251,7 @@ Create a grayscale texture in a graphic editor, and save it to your <code>assets
</p>
</div>
<!-- EDIT6 SECTION "Creating Custom Textures" [6192-7589] -->
<!-- EDIT6 SECTION "Creating Custom Textures" [6396-7793] -->
<h3><a>Emitter Parameters</a></h3>
<div>
@ -318,7 +323,7 @@ Vector3f.NAN <br/>
<td> gravity </td><td> <code>setGravity()</code> </td><td> 0,1,0 </td><td> Whether particles fall down (positive) or fly up (negative). Set to 0f for a zero-g effect where particles keep flying. </td>
</tr>
</table></div>
<!-- EDIT8 TABLE [8160-9632] -->
<!-- EDIT8 TABLE [8364-9836] -->
<p>
You can find details about <a href="/com/jme3/gde/core/docs/jme3/advanced/particle_emitters#configure_parameters.html">effect parameters</a> here.
@ -331,7 +336,7 @@ Add and modify one parameter at a time, and try different values until you get t
</p>
</div>
<!-- EDIT7 SECTION "Emitter Parameters" [7590-10141] -->
<!-- EDIT7 SECTION "Emitter Parameters" [7794-10345] -->
<h2><a>Exercise</a></h2>
<div>
@ -351,7 +356,7 @@ Can you &quot;invert&quot; the fire effect into a small waterfall? Here some tip
</ul>
</div>
<!-- EDIT9 SECTION "Exercise" [10142-10432] -->
<!-- EDIT9 SECTION "Exercise" [10346-10636] -->
<h2><a>Conclusion</a></h2>
<div>
@ -374,5 +379,5 @@ Now you move on to another exciting chapter – the simulation of <object classi
</span></div>
</div>
<!-- EDIT10 SECTION "Conclusion" [10433-] -->
<!-- EDIT10 SECTION "Conclusion" [10637-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_effects?do=export_xhtmlbody">view online version</a></em></p>

@ -284,16 +284,22 @@ Mappings registered to the <strong>AnalogListener</strong> are triggered repeate
<ol>
<li><div> JME gives you access to the name of the triggered action.</div>
</li>
<li><div> JME gives you access to a gradual value how long the key has been pressed.</div>
<li><div> JME gives you access to a gradual value showing the strength of that input. In the case of a keypress that will be the tpf value for which it was pressed since the last frame. For other inputs such as a joystick which give analogue control though then the value will also indicate the strength of the input premultiplied by tpf. For an example on this go to <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_input_system/timekeypressed.html">jMonkeyEngine 3 Tutorial (5) - Hello Input System - Variation over time key is pressed</a></div>
</li>
</ol>
</li>
</ul>
<p>
In order to see the total time that a key has been pressed for then the incoming value can be accumulated. The analogue listener may also need to be combined with an action listener so that you are notified when they key is released.
</p>
<ul>
<li><div> Example: Navigational events (e.g. Left, Right, Rotate, Run, Strafe), situations where you interact continuously. </div>
</li>
</ul>
<p>
Mappings registered to the <strong>ActionListener</strong> are digital either-or actions – &quot;Pressed or released? On or off?&quot;
</p>
<ul>
@ -318,7 +324,7 @@ Mappings registered to the <strong>ActionListener</strong> are digital either-or
&#125;</pre>
</div>
<!-- EDIT5 SECTION "Analog, Pressed, or Released?" [9012-10381] -->
<!-- EDIT5 SECTION "Analog, Pressed, or Released?" [9012-11037] -->
<h2><a>Table of Triggers</a></h2>
<div>
@ -354,14 +360,14 @@ You can find the list of input constants in the files <code>src/core/com/jme3/in
KeyTrigger(KeyInput.KEY_LEFT), KeyTrigger(KeyInput.KEY_RIGHT) </td>
</tr>
</table></div>
<!-- EDIT7 TABLE [10614-11210] -->
<!-- EDIT7 TABLE [11270-11866] -->
<p>
<strong>Tip:</strong> If you don&#039;t recall an input constant during development, you benefit from an IDE&#039;s code completion functionality: Place the caret after e.g. <code>KeyInput.|</code> and trigger code completion to select possible input identifiers.
</p>
</div>
<!-- EDIT6 SECTION "Table of Triggers" [10382-11444] -->
<!-- EDIT6 SECTION "Table of Triggers" [11038-12100] -->
<h2><a>Exercises</a></h2>
<div>
<ol>
@ -380,8 +386,16 @@ inputManager.addMapping&#40;&quot;Pause&quot;, new KeyTrigger&#40;usersPauseKey
</li>
</ol>
<p>
<p><div>Link to user-proposed solutions: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jm3:solutions"><param name="text" value="<html><u>http://jmonkeyengine.org/wiki/doku.php/jm3:solutions</u></html>"><param name="textColor" value="blue"></object>
<em>Be sure to try to solve them for yourself first!</em>
</div></p>
</p>
</div>
<!-- EDIT8 SECTION "Exercises" [11445-11967] -->
<!-- EDIT8 SECTION "Exercises" [12101-12785] -->
<h2><a>Conclusion</a></h2>
<div>
@ -403,5 +417,5 @@ Now you can already write a little interactive game! But wouldn&#039;t it be coo
</span></div>
</div>
<!-- EDIT9 SECTION "Conclusion" [11968-] -->
<!-- EDIT9 SECTION "Conclusion" [12786-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_input_system?do=export_xhtmlbody">view online version</a></em></p>

@ -181,8 +181,15 @@ Here are some fun things to try:
Look back at the <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_node.html">Hello Node</a> tutorial if you do not remember the transformation methods for scaling, translating, and rotating.
</p>
<p>
<p><div>Link to user-proposed solutions: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jm3:solutions"><param name="text" value="<html><u>http://jmonkeyengine.org/wiki/doku.php/jm3:solutions</u></html>"><param name="textColor" value="blue"></object>
<em>Be sure to try to solve them for yourself first!</em>
</div></p>
</p>
</div>
<!-- EDIT6 SECTION "Exercises" [4502-5111] -->
<!-- EDIT6 SECTION "Exercises" [4502-5273] -->
<h2><a>Conclusion</a></h2>
<div>
@ -214,5 +221,5 @@ See also:
</span></div>
</div>
<!-- EDIT7 SECTION "Conclusion" [5112-] -->
<!-- EDIT7 SECTION "Conclusion" [5274-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_main_event_loop?do=export_xhtmlbody">view online version</a></em></p>

@ -13,8 +13,14 @@ The term Material includes everything that influences what the surface of a 3D m
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/beginner/beginner-materials.png">
</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.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (6) - Hello Materials" [1-510] -->
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (6) - Hello Materials" [1-713] -->
<h2><a>Sample Code</a></h2>
<div>
<pre>package jme3test.helloworld;
@ -116,7 +122,7 @@ Move around with the WASD keys to have a closer look at the translucency, and th
</p>
</div>
<!-- EDIT2 SECTION "Sample Code" [511-4720] -->
<!-- EDIT2 SECTION "Sample Code" [714-4923] -->
<h2><a>Simple Unshaded Texture</a></h2>
<div>
@ -150,7 +156,7 @@ The ColorMap is the typical material layer where textures go.</div>
</ol>
</div>
<!-- EDIT3 SECTION "Simple Unshaded Texture" [4721-5871] -->
<!-- EDIT3 SECTION "Simple Unshaded Texture" [4924-6074] -->
<h2><a>Transparent Unshaded Texture</a></h2>
<div>
@ -207,7 +213,7 @@ The ColorMap is the material layer where textures go. This <acronym title="Porta
</p>
</div>
<!-- EDIT4 SECTION "Transparent Unshaded Texture" [5872-8173] -->
<!-- EDIT4 SECTION "Transparent Unshaded Texture" [6075-8376] -->
<h2><a>Shininess and Bumpiness</a></h2>
<div>
@ -274,7 +280,7 @@ Remember that any Lighting.j3md-based material requires a light source, as shown
</p>
</div>
<!-- EDIT5 SECTION "Shininess and Bumpiness" [8174-11057] -->
<!-- EDIT5 SECTION "Shininess and Bumpiness" [8377-11260] -->
<h2><a>Default Material Definitions</a></h2>
<div>
@ -299,19 +305,19 @@ DiffuseMap, NormalMap, SpecularMap : Texture2D <br/>
Shininess : Float </td>
</tr>
</table></div>
<!-- EDIT7 TABLE [11197-11667] -->
<!-- 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.
</p>
</div>
<!-- EDIT6 SECTION "Default Material Definitions" [11058-11824] -->
<!-- EDIT6 SECTION "Default Material Definitions" [11261-12027] -->
<h2><a>Exercises</a></h2>
<div>
</div>
<!-- EDIT8 SECTION "Exercises" [11825-11847] -->
<!-- EDIT8 SECTION "Exercises" [12028-12050] -->
<h3><a>Exercise 1: Custom .j3m Material</a></h3>
<div>
@ -364,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" [11848-13407] -->
<!-- EDIT9 SECTION "Exercise 1: Custom .j3m Material" [12051-13610] -->
<h3><a>Exercise 2: Bumpiness and Shininess</a></h3>
<div>
@ -394,7 +400,7 @@ Go back to the bumpy rock sample above:
</ol>
</div>
<!-- EDIT10 SECTION "Exercise 2: Bumpiness and Shininess" [13408-13835] -->
<!-- EDIT10 SECTION "Exercise 2: Bumpiness and Shininess" [13611-14038] -->
<h2><a>Conclusion</a></h2>
<div>
@ -444,5 +450,5 @@ See also
</span></div>
</div>
<!-- EDIT11 SECTION "Conclusion" [13836-] -->
<!-- EDIT11 SECTION "Conclusion" [14039-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_material?do=export_xhtmlbody">view online version</a></em></p>

@ -38,8 +38,13 @@ All these physical properties can be simulated in JME3. Let&#039;s have a look a
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/beginner/beginner-physics.png">
</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.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (13) - Hello Physics" [1-1174] -->
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (13) - Hello Physics" [1-1378] -->
<h2><a>Sample Code</a></h2>
<div>
@ -246,7 +251,7 @@ You should see a brick wall. Click to shoot cannon balls. Watch the bricks fall
</p>
</div>
<!-- EDIT2 SECTION "Sample Code" [1175-8560] -->
<!-- EDIT2 SECTION "Sample Code" [1379-8764] -->
<h2><a>A Basic Physics Application</a></h2>
<div>
@ -274,12 +279,12 @@ The BulletAppState gives the game access to a PhysicsSpace. The PhysicsSpace let
</p>
</div>
<!-- EDIT3 SECTION "A Basic Physics Application" [8561-9544] -->
<!-- EDIT3 SECTION "A Basic Physics Application" [8765-9748] -->
<h2><a>Creating Bricks and Cannon Balls</a></h2>
<div>
</div>
<!-- EDIT4 SECTION "Creating Bricks and Cannon Balls" [9545-9590] -->
<!-- EDIT4 SECTION "Creating Bricks and Cannon Balls" [9749-9794] -->
<h3><a>Geometries</a></h3>
<div>
@ -308,7 +313,7 @@ In this &quot;shoot at the wall&quot; example, you use Geometries such as cannon
&#125;</pre>
</div>
<!-- EDIT5 SECTION "Geometries" [9591-10686] -->
<!-- EDIT5 SECTION "Geometries" [9795-10890] -->
<h3><a>RigidBodyControl: Brick</a></h3>
<div>
@ -370,7 +375,7 @@ This code sample does the following:
</ol>
</div>
<!-- EDIT6 SECTION "RigidBodyControl: Brick" [10687-12209] -->
<!-- EDIT6 SECTION "RigidBodyControl: Brick" [10891-12413] -->
<h3><a>RigidBodyControl: Cannonball</a></h3>
<div>
@ -433,7 +438,7 @@ Since you are shooting cannon balls, the last line accelerates the ball in the d
</p>
</div>
<!-- EDIT7 SECTION "RigidBodyControl: Cannonball" [12210-13807] -->
<!-- EDIT7 SECTION "RigidBodyControl: Cannonball" [12414-14011] -->
<h3><a>RigidBodyControl: Floor</a></h3>
<div>
@ -488,7 +493,7 @@ This code sample does the following:
</ol>
</div>
<!-- EDIT8 SECTION "RigidBodyControl: Floor" [13808-15232] -->
<!-- EDIT8 SECTION "RigidBodyControl: Floor" [14012-15436] -->
<h2><a>Creating the Scene</a></h2>
<div>
@ -513,7 +518,7 @@ These methods are each called once from the <code>simpleInitApp()</code> method
</p>
</div>
<!-- EDIT9 SECTION "Creating the Scene" [15233-16061] -->
<!-- EDIT9 SECTION "Creating the Scene" [15437-16265] -->
<h2><a>The Cannon Ball Shooting Action</a></h2>
<div>
@ -543,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" [16062-17102] -->
<!-- EDIT10 SECTION "The Cannon Ball Shooting Action" [16266-17306] -->
<h2><a>Moving a Physical Spatial</a></h2>
<div>
@ -570,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" [17103-18072] -->
<!-- EDIT11 SECTION "Moving a Physical Spatial" [17307-18276] -->
<h2><a>Excercises</a></h2>
<div>
</div>
<!-- EDIT12 SECTION "Excercises" [18073-18096] -->
<!-- EDIT12 SECTION "Excercises" [18277-18300] -->
<h3><a>Exercise 1: Debug Shapes</a></h3>
<div>
@ -592,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" [18097-18362] -->
<!-- EDIT13 SECTION "Exercise 1: Debug Shapes" [18301-18566] -->
<h3><a>Exercise 2: No Mo&#039; Static</a></h3>
<div>
@ -602,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" [18363-18483] -->
<!-- EDIT14 SECTION "Exercise 2: No Mo' Static" [18567-18687] -->
<h3><a>Exercise 3: Behind the Curtain</a></h3>
<div>
@ -620,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" [18484-19489] -->
<!-- EDIT15 SECTION "Exercise 3: Behind the Curtain" [18688-19693] -->
<h2><a>Conclusion</a></h2>
<div>
@ -644,5 +649,5 @@ You have learned how to activate the jBullet PhysicsSpace in an application by a
</span></div>
</div>
<!-- EDIT16 SECTION "Conclusion" [19490-] -->
<!-- EDIT16 SECTION "Conclusion" [19694-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_physics?do=export_xhtmlbody">view online version</a></em></p>

@ -39,14 +39,12 @@ import com.jme3.input.MouseInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.input.controls.MouseButtonTrigger;
import com.jme3.light.DirectionalLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Ray;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.shape.Box;
import com.jme3.scene.shape.Sphere;
&nbsp;
@ -75,7 +73,6 @@ public class HelloPicking extends SimpleApplication &#123;
shootables.attachChild&#40;makeCube&#40;&quot;the Sheriff&quot;, 0f, 1f, -2f&#41;&#41;;
shootables.attachChild&#40;makeCube&#40;&quot;the Deputy&quot;, 1f, 0f, -4f&#41;&#41;;
shootables.attachChild&#40;makeFloor&#40;&#41;&#41;;
shootables.attachChild&#40;makeCharacter&#40;&#41;&#41;;
&#125;
&nbsp;
/** Declaring the &quot;Shoot&quot; action and mapping to its triggers. */
@ -162,19 +159,6 @@ public class HelloPicking extends SimpleApplication &#123;
settings.getHeight&#40;&#41; / 2 + ch.getLineHeight&#40;&#41; / 2, 0&#41;;
guiNode.attachChild&#40;ch&#41;;
&#125;
&nbsp;
protected Spatial makeCharacter&#40;&#41; &#123;
// load a character from jme3test-test-data
Spatial golem = assetManager.loadModel&#40;&quot;Models/Oto/Oto.mesh.xml&quot;&#41;;
golem.scale&#40;0.5f&#41;;
golem.setLocalTranslation&#40;-1.0f, -1.5f, -0.6f&#41;;
&nbsp;
// We must add a light to make the model visible
DirectionalLight sun = new DirectionalLight&#40;&#41;;
sun.setDirection&#40;new Vector3f&#40;-0.1f, -0.7f, -1.0f&#41;&#41;;
golem.addLight&#40;sun&#41;;
return golem;
&#125;
&#125;</pre>
<p>
@ -186,7 +170,7 @@ Keep an eye on the application&#039;s output stream, it will give you more detai
</p>
</div>
<!-- EDIT2 SECTION "Sample Code" [992-7391] -->
<!-- EDIT2 SECTION "Sample Code" [992-6844] -->
<h2><a>Understanding the Helper Methods</a></h2>
<div>
@ -220,7 +204,7 @@ In this example, we attached all &quot;shootable&quot; objects to one custom nod
</p>
</div>
<!-- EDIT3 SECTION "Understanding the Helper Methods" [7392-8432] -->
<!-- EDIT3 SECTION "Understanding the Helper Methods" [6845-7885] -->
<h2><a>Understanding Ray Casting for Hit Testing</a></h2>
<div>
@ -252,12 +236,12 @@ Here is our simple ray casting algorithm for picking objects:
</ol>
</div>
<!-- EDIT4 SECTION "Understanding Ray Casting for Hit Testing" [8433-9275] -->
<!-- EDIT4 SECTION "Understanding Ray Casting for Hit Testing" [7886-8728] -->
<h2><a>Implementing Hit Testing</a></h2>
<div>
</div>
<!-- EDIT5 SECTION "Implementing Hit Testing" [9276-9313] -->
<!-- EDIT5 SECTION "Implementing Hit Testing" [8729-8766] -->
<h3><a>Loading the scene</a></h3>
<div>
@ -285,7 +269,7 @@ First initialize some shootable nodes and attach them to the scene. You will use
&#125;</pre>
</div>
<!-- EDIT6 SECTION "Loading the scene" [9314-10000] -->
<!-- EDIT6 SECTION "Loading the scene" [8767-9453] -->
<h3><a>Setting Up the Input Listener</a></h3>
<div>
@ -303,7 +287,7 @@ Next you declare the shooting action. It can be triggered either by clicking, or
&#125;</pre>
</div>
<!-- EDIT7 SECTION "Setting Up the Input Listener" [10001-10621] -->
<!-- EDIT7 SECTION "Setting Up the Input Listener" [9454-10074] -->
<h3><a>Picking Action Using Crosshairs</a></h3>
<div>
@ -369,7 +353,7 @@ Note how it prints a lot of output to show you which hits were registered.
</p>
</div>
<!-- EDIT8 SECTION "Picking Action Using Crosshairs" [10622-13395] -->
<!-- EDIT8 SECTION "Picking Action Using Crosshairs" [10075-12848] -->
<h3><a>Picking Action Using Mouse Pointer</a></h3>
<div>
@ -410,7 +394,7 @@ Note that since you now use the mouse for picking, you can no longer use it to r
</p>
</div>
<!-- EDIT9 SECTION "Picking Action Using Mouse Pointer" [13396-14832] -->
<!-- EDIT9 SECTION "Picking Action Using Mouse Pointer" [12849-14285] -->
<h2><a>Exercises</a></h2>
<div>
@ -421,7 +405,7 @@ Modify the code sample to solve these exercises:
</p>
</div>
<!-- EDIT10 SECTION "Exercises" [14833-15004] -->
<!-- EDIT10 SECTION "Exercises" [14286-14457] -->
<h3><a>Exercise 1: Magic Spell</a></h3>
<div>
@ -448,7 +432,7 @@ Here are some tips:
</ol>
</div>
<!-- EDIT11 SECTION "Exercise 1: Magic Spell" [15005-15536] -->
<!-- EDIT11 SECTION "Exercise 1: Magic Spell" [14458-14990] -->
<h3><a>Exercise 2: Shoot a Character</a></h3>
<div>
@ -459,10 +443,12 @@ Shooting boxes isn&#039;t very exciting – can you add code that loads and posi
<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>
</li>
<li><div> Tip: Models are shaded! You need some light!</div>
</li>
</ul>
</div>
<!-- EDIT12 SECTION "Exercise 2: Shoot a Character" [15537-15827] -->
<!-- EDIT12 SECTION "Exercise 2: Shoot a Character" [14991-15329] -->
<h3><a>Exercise 3: Pick up into Inventory</a></h3>
<div>
@ -487,8 +473,16 @@ Change the code as follows to simulate the player picking up objects into the in
</li>
</ol>
<p>
<p><div>Link to user-proposed solutions: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jm3:solutions"><param name="text" value="<html><u>http://jmonkeyengine.org/wiki/doku.php/jm3:solutions</u></html>"><param name="textColor" value="blue"></object>
<em>Be sure to try to solve them for yourself first!</em>
</div></p>
</p>
</div>
<!-- EDIT13 SECTION "Exercise 3: Pick up into Inventory" [15828-16799] -->
<!-- EDIT13 SECTION "Exercise 3: Pick up into Inventory" [15330-16463] -->
<h2><a>Conclusion</a></h2>
<div>
@ -539,5 +533,5 @@ See also:
</span></div>
</div>
<!-- EDIT14 SECTION "Conclusion" [16800-] -->
<!-- EDIT14 SECTION "Conclusion" [16464-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_picking?do=export_xhtmlbody">view online version</a></em></p>

@ -19,8 +19,13 @@ One way to create a 3D landscape is to sculpt a huge terrain model. This gives y
Note: If you get an error when trying to create your ImageBasedHeightMap object, you may need to update the <acronym title="Software Development Kit">SDK</acronym>, click on &quot;Help&quot; / &quot;Check for updates&quot;
</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.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (10) - Hello Terrain" [1-623] -->
<!-- EDIT1 SECTION "jMonkeyEngine 3 Tutorial (10) - Hello Terrain" [1-827] -->
<h2><a>Sample Code</a></h2>
<div>
<pre>package jme3test.helloworld;
@ -39,6 +44,8 @@ import com.jme3.texture.Texture.WrapMode;
import java.util.ArrayList;
import java.util.List;
&nbsp;
<span>/** Sample 10 - How to create fast-rendering terrains from heightmaps,
and how to use texture splatting to make the terrain look good. */</span>
public class HelloTerrain extends SimpleApplication &#123;
&nbsp;
private TerrainQuad terrain;
@ -117,7 +124,7 @@ When you run this sample you should see a landscape with dirt mountains, grass p
</p>
</div>
<!-- EDIT2 SECTION "Sample Code" [624-4122] -->
<!-- EDIT2 SECTION "Sample Code" [828-4465] -->
<h2><a>What is a Heightmap?</a></h2>
<div>
@ -171,7 +178,7 @@ In a real game, you will want to use more complex and smoother terrains than the
</p>
</div>
<!-- EDIT3 SECTION "What is a Heightmap?" [4123-5921] -->
<!-- EDIT3 SECTION "What is a Heightmap?" [4466-6264] -->
<h3><a>Looking at the Heightmap Code</a></h3>
<div>
@ -226,7 +233,7 @@ It requires an image from a JME Texture.</div>
heightmap.load&#40;&#41;;</pre>
</div>
<!-- EDIT4 SECTION "Looking at the Heightmap Code" [5922-7171] -->
<!-- EDIT4 SECTION "Looking at the Heightmap Code" [6265-7514] -->
<h2><a>What is Texture Splatting?</a></h2>
<div>
@ -294,7 +301,7 @@ Now you start painting the texture:
</p>
</div>
<!-- EDIT5 SECTION "What is Texture Splatting?" [7172-10054] -->
<!-- EDIT5 SECTION "What is Texture Splatting?" [7515-10397] -->
<h3><a>Looking at the Texturing Code</a></h3>
<div>
@ -350,7 +357,7 @@ Use <code>setWrap(WrapMode.Repeat)</code> to make the small texture fill the wid
</p>
</div>
<!-- EDIT6 SECTION "Looking at the Texturing Code" [10055-12193] -->
<!-- EDIT6 SECTION "Looking at the Texturing Code" [10398-12536] -->
<h2><a>What is a Terrain?</a></h2>
<div>
@ -388,7 +395,7 @@ Create a TerrainQuad with the following arguments:
</ol>
</div>
<!-- EDIT7 SECTION "What is a Terrain?" [12194-13277] -->
<!-- EDIT7 SECTION "What is a Terrain?" [12537-13620] -->
<h3><a>Looking at the Terrain Code</a></h3>
<div>
@ -423,7 +430,7 @@ You have created the terrain object.
</p>
</div>
<!-- EDIT8 SECTION "Looking at the Terrain Code" [13278-14040] -->
<!-- EDIT8 SECTION "Looking at the Terrain Code" [13621-14383] -->
<h2><a>What is LOD (Level of Detail)?</a></h2>
<div>
@ -439,12 +446,12 @@ Close parts of the terrain are rendered in full detail. Terrain parts that are f
</p>
</div>
<!-- EDIT9 SECTION "What is LOD (Level of Detail)?" [14041-14633] -->
<!-- EDIT9 SECTION "What is LOD (Level of Detail)?" [14384-14976] -->
<h2><a>Exercises</a></h2>
<div>
</div>
<!-- EDIT10 SECTION "Exercises" [14634-14656] -->
<!-- EDIT10 SECTION "Exercises" [14977-14999] -->
<h3><a>Exercise 1: Texture Layers</a></h3>
<div>
@ -463,7 +470,7 @@ You see it&#039;s easier to swap layers in the code, than to change the colors i
</p>
</div>
<!-- EDIT11 SECTION "Exercise 1: Texture Layers" [14657-14966] -->
<!-- EDIT11 SECTION "Exercise 1: Texture Layers" [15000-15309] -->
<h3><a>Exercise 2: Randomized Terrains</a></h3>
<div>
@ -480,14 +487,15 @@ Instead, you can also let JME3 generate a random landscape for you:
</p>
<ol>
<li><div> What result do you get when you replace the above two heightmap lines by the following lines and run the sample?<pre>HillHeightMap heightmap = null;
HillHeightMap.NORMALIZE_RANGE = 100; // optional
try &#123;
heightmap = new HillHeightMap&#40;513, 1000, 50, 100, &#40;byte&#41; 3&#41;;
heightmap = new HillHeightMap&#40;513, 1000, 50, 100, &#40;byte&#41; 3&#41;; // byte 3 is a random seed
&#125; catch &#40;Exception ex&#41; &#123;
ex.printStackTrace&#40;&#41;;
&#125;</pre>
</div>
</li>
<li><div> Change one parameter at a time, and the run the sample again. Note the differences. Can you find out which of the values has which effect on the generated terrain?</div>
<li><div> Change one parameter at a time, and the run the sample again. Note the differences. Can you find out which of the values has which effect on the generated terrain (look at the javadoc also)?</div>
<ul>
<li><div> Which value controls the size?</div>
<ul>
@ -497,15 +505,15 @@ try &#123;
</li>
<li><div> Which value controls the number of hills generated?</div>
</li>
<li><div> Which values control the minimum and maximum radius of the hills?</div>
<li><div> Which values control the size and steepness of the hills?</div>
<ul>
<li><div> What happens if the minimum is bigger than the maximum?</div>
<li><div> What happens if the min is bigger than or equal to max? </div>
</li>
</ul>
<li><div> What happens if both min and max are small values (e.g. 10/20)?</div>
</li>
<li><div> Which value controls the flattening of the hills?</div>
<ul>
<li><div> What happens if this value is 1 ?</div>
<li><div> What happens if both min and max are large values (e.g. 1000/1500)?</div>
</li>
<li><div> What happens if min and max are very close(e.g. 1000/1001, 20/21)? Very far apart (e.g. 10/1000)?</div>
</li>
</ul>
</li>
@ -514,12 +522,16 @@ try &#123;
</ol>
<p>
You see the variety of hilly landscapes that can be generated using this method.
</p>
<strong>Tip:</strong> For this exercise, you can keep using the splat Material from the sample code above. Just don&#039;t be surprised that the Material does not match the shape of the newly randomized landscape. If you want to generate real matching splat textures for randomized heightmaps, you need to write a custom method that, for example, creates an alphamap from the heightmap by replacing certain grayscales with certain RGB values.
<p>
<p><div>For this exercise, you can keep using the splat Material from the sample code above. Just don&#039;t be surprised that the Material does not match the shape of the newly randomized landscape. If you want to generate real matching splat textures for randomized heightmaps, you need to write a custom method that, for example, creates an alphamap from the heightmap by replacing certain grayscales with certain RGB values.
</div></p>
</p>
</div>
<!-- EDIT12 SECTION "Exercise 2: Randomized Terrains" [14967-16639] -->
<!-- EDIT12 SECTION "Exercise 2: Randomized Terrains" [15310-17323] -->
<h3><a>Exercise 3: Solid Terrains</a></h3>
<div>
@ -529,13 +541,13 @@ Can you combine what you learned here and in <a href="/com/jme3/gde/core/docs/jm
</p>
</div>
<!-- EDIT13 SECTION "Exercise 3: Solid Terrains" [16640-16809] -->
<!-- EDIT13 SECTION "Exercise 3: Solid Terrains" [17324-17493] -->
<h2><a>Conclusion</a></h2>
<div>
<p>
You have learned how to create terrains that are more efficient as loading one giant model. You know how to create generate random or handmade heightmaps. You can add a LOD control to render large terrains faster. You are aware that you can combine what you learned about collison detection to make the terrain solid to a physical player. You are also able to texture a terrain &quot;like a boss&quot; using layered Materials and texture splatting. You are aware that the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> provides a TerrainEditor that helps with most of these manual tasks.
You have learned how to create terrains that are more efficient than loading one giant model. You know how to create generate random or handmade heightmaps. You can add a LOD control to render large terrains faster. You are aware that you can combine what you learned about collison detection to make the terrain solid to a physical player. You are also able to texture a terrain &quot;like a boss&quot; using layered Materials and texture splatting. You are aware that the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> provides a TerrainEditor that helps with most of these manual tasks.
</p>
<p>
@ -560,5 +572,5 @@ See also:
</span></div>
</div>
<!-- EDIT14 SECTION "Conclusion" [16810-] -->
<!-- EDIT14 SECTION "Conclusion" [17494-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_terrain?do=export_xhtmlbody">view online version</a></em></p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 60 KiB

@ -1,13 +1,13 @@
<h1><a>Creating jME3 models in Blender3D</a></h1>
<h1><a>Creating assets in Blender3D</a></h1>
<div>
<p>
This section discusses how to create and import models from Blender3D (2.62+, see bottom of page for Blender 2.49 and before) to jME3.
This section discusses how to create and import models from Blender3D (2.62+, see bottom of page for Blender 2.49 and before) to jME3. Furthermore it explains how you can create various typical game-related assets like normal maps of high-poly models and baked lighting maps.
</p>
</div>
<!-- EDIT1 SECTION "Creating jME3 models in Blender3D" [1-184] -->
<!-- EDIT1 SECTION "Creating assets in Blender3D" [1-320] -->
<h2><a>Asset Management</a></h2>
<div>
@ -16,8 +16,42 @@ For the managing of assets in general, be sure to read the <a href="/com/jme3/gd
</p>
</div>
<!-- EDIT2 SECTION "Asset Management" [185-417] -->
<h2><a>Creation Process</a></h2>
<!-- EDIT2 SECTION "Asset Management" [321-553] -->
<h1><a>Creating Models</a></h1>
<div>
<p>
Game-compatible models are models that basically only consist of a mesh and UV-mapped textures, in some cases animations. All other material parameters or effects (like particles etc.) can not be expected to be transferred properly and probably would not translate to live rendering very well anyway.
</p>
<p>
Note that BMeshes are not yet supported by the importers and exporters so please use the &quot;legacy mesh format&quot; for now in blender 2.63+
</p>
</div>
<!-- EDIT3 SECTION "Creating Models" [554-1021] -->
<h2><a>UV Mapped Textures</a></h2>
<div>
<p>
To successfully import a texture, the texture <strong>has to</strong> be UV-mapped to the model. Heres how to assign diffuse, normal and specular maps:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender-material-4.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender-material-3.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender-material-2.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender-material-1.png">
</p>
<p>
Its important to note that each used texture will create one separate geometry. So its best to either combine the UV maps or use a premade atlas with different texture types from the start and then map the uv coords of the models to the atlas instead of painting on the texture. This works best for large models like cities and space ships.
</p>
</div>
<!-- EDIT4 SECTION "UV Mapped Textures" [1022-1722] -->
<h2><a>Animations</a></h2>
<div>
<p>
@ -25,25 +59,37 @@ To export an animated model in Blender make sure the following conditions are me
</p>
<ol>
<li><div> The animation bas 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>
<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>
<li><div> Set the mesh’s origin point in the bottom of the mesh (see the images bellow).</div>
</li>
<li><div> Set the armature’s origin point in the bottom of the armature (see the images bellow).</div>
<li><div> Set the mesh’s origin point in the bottom of the mesh (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 bellow).</div>
<li><div> Set the armature’s origin point in the bottom of the armature (see the images below).</div>
</li>
<li><div> Use a root bone located in the armature’s origin. This root bone must be in vertical position (see the images bellow) 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> Armature’s origin point and mesh’s origin point must be in the same location(see the images below).</div>
</li>
<li><div> Uncheck “Bone Envelopes” checkbox on the Armature modifier for the mesh (see the images bellow).</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 “Envelopes” checkbox on the armature (see the images bellow).</div>
<li><div> Uncheck “Bone Envelopes” checkbox on the Armature modifier for the mesh (see the images below).</div>
</li>
<li><div> Use SkeletonDebugger to show the skeleton on your game in order to check if the mesh and the skeleton are loaded correctly:</div>
<li><div> Uncheck “Envelopes” checkbox on the armature (see the images below).</div>
</li>
</ol>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_apply_mesh.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_apply_bones.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_envelopes.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_rootbone.png">
</p>
<p>
You can use SkeletonDebugger to show the skeleton on your game in order to check if the mesh and the skeleton are loaded correctly:
</p>
<pre> final Material soldier2Mat = assetManager.loadMaterial&#40;&quot;Materials/soldier2/soldier2.j3m&quot;&#41;;
final Spatial soldier2 = assetManager.loadModel&#40;&quot;Models/soldier2/soldier2.j3o&quot;&#41;;
TangentBinormalGenerator.generate&#40;soldier2&#41;;
@ -67,20 +113,9 @@ To export an animated model in Blender make sure the following conditions are me
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_rootbone.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_apply_mesh.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_apply_bones.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_envelopes.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender_finished.png">
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender-material-1.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender-material-2.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender-material-3.png">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/blender-material-4.png">
</p>
<p>
Also check out these videos and resources:
@ -95,5 +130,343 @@ Also check out these videos and resources:
</ul>
</div>
<!-- EDIT3 SECTION "Creation Process" [418-] -->
<!-- EDIT5 SECTION "Animations" [1723-5066] -->
<h1><a>NormalMap baking</a></h1>
<div>
<p>
Models for live rendering should have a low polygon count. To increase the perceived detail of a model normal maps are commonly used in games. This tutorial will show how to create a normalmap from a highpoly version of your model that you can apply to a lowpoly version of the model in your game.
</p>
</div>
<!-- EDIT6 SECTION "NormalMap baking" [5067-5398] -->
<h2><a>Blender modeling lowPoly &amp; highPoly</a></h2>
<div>
<p>
If you use the multiresolution modifier you only need one object. Lets look at this example:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/1.gif">
</p>
<p>
Add a multiresolution modifier:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3.1.gif">
</p>
<p>
There are two types of modifiers: Catmull-Clark and Simple.
- Simple is better for things like walls or floors.
- Catmull-Clark is better for objects like spheres.
</p>
<p>
When using Catmull-Clark with a higher &quot;subdivide&quot; value (more than 3) its good to have the &quot;preview&quot; value above 0 and less than the subdivide level. This is because Catmull-Clark smoothes the vertices, so the normalMap is not so precise.
</p>
<p>
Here is an example of Prewiew 1, it&#039;s more smooth than the original mesh:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/2.gif">
</p>
<p>
Enable &quot;Sculpt Mode&quot; in blender and design the highPoly version of your model like here:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/3.gif">
</p>
<p>
Now go into Render Tab, and bake a normalMap using same configuration as here:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/4.gif">
<p><div>Remember! The actual preview affects the baking output and mesh export!
</div></p>
</p>
</div>
<!-- EDIT7 SECTION "Blender modeling lowPoly & highPoly" [5399-6468] -->
<h2><a>Fixing the normal colors in Blender</a></h2>
<div>
<p>
Blender has its own normal colors standard. We need to fix the colors to prepare the normalmap for using it with the JME Lighting Material.
</p>
<p>
To do this, go to the Blender Node Window
</p>
<p>
Here is Blender Node example. It fixes the normal colors:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/5.gif">
</p>
<p>
Here is the colors configuration:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/6.gif">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/7.gif">
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/8.gif">
</p>
<p>
<p><div>Sometimes it will be needed to change R and G scale and add some blur for better effect. Do it like on image below
</div></p>
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/exception2.gif">
</p>
<p>
After rendering, save the file to a destination you want and use it with the JME Lighting Material and the lowpoly version of the model.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/ready_normal.gif">
</p>
</div>
<!-- EDIT8 SECTION "Fixing the normal colors in Blender" [6469-7262] -->
<h1><a>LightMap baking</a></h1>
<div>
<p>
The goal of this tutorial is to explain briefly how to bake light map in blender with a separate set of texture coordinates and then export a model using this map in jME3.
</p>
</div>
<!-- EDIT9 SECTION "LightMap baking" [7263-7466] -->
<h2><a>Blender modeling + texturing</a></h2>
<div>
<p>
create a mesh in blender and unwrap it to create uvs
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/1.jpg">
</p>
<p>
In the mesh tab you can see the sets of Uvs, it will create the first one.<br/>
You can assign w/e texture on it, i used the built in checker of blender for the example.<br/>
Then in this list, create a new one and click on the camera icon so that baking is made with this set. Name it LightUvMap.<br/>
Then in the 3D view in edit mode select all your mesh vertice and hit &#039;U&#039;/LightMap pack then ok it will unfold the mesh for light map.<br/>
Then create a new image, go to the render tab an all at the end check the &quot;Bake&quot; section and select shadows. Then click bake.<br/>
If all went ok it will create a light map like this.<br/>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/2.jpg">
</p>
<p>
Then go to the material tab, create a new one for your model and go to the Texture Tab.<br/>
Create 2 textures one for the color map, and one for the light map.<br/>
In the Mapping section be sure to select coordinates : UV and select the good set of coordinates.<br/>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/3.jpg">
</p>
<p>
then the light map<br/>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/4.jpg">
</p>
</div>
<!-- EDIT10 SECTION "Blender modeling + texturing" [7467-8578] -->
<h2><a>Importing the model in the SDK and creating the appropriate material</a></h2>
<div>
<p>
Once this is done, export your model with the ogre exporter, and turn it into J3o with the <acronym title="Software Development Kit">SDK</acronym>. <br/>
Create material for it using the lighting definition.<br/>
Add the colorMap in the diffuse map slot and the lightMap in the light map slot.<br/>
Make sure you check &quot;SeparateTexCoords&quot;<br/>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/5.jpg">
</p>
<p>
It should roughly result in something like that : <br/>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/advanced/6.jpg">
</p>
<p>
The blend file, the ogre xml files and the textures can be found in the download section of the google code repo<br/>
<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/downloads/detail?name=LightMap.zip&amp;can=2&amp;q=#makechanges"><param name="text" value="<html><u>http://code.google.com/p/jmonkeyengine/downloads/detail?name=LightMap.zip&amp;can=2&amp;q=#makechanges</u></html>"><param name="textColor" value="blue"></object>
</p>
</div>
<!-- EDIT11 SECTION "Importing the model in the SDK and creating the appropriate material" [8579-9263] -->
<h1><a>SkyBox baking</a></h1>
<div>
<p>
There are several ways to create static images to use for a sky in your game. This will describe the concepts used in blender and create an ugly sky <img src="/wiki/lib/images/smileys/icon_smile.gif" class="middle" alt=":-)" /> Check the links below for other ways and prettier skies.
</p>
<p>
A sky box is a texture mapped cube, it can also, loosely, be called en EnvMap or a CubeMap. The camera is inside the cube and the clever thing that jME does is to draw the sky so it is always behind whatever else is in your scene. Imagine the monkey is the camera in the picture.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/skybox-concept.png">
</p>
<p>
But a real sky is not a box around our heads, it is more like a sphere. So if we put any old image in the sky it will look strange and might even look like a box. This is not what we want. The trick is to distort the image so that it will <em>look</em> like a sphere even if it in fact is a picture pasted on a box. Luckily blender can do that tricky distortion for us.
</p>
<p>
The screenshots are from Blender 2.63 but the equivalent operations have been in blender for years so with minor tweaks should work for almost any version.
</p>
<p>
So let&#039;s get started, fire up blender and you&#039;ll see something like this.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/start-screen2.png">
</p>
<p>
The cube in the start scene is perfect for us. What we&#039;ll do is have Blender render the scene onto that cube. The resulting image is what we&#039;ll use for our sky box. So our jME sky will look like we stood inside the blender box and looked out on the scene in blender.
</p>
<p>
Start by selecting the box and set its material to shadeless.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/shadeless.png">
</p>
<p>
Now we will create a texture for the box. Make sure the texture is an <code>Environment Map</code>, that the <code>Viewpoint Object</code> is set to the cube. The resolution is how large the resulting image will be. More pixels makes the sky look better but comes at the cost of texture memory. You&#039;ll have to trim the resolution to what works in your application.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/texture.png">
</p>
<p>
Next up is the fun part, create the sky scene in blender. You can do whatever fits your application, include models for a city landscape, set up a texture mapped sphere in blender with a nice photographed sky, whatever you can think will make a good sky.
I am not so creative so I created this scene:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/scene.png">
</p>
<p>
Now render the scene (press F12). It doesn&#039;t actually matter where the camera is in blender but you might see something similar to this:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/render.png">
</p>
<p>
You can see that Blender has actually drawn the scene onto the cube. This is exactly what we want. Now to save the image.
</p>
<p>
Select the texture of the cube and select save environment map.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/saveenvmap.png">
</p>
<p>
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.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/jme3/external/post-slice.png">
</p>
<p>
Next up is to move the image files into your assets directory and create the sky in jME. You can do that in the Scene Composer by right clicking the scene node, select <code>Add Spatial</code> and then select <code>Skybox</code>.
If you want to do it from code, here is an example:
</p>
<pre>public void simpleInitApp&#40;&#41; &#123;
&nbsp;
Texture westTex = assetManager.loadTexture&#40;&quot;Textures/west.png&quot;&#41;;
Texture eastTex = assetManager.loadTexture&#40;&quot;Textures/east.png&quot;&#41;;
Texture northTex = assetManager.loadTexture&#40;&quot;Textures/north.png&quot;&#41;;
Texture southTex = assetManager.loadTexture&#40;&quot;Textures/south.png&quot;&#41;;
Texture upTex = assetManager.loadTexture&#40;&quot;Textures/top.png&quot;&#41;;
Texture downTex = assetManager.loadTexture&#40;&quot;Textures/bottom.png&quot;&#41;;
&nbsp;
final Vector3f normalScale = new Vector3f&#40;-1, 1, 1&#41;;
Spatial skySpatial = SkyFactory.createSky&#40;
assetManager,
westTex,
eastTex,
northTex,
southTex,
upTex,
downTex,
normalScale&#41;;
rootNode.attachChild&#40;skySpatial&#41;;
&#125;</pre>
<p>
<p><div>This example uses a strange normalScale, this is to flip the image on the X-axis and might not be needed in your case. Hint: the texture is applied on the outside of the cube but we are inside so what do we see?
</div></p>
</p>
</div>
<!-- EDIT12 SECTION "SkyBox baking" [9264-13871] -->
<h3><a>Further reading</a></h3>
<div>
<ul>
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:sky"><param name="text" value="<html><u>http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:sky</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/contribution-depot-jme3/forum/topic/jmonkeyengine-tutorial-how-to-create-skymaps-using-blender/"><param name="text" value="<html><u>http://jmonkeyengine.org/groups/contribution-depot-jme3/forum/topic/jmonkeyengine-tutorial-how-to-create-skymaps-using-blender/</u></html>"><param name="textColor" value="blue"></object></div>
</li>
</ul>
</div>
<!-- EDIT13 SECTION "Further reading" [13872-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:external:blender?do=export_xhtmlbody">view online version</a></em></p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 346 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

@ -161,15 +161,16 @@ this.assetManager.registerLocator&#40;&quot;town.zip&quot;, ZipLocator.class&#41
<p>
Follow our best practices for the <a href="/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html">multi-media asset pipeline</a>. <br/>
You create 3-D models in a 3-D mesh editor, for example Blender, and export it in Ogre Mesh <acronym title="Extensible Markup Language">XML</acronym> or Wavefront OBJ format.
You create 3-D models in a 3-D mesh editor, for example Blender, and export it in Ogre Mesh <acronym title="Extensible Markup Language">XML</acronym> (animated objects, scenes) or Wavefront OBJ format (static objects, scenes).
You create textures in a graphic editor, for exmaple Gimp, and export them as <acronym title="Portable Network Graphics">PNG</acronym> or <acronym title="Joint Photographics Experts Group">JPG</acronym>.
You create sounds in an audio editor, for example, Audacity, and export them as WAVE or OGG.
<br/>
<strong>Learn more:</strong> <a href="/com/jme3/gde/core/docs/jme3/advanced/3d_models.html">3D Models</a>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://blender.org"><param name="text" value="<html><u>Download Blender</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro"><param name="text" value="<html><u>Blender tutorial</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.ogre3d.org/wiki/index.php/Blender_Exporter"><param name="text" value="<html><u>Blender-to-Ogre plugin</u></html>"><param name="textColor" value="blue"></object>, <a href="/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>.
<strong>Learn more:</strong> <a href="/com/jme3/gde/core/docs/jme3/advanced/3d_models.html">3D Models</a>, <a href="/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>, <a href="/com/jme3/gde/core/docs/sdk/blender.html">JME3&#039;s blend-to-j3o importer</a>; <br/>
<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://blender.org"><param name="text" value="<html><u>Download Blender</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro"><param name="text" value="<html><u>Blender intro tutorial</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.ogre3d.org/wiki/index.php/Blender_Exporter"><param name="text" value="<html><u>Blender-to-Ogre plugin</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Comparison_of_3D_computer_graphics_software#Features"><param name="text" value="<html><u>Comparison of 3D graphic software features (Wikipedia)</u></html>"><param name="textColor" value="blue"></object>.
</p>
</div>
<!-- EDIT13 SECTION "How do I Create 3-D models, textures, sounds?" [4821-5568] -->
<!-- EDIT13 SECTION "How do I Create 3-D models, textures, sounds?" [4821-5818] -->
<h3><a>How do I load a 3-D model into the scene?</a></h3>
<div>
@ -189,7 +190,7 @@ Spatial ninja = assetManager.loadModel&#40;&quot;Models/Ninja/Ninja.j3o&quot;&#4
</p>
</div>
<!-- EDIT14 SECTION "How do I load a 3-D model into the scene?" [5569-6774] -->
<!-- EDIT14 SECTION "How do I load a 3-D model into the scene?" [5819-7024] -->
<h3><a>How do initialize the scene?</a></h3>
<div>
@ -200,12 +201,12 @@ Use the simpleInitApp() method in SimpleApplication (or initApp() in Application
</p>
</div>
<!-- EDIT15 SECTION "How do initialize the scene?" [6775-7107] -->
<!-- EDIT15 SECTION "How do initialize the scene?" [7025-7357] -->
<h2><a>I want to transform objects in the scene</a></h2>
<div>
</div>
<!-- EDIT16 SECTION "I want to transform objects in the scene" [7108-7160] -->
<!-- EDIT16 SECTION "I want to transform objects in the scene" [7358-7410] -->
<h3><a>How do I move or turn or resize a spatial?</a></h3>
<div>
@ -221,7 +222,7 @@ To move or turn or resize a spatial you use transformations. You can concatenate
</p>
</div>
<!-- EDIT17 SECTION "How do I move or turn or resize a spatial?" [7161-7742] -->
<!-- EDIT17 SECTION "How do I move or turn or resize a spatial?" [7411-7992] -->
<h3><a>How do I make a spatial move by itself?</a></h3>
<div>
@ -234,7 +235,7 @@ Change the geometry&#039;s translation (position) live in the update loop using
</p>
</div>
<!-- EDIT18 SECTION "How do I make a spatial move by itself?" [7743-8606] -->
<!-- EDIT18 SECTION "How do I make a spatial move by itself?" [7993-8856] -->
<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>
@ -245,7 +246,7 @@ Change the geometry&#039;s translation (position) live in the update loop using
</p>
</div>
<!-- EDIT19 SECTION "How do I access a named sub-mesh in Model?" [8607-8774] -->
<!-- EDIT19 SECTION "How do I access a named sub-mesh in Model?" [8857-9024] -->
<h3><a>How do I make procedural or custom shapes?</a></h3>
<div>
@ -256,12 +257,12 @@ You can programmatically create com.jme3.scene.Mesh&#039;es.
</p>
</div>
<!-- EDIT20 SECTION "How do I make procedural or custom shapes?" [8775-8935] -->
<!-- EDIT20 SECTION "How do I make procedural or custom shapes?" [9025-9185] -->
<h2><a>I want to change the surface of objects in the scene</a></h2>
<div>
</div>
<!-- EDIT21 SECTION "I want to change the surface of objects in the scene" [8936-9000] -->
<!-- EDIT21 SECTION "I want to change the surface of objects in the scene" [9186-9250] -->
<h3><a>Why is my UV wrapping / texture appearance all wrong?</a></h3>
<div>
@ -279,7 +280,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>
<!-- EDIT22 SECTION "Why is my UV wrapping / texture appearance all wrong?" [9001-9550] -->
<!-- EDIT22 SECTION "Why is my UV wrapping / texture appearance all wrong?" [9251-9800] -->
<h3><a>How do I scale, mirror, or wrap a texture?</a></h3>
<div>
@ -297,7 +298,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>
<!-- EDIT23 SECTION "How do I scale, mirror, or wrap a texture?" [9551-10092] -->
<!-- EDIT23 SECTION "How do I scale, mirror, or wrap a texture?" [9801-10342] -->
<h3><a>How do I change color or shininess of an material?</a></h3>
<div>
@ -310,7 +311,7 @@ Use the AssetManager to load Materials, and change material settings.
</p>
</div>
<!-- EDIT24 SECTION "How do I change color or shininess of an material?" [10093-10680] -->
<!-- EDIT24 SECTION "How do I change color or shininess of an material?" [10343-10930] -->
<h3><a>How do I make a surface wood, stone, metal, etc?</a></h3>
<div>
@ -323,7 +324,7 @@ Create Textures as image files. Use the AssetManager to load a Material and use
</p>
</div>
<!-- EDIT25 SECTION "How do I make a surface wood, stone, metal, etc?" [10681-11454] -->
<!-- EDIT25 SECTION "How do I make a surface wood, stone, metal, etc?" [10931-11704] -->
<h3><a>Why are materials too bright, too dark, or flickering?</a></h3>
<div>
@ -332,7 +333,7 @@ If you use a lit material (based on Lighting.j3md) then you must attach a light
</p>
</div>
<!-- EDIT26 SECTION "Why are materials too bright, too dark, or flickering?" [11455-12268] -->
<!-- EDIT26 SECTION "Why are materials too bright, too dark, or flickering?" [11705-12518] -->
<h3><a>How do I make geometries cast a shadow?</a></h3>
<div>
@ -345,7 +346,7 @@ Use com.jme3.shadow.BasicShadowRenderer together with com.jme3.light.Directional
</p>
</div>
<!-- EDIT27 SECTION "How do I make geometries cast a shadow?" [12269-12777] -->
<!-- EDIT27 SECTION "How do I make geometries cast a shadow?" [12519-13027] -->
<h3><a>How do I make materials transparent?</a></h3>
<div>
@ -361,7 +362,7 @@ Assign a texture with an alpha channel to a Material and set the Material&#039;s
</p>
</div>
<!-- EDIT28 SECTION "How do I make materials transparent?" [12778-13214] -->
<!-- EDIT28 SECTION "How do I make materials transparent?" [13028-13464] -->
<h3><a>How do I force or disable backface culling?</a></h3>
<div>
@ -372,7 +373,7 @@ You can switch the com.jme3.material.RenderState.FaceCullMode to Back, Front, Fr
<pre>material.getAdditionalRenderState&#40;&#41;.setFaceCullMode&#40;FaceCullMode.FrontAndBack&#41;;</pre>
</div>
<!-- EDIT29 SECTION "How do I force or disable backface culling?" [13215-13631] -->
<!-- EDIT29 SECTION "How do I force or disable backface culling?" [13465-13881] -->
<h3><a>Can I draw only an outline of the scene?</a></h3>
<div>
@ -388,12 +389,12 @@ Create a material and switch its renders state to wireframe.
</p>
</div>
<!-- EDIT30 SECTION "Can I draw only an outline of the scene?" [13632-13863] -->
<!-- EDIT30 SECTION "Can I draw only an outline of the scene?" [13882-14113] -->
<h2><a>I want to control the camera</a></h2>
<div>
</div>
<!-- EDIT31 SECTION "I want to control the camera" [13864-13904] -->
<!-- EDIT31 SECTION "I want to control the camera" [14114-14154] -->
<h3><a>How do I switch between third-person and first-person view ?</a></h3>
<div>
@ -415,18 +416,18 @@ chaseCam = new ChaseCamera&#40;cam, spatial, inputManager&#41;;</pre>
</ul>
</div>
<!-- EDIT32 SECTION "How do I switch between third-person and first-person view ?" [13905-14961] -->
<!-- EDIT32 SECTION "How do I switch between third-person and first-person view ?" [14155-15211] -->
<h3><a>How do I increase camera speed?</a></h3>
<div>
<pre>flyCam.setMoveSpeed&#40;50f&#41;;</pre>
</div>
<!-- EDIT33 SECTION "How do I increase camera speed?" [14962-15048] -->
<!-- EDIT33 SECTION "How do I increase camera speed?" [15212-15298] -->
<h2><a>Actions, Interactions, Physics</a></h2>
<div>
</div>
<!-- EDIT34 SECTION "Actions, Interactions, Physics" [15049-15091] -->
<!-- EDIT34 SECTION "Actions, Interactions, Physics" [15299-15341] -->
<h3><a>How do I implement game logic / game mechanics?</a></h3>
<div>
@ -437,7 +438,7 @@ Use Controls to define the behaviour of types of Spatials. Use Application State
</p>
</div>
<!-- EDIT35 SECTION "How do I implement game logic / game mechanics?" [15092-15653] -->
<!-- EDIT35 SECTION "How do I implement game logic / game mechanics?" [15342-15903] -->
<h3><a>How do I let players interact via keyboard?</a></h3>
<div>
@ -448,7 +449,7 @@ Use com.jme3.input.KeyInput and a Input Listener.
</p>
</div>
<!-- EDIT36 SECTION "How do I let players interact via keyboard?" [15654-15861] -->
<!-- EDIT36 SECTION "How do I let players interact via keyboard?" [15904-16111] -->
<h3><a>How do I let players interact by clicking?</a></h3>
<div>
@ -461,7 +462,7 @@ Players typically click the mouse to pick up objects, to open doors, to shoot a
</p>
</div>
<!-- EDIT37 SECTION "How do I let players interact by clicking?" [15862-16686] -->
<!-- EDIT37 SECTION "How do I let players interact by clicking?" [16112-16936] -->
<h3><a>How do I animate characters?</a></h3>
<div>
@ -474,7 +475,7 @@ Create an animated OgreMesh model with bones in a 3-D mesh editor (e.g. Blender)
</p>
</div>
<!-- EDIT38 SECTION "How do I animate characters?" [16687-17158] -->
<!-- EDIT38 SECTION "How do I animate characters?" [16937-17408] -->
<h3><a>How do I keep players from falling through walls and floors?</a></h3>
<div>
@ -485,7 +486,7 @@ Use collision detection. The most common solution is to use jme&#039;s physics i
</p>
</div>
<!-- EDIT39 SECTION "How do I keep players from falling through walls and floors?" [17159-17521] -->
<!-- EDIT39 SECTION "How do I keep players from falling through walls and floors?" [17409-17771] -->
<h3><a>How do I make balls/wheels/etc bounce and roll?</a></h3>
<div>
@ -498,7 +499,7 @@ Add physics controls to Spatials and give them spherical or cylindrical bounding
</p>
</div>
<!-- EDIT40 SECTION "How do I make balls/wheels/etc bounce and roll?" [17522-18119] -->
<!-- EDIT40 SECTION "How do I make balls/wheels/etc bounce and roll?" [17772-18369] -->
<h3><a>How do I debug weird Physics behaviour?</a></h3>
<div>
@ -508,7 +509,7 @@ Maybe your collision shapes overlap – or they are not where you think they are
<pre>bulletAppState.getPhysicsSpace&#40;&#41;.enableDebug&#40;assetManager&#41;;</pre>
</div>
<!-- EDIT41 SECTION "How do I debug weird Physics behaviour?" [18120-18433] -->
<!-- EDIT41 SECTION "How do I debug weird Physics behaviour?" [18370-18683] -->
<h3><a>How do I make a walking character?</a></h3>
<div>
@ -521,7 +522,7 @@ Code samples: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplay
</p>
</div>
<!-- EDIT42 SECTION "How do I make a walking character?" [18434-18992] -->
<!-- EDIT42 SECTION "How do I make a walking character?" [18684-19242] -->
<h3><a>How do I steer vehicles?</a></h3>
<div>
@ -534,7 +535,7 @@ Code samples: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplay
</p>
</div>
<!-- EDIT43 SECTION "How do I steer vehicles?" [18993-19360] -->
<!-- EDIT43 SECTION "How do I steer vehicles?" [19243-19610] -->
<h3><a>Can objects swing like a pendulums, chains, ropebridges?</a></h3>
<div>
@ -546,12 +547,12 @@ Use a PhysicsControl&#039;s hinges and joints.
</p>
</div>
<!-- EDIT44 SECTION "Can objects swing like a pendulums, chains, ropebridges?" [19361-19761] -->
<!-- EDIT44 SECTION "Can objects swing like a pendulums, chains, ropebridges?" [19611-20011] -->
<h2><a>Default GUI Display</a></h2>
<div>
</div>
<!-- EDIT45 SECTION "Default GUI Display" [19762-19793] -->
<!-- EDIT45 SECTION "Default GUI Display" [20012-20043] -->
<h3><a>What are these FPS/Objects/Vertices/Triangles statistics?</a></h3>
<div>
@ -563,7 +564,7 @@ At the bottom left of every default SimpleGame, you see the <a href="/com/jme3/g
</p>
</div>
<!-- EDIT46 SECTION "What are these FPS/Objects/Vertices/Triangles statistics?" [19794-20321] -->
<!-- EDIT46 SECTION "What are these FPS/Objects/Vertices/Triangles statistics?" [20044-20571] -->
<h3><a>How do I get rid of the FPS/Objects statistics?</a></h3>
<div>
@ -582,7 +583,7 @@ setDisplayStatView(false); // to hide the statistics </pre>
</p>
</div>
<!-- EDIT47 SECTION "How do I get rid of the FPS/Objects statistics?" [20322-20586] -->
<!-- EDIT47 SECTION "How do I get rid of the FPS/Objects statistics?" [20572-20836] -->
<h3><a>How do I display score, health, mini-maps, status icons?</a></h3>
<div>
@ -595,7 +596,7 @@ Attach text and pictures to the orthogonal <code>guiNode</code> to create a head
</p>
</div>
<!-- EDIT48 SECTION "How do I display score, health, mini-maps, status icons?" [20587-21179] -->
<!-- EDIT48 SECTION "How do I display score, health, mini-maps, status icons?" [20837-21429] -->
<h3><a>How do I display buttons and UI controls?</a></h3>
<div>
@ -608,7 +609,7 @@ Sample Code: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
</p>
</div>
<!-- EDIT49 SECTION "How do I display buttons and UI controls?" [21180-21624] -->
<!-- EDIT49 SECTION "How do I display buttons and UI controls?" [21430-21874] -->
<h3><a>How do i display a loading screen?</a></h3>
<div>
@ -619,12 +620,12 @@ Instead of having a frozen frame while your games loads, you can have a loading
</p>
</div>
<!-- EDIT50 SECTION "How do i display a loading screen?" [21625-21841] -->
<!-- EDIT50 SECTION "How do i display a loading screen?" [21875-22091] -->
<h2><a>Nifty GUI</a></h2>
<div>
</div>
<!-- EDIT51 SECTION "Nifty GUI" [21842-21863] -->
<!-- EDIT51 SECTION "Nifty GUI" [22092-22113] -->
<h3><a>I get NoSuchElementException when adding controls (buttons etc)!</a></h3>
<div>
@ -635,7 +636,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>
<!-- EDIT52 SECTION "I get NoSuchElementException when adding controls (buttons etc)!" [21864-22099] -->
<!-- EDIT52 SECTION "I get NoSuchElementException when adding controls (buttons etc)!" [22114-22349] -->
<h3><a>Where can I find example code of Nifty GUI&#039;s XML and Java classes?</a></h3>
<div>
@ -644,7 +645,7 @@ Verify that you include a controls definition file link in your <acronym title="
</p>
</div>
<!-- EDIT53 SECTION "Where can I find example code of Nifty GUI's XML and Java classes?" [22100-22262] -->
<!-- EDIT53 SECTION "Where can I find example code of Nifty GUI's XML and Java classes?" [22350-22512] -->
<h3><a>Is there Java Doc for Nifty GUI?</a></h3>
<div>
@ -653,12 +654,12 @@ Verify that you include a controls definition file link in your <acronym title="
</p>
</div>
<!-- EDIT54 SECTION "Is there Java Doc for Nifty GUI?" [22263-22388] -->
<!-- EDIT54 SECTION "Is there Java Doc for Nifty GUI?" [22513-22638] -->
<h2><a>I want to create an environment with sounds, effects, and landscapes</a></h2>
<div>
</div>
<!-- EDIT55 SECTION "I want to create an environment with sounds, effects, and landscapes" [22389-22469] -->
<!-- EDIT55 SECTION "I want to create an environment with sounds, effects, and landscapes" [22639-22719] -->
<h3><a>How do I play sounds and noises?</a></h3>
<div>
@ -671,7 +672,7 @@ Use AudioRenderer, Listener, and AudioNode from com.jme3.audio.*.
</p>
</div>
<!-- EDIT56 SECTION "How do I play sounds and noises?" [22470-22773] -->
<!-- EDIT56 SECTION "How do I play sounds and noises?" [22720-23023] -->
<h3><a>How do I make fire, smoke, explosions, swarms, magic spells?</a></h3>
<div>
@ -684,7 +685,7 @@ For swarm like effects you use particle emitters.
</p>
</div>
<!-- EDIT57 SECTION "How do I make fire, smoke, explosions, swarms, magic spells?" [22774-23429] -->
<!-- EDIT57 SECTION "How do I make fire, smoke, explosions, swarms, magic spells?" [23024-23679] -->
<h3><a>How do I make water, waves, reflections?</a></h3>
<div>
@ -697,7 +698,7 @@ Use a special post-processor renderer from com.jme3.water.*.
</p>
</div>
<!-- EDIT58 SECTION "How do I make water, waves, reflections?" [23430-24190] -->
<!-- EDIT58 SECTION "How do I make water, waves, reflections?" [23680-24440] -->
<h3><a>How do I make fog, bloom, blur, light scrattering?</a></h3>
<div>
@ -708,7 +709,7 @@ Use special post-processor renderers from com.jme3.post.*.
</p>
</div>
<!-- EDIT59 SECTION "How do I make fog, bloom, blur, light scrattering?" [24191-24366] -->
<!-- EDIT59 SECTION "How do I make fog, bloom, blur, light scrattering?" [24441-24616] -->
<h3><a>How do I generate a terrain?</a></h3>
<div>
@ -721,7 +722,7 @@ Use com.jme3.terrain.*. The JMonkeyEngine also provides you with a Terrain Edito
</p>
</div>
<!-- EDIT60 SECTION "How do I generate a terrain?" [24367-24750] -->
<!-- EDIT60 SECTION "How do I generate a terrain?" [24617-25000] -->
<h3><a>How do I make a sky?</a></h3>
<div>
@ -739,12 +740,12 @@ skyGeo.setQueueBucket&#40;Bucket.Sky&#41; </pre>
</p>
</div>
<!-- EDIT61 SECTION "How do I make a sky?" [24751-25130] -->
<!-- EDIT61 SECTION "How do I make a sky?" [25001-25380] -->
<h2><a>I want to access to back-end properties</a></h2>
<div>
</div>
<!-- EDIT62 SECTION "I want to access to back-end properties" [25131-25182] -->
<!-- EDIT62 SECTION "I want to access to back-end properties" [25381-25432] -->
<h3><a>How do I read out graphic card capabilities?</a></h3>
<div>
@ -801,7 +802,7 @@ FloatColorBuffer, FloatDepthBuffer, PackedFloatTexture, SharedExponentTexture, P
TextureCompressionLATC, NonPowerOfTwoTextures, MeshInstancing]</pre>
</div>
<!-- EDIT63 SECTION "How do I read out graphic card capabilities?" [25183-27263] -->
<!-- EDIT63 SECTION "How do I read out graphic card capabilities?" [25433-27513] -->
<h3><a>How do I optimize the heck out of the Scene Graph?</a></h3>
<div>
@ -818,7 +819,7 @@ Batching means that all Geometries with the same Material are combined into one
</p>
</div>
<!-- EDIT64 SECTION "How do I optimize the heck out of the Scene Graph?" [27264-27733] -->
<!-- EDIT64 SECTION "How do I optimize the heck out of the Scene Graph?" [27514-27983] -->
<h3><a>How do I prevent users from unzipping my JAR?</a></h3>
<div>
@ -828,12 +829,12 @@ Add an <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><pa
</p>
</div>
<!-- EDIT65 SECTION "How do I prevent users from unzipping my JAR?" [27734-27983] -->
<!-- EDIT65 SECTION "How do I prevent users from unzipping my JAR?" [27984-28233] -->
<h2><a>I want to do maths</a></h2>
<div>
</div>
<!-- EDIT66 SECTION "I want to do maths" [27984-28014] -->
<!-- EDIT66 SECTION "I want to do maths" [28234-28264] -->
<h3><a>What does addLocal() / multLocal() etc mean?</a></h3>
<div>
@ -886,7 +887,7 @@ Many maths functions (mult(), add(), subtract(), etc) come as local and a non-lo
</ol>
</div>
<!-- EDIT67 SECTION "What does addLocal() / multLocal() etc mean?" [28015-29376] -->
<!-- EDIT67 SECTION "What does addLocal() / multLocal() etc mean?" [28265-29626] -->
<h3><a>What is the difference between World and Local coordinates?</a></h3>
<div>
@ -896,7 +897,7 @@ World coordinates of a Spatial are its absolute coordinates in the 3D scene (thi
</p>
</div>
<!-- EDIT68 SECTION "What is the difference between World and Local coordinates?" [29377-29686] -->
<!-- EDIT68 SECTION "What is the difference between World and Local coordinates?" [29627-29936] -->
<h3><a>How do I convert Degrees to Radians?</a></h3>
<div>
@ -910,5 +911,5 @@ Multiply degree value by FastMath.DEG_TO_RAD to convert it to radians.
</span></div>
</div>
<!-- EDIT69 SECTION "How do I convert Degrees to Radians?" [29687-] -->
<!-- EDIT69 SECTION "How do I convert Degrees to Radians?" [29937-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:faq?do=export_xhtmlbody">view online version</a></em></p>

@ -91,39 +91,46 @@ E.g. models, terrains; materials, textures; noises, music, voices; video, cutsce
Use an <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Issue_tracking_system"><param name="text" value="<html><u>issue and bug tracker</u></html>"><param name="textColor" value="blue"></object> to outline what features you want and what components are needed.
</p>
<ol>
<li><div> Pre-Alpha</div>
<li><div> Pre-Alpha Development</div>
<ul>
<li><div> Artwork: Test asset loading and saving with mock-ups and stock art.</div>
</li>
<li><div> Lay out the overall application flow, i.e. switching between intro / options / game screen, etc.</div>
</li>
<li><div> Get one typical level working. E.g. if the game is a &quot;Jump&#039;n&#039;Run&quot;, jumping and running must work before you can announce Alpha.</div>
<li><div> Get one typical level working before you can announce the Alpha Release. <br/>
E.g. if the game is a &quot;Jump&#039;n&#039;Run&quot;, jumping and running must work.</div>
</li>
</ul>
</li>
<li><div> Alpha Release</div>
</li>
<li><div> Pre-Beta Development</div>
<ul>
<li><div> Artwork: Replace all mock-ups with first drafts of real media and level maps.</div>
</li>
<li><div> Run alpha tests, track bugs, debug, optimize.</div>
<li><div> Have your team members review and &quot;alpha test&quot; it on various systems, track bugs, debug, optimize.</div>
</li>
<li><div> Declare <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Feature_freeze"><param name="text" value="<html><u>Feature Freeze</u></html>"><param name="textColor" value="blue"></object> before you announce Beta. This prevents a bottomless pit of new bugs.</div>
<li><div> Declare <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Feature_freeze"><param name="text" value="<html><u>Feature Freeze</u></html>"><param name="textColor" value="blue"></object> before you announce the Beta Release to prevent a bottomless pit of new bugs.</div>
</li>
</ul>
</li>
<li><div> Beta Release</div>
</li>
<li><div> Post-Beta Development</div>
<ul>
<li><div> Artwork: Fill in the final media and level maps.</div>
</li>
<li><div> Have external people review and &quot;beta test&quot; it (track bugs).</div>
<li><div> Have external people review and &quot;beta test&quot; it, make it easy to report bugs.</div>
</li>
<li><div> Even out the kinks in code and gameplay – don&#039;t add any more new features.</div>
<li><div> Fix high-priority bugs, even out the kinks in code and gameplay, don&#039;t add new features for now!</div>
</li>
</ul>
</li>
<li><div> Gamma, Delta = Release Candidates</div>
<li><div> Gamma Release, Delta Release… = Release Candidates</div>
<ul>
<li><div> Test the heck out of it. Last chance to find a horrible bug.</div>
<li><div> Think you&#039;re done? Make test runs incl. packaging and distribution. (Order form? download?)</div>
</li>
<li><div> Test the heck out of it. Last chance to find and fix a horrible bug.</div>
</li>
</ul>
</li>
@ -137,7 +144,7 @@ How you name or number these stages is fully up to your team. Development teams
</p>
</div>
<!-- EDIT4 SECTION "Planning Development Milestones" [2001-3484] -->
<!-- EDIT4 SECTION "Planning Development Milestones" [2001-3785] -->
<h3><a>Use File Version Control</a></h3>
<div>
@ -156,7 +163,7 @@ If you don&#039;t know which to choose, Subversion is a good choice for starters
</ul>
</div>
<!-- EDIT5 SECTION "Use File Version Control" [3485-4317] -->
<!-- EDIT5 SECTION "Use File Version Control" [3786-4618] -->
<h2><a>Multi-Media Asset Pipeline</a></h2>
<div>
<div><table>
@ -182,14 +189,14 @@ If you don&#039;t know which to choose, Subversion is a good choice for starters
<td> Convert Models to j3o format. Move j3o files into <code>assets/Models</code>. </td><td>Don&#039;t reference Blender/Ogre/OBJ files in your load() code, because these unoptimized files are not packaged into the JAR.</td>
</tr>
</table></div>
<!-- EDIT7 TABLE [4358-5244] -->
<!-- EDIT7 TABLE [4659-5545] -->
<p>
Learn details about the <a href="/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a> here.
</p>
</div>
<!-- EDIT6 SECTION "Multi-Media Asset Pipeline" [4318-5327] -->
<!-- EDIT6 SECTION "Multi-Media Asset Pipeline" [4619-5628] -->
<h2><a>Development Phase</a></h2>
<div>
@ -201,7 +208,7 @@ Even for large experienced game producers, the creation of such a complex game i
</p>
</div>
<!-- EDIT8 SECTION "Development Phase" [5328-5977] -->
<!-- EDIT8 SECTION "Development Phase" [5629-6278] -->
<h3><a>Extend SimpleApplication</a></h3>
<div>
@ -220,7 +227,7 @@ For your future game releases, you will want to rely on your own base framework:
</p>
</div>
<!-- EDIT9 SECTION "Extend SimpleApplication" [5978-7091] -->
<!-- EDIT9 SECTION "Extend SimpleApplication" [6279-7392] -->
<h3><a>Where to Start?</a></h3>
<div>
@ -229,26 +236,26 @@ For your future game releases, you will want to rely on your own base framework:
You have a list of features that you want in game, but which one do you implement first? You will keep adding features to a project that grows more and more complex, how can you minimize the amount of rewriting required?
</p>
<ol>
<li><div> Make sure the game&#039;s high-level frame (screen switching, networking, loading/saving) is sound and solid. </div>
<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: 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 cube&quot;) and work your way up, don&#039;t start with a whole scene.</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 soruces of error.</div>
</li>
<li><div> Implement low-complexity decorations (audio and visual effects) last.</div>
</li>
<li><div> Test for side-effects on existing code after you add a feature.</div>
<li><div> Test for side-effects on existing code after you add a new feature (regression test).</div>
</li>
</ol>
<p>
<p><div>Acknowledge whether you want a feature because it is necessary for gameplay, or simply because &quot;everyone else has it&quot;. Your goal should be to bring out the essence of your game idea. Don&#039;t water down gameplay but attempting to make it &quot;do everything, but better&quot;. Successful high-performance games are the ones where someone made smart decisions what to keep and what to drop.
<p><div>Acknowledge whether you want a feature because it is necessary for gameplay, or simply because &quot;everyone else has it&quot;. Your goal should be to bring out the essence of your game idea. Don&#039;t water down gameplay by attempting to make it &quot;do everything, but better&quot;. Successful high-performance games are the ones where someone made smart decisions what to keep and what to <em>drop</em>.
</div></p>
</p>
</div>
<!-- EDIT10 SECTION "Where to Start?" [7092-8371] -->
<!-- EDIT10 SECTION "Where to Start?" [7393-8760] -->
<h3><a>The Smart Way to Add Custom Methods and Fields</a></h3>
<div>
@ -272,28 +279,25 @@ Game entities (<code>Nodes</code> and <code>Geometry</code>s) often carry custom
</ul>
</div>
<!-- EDIT11 SECTION "The Smart Way to Add Custom Methods and Fields" [8372-9720] -->
<!-- EDIT11 SECTION "The Smart Way to Add Custom Methods and Fields" [8761-10109] -->
<h3><a>The Smart Way to Access Game Features</a></h3>
<div>
<p>
<a href="/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html">SimpleApplication</a> gives you access to game features such as a the rootNode, assetManager, guiNode, inputManager, audioManager, physicsSpace, viewPort, and the camera. But what if you need access to the assetManager or rootNode etc from another class? Don&#039;t pass around lots of object references in constructors. This is a sign that this class should be designed as an <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">AppState</a> (read details there).
</p>
<p>
An AppState has access to all game features in the SimpleApplication via the <code>this.app</code> and <code>this.stateManager</code> objects.
<a href="/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html">SimpleApplication</a> gives you access to game features such as a the rootNode, assetManager, guiNode, inputManager, audioManager, physicsSpace, viewPort, and the camera. But what if you need this access also from another class? Don&#039;t extend SimpleApplication a second time, and don&#039;t pass around tons of object references in constructors! Needing access to application level objects is a sign that this class should be designed as an <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">AppState</a> (read details there).
</p>
<p>
Examples:
An AppState has access to all game features in the SimpleApplication via the <code>this.app</code> and <code>this.stateManager</code> objects. Examples:
</p>
<pre>Spatial sky = SkyFactory.createSky&#40;this.app.getAssetManager&#40;&#41;, &quot;sky.dds&quot;, false&#41;;
...
this.app.getRootNode&#40;&#41;.attachChild&#40; sky &#41;;</pre>
</div>
<!-- EDIT12 SECTION "The Smart Way to Access Game Features" [9721-10493] -->
<!-- EDIT12 SECTION "The Smart Way to Access Game Features" [10110-10947] -->
<h3><a>The Smart Way to Implement Game Logic</a></h3>
<div>
@ -355,38 +359,38 @@ 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" [10494-13296] -->
<!-- EDIT13 SECTION "The Smart Way to Implement Game Logic" [10948-13750] -->
<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, and don&#039;t change the scene graph from outside the update loop.</div>
<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>
<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" [13297-13969] -->
<!-- EDIT14 SECTION "Optimize Application Performance" [13751-14474] -->
<h3><a>Don&#039;t Mess With Geometric State</a></h3>
<div>
<p>
These tips are especially for users who already know jME2. Automatic handling of the Geometric State has improved in jME3, and it is now a best practice to <em>not</em> mess with it.
<strong>These tips are especially important for users who already know jME2.</strong> Automatic handling of the Geometric State has improved in jME3, and it is now a best practice to <em>not</em> mess with it.
</p>
<ul>
<li><div> Do not call updateGeometricState() on anything but the root node!</div>
<li><div> Do not call <code>updateGeometricState()</code> on anything but the root node!</div>
</li>
<li><div> Do not override or mess with updateGeometricState() at all.</div>
<li><div> Do not override or mess with <code>updateGeometricState()</code> at all.</div>
</li>
<li><div> Do not use getLocalTranslation().set() to move a spatial, always use setLocalTranslation().</div>
<li><div> Do not use <code>getLocalTranslation().set()</code> to move a spatial in jME3, always use <code>setLocalTranslation()</code>.</div>
</li>
</ul>
</div>
<!-- EDIT15 SECTION "Don't Mess With Geometric State" [13970-14421] -->
<!-- EDIT15 SECTION "Don't Mess With Geometric State" [14475-14964] -->
<h3><a>Maintain Internal Documentation</a></h3>
<div>
@ -397,7 +401,7 @@ It&#039;s unlikely you will fully document <em>every</em> class you write, we he
<ul>
<li><div> What is this? How does it solve its task (input, algorithm used, output, side-effects)? </div>
</li>
<li><div> Write down limits (e.g. min/max values) and defaults while you still remember.</div>
<li><div> Write down implicit limits (e.g. min/max values) and defaults while you still remember.</div>
</li>
<li><div> In which situation do I want to use this, is this part of a larger process? Is this step required, or what are the alternatives? </div>
</li>
@ -409,13 +413,13 @@ Treat javadoc as messages to your future self. &quot;genNextVal() generates the
</p>
</div>
<!-- EDIT16 SECTION "Maintain Internal Documentation" [14422-15149] -->
<!-- EDIT16 SECTION "Maintain Internal Documentation" [14965-15701] -->
<h2><a>Debugging and Test Phase</a></h2>
<div>
<p>
<strong>A <a href="/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html">Java Debugger</a></strong> is included in the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>. It allows you to set a break point in your code near the point where an exception happens. Then you step through the execution line by line and watch object and variable states to detect where the bug starts.
<strong>A <a href="/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html">Java Debugger</a></strong> is included in the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>. It allows you to set a break point in your code near the line of code where an exception happens. Then you step through the execution line by line and watch object and variable states live, to detect where the bug starts.
</p>
<p>
@ -423,7 +427,7 @@ 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 side-effects. Keep the test classes in a test directory in the 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>
@ -431,20 +435,20 @@ Treat javadoc as messages to your future self. &quot;genNextVal() generates the
</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 the gameplay out by themselves (you only can include the usual read-me and help docs). Provide the testers with an easy method to report back problems, or why they gave up. Evaluate whether these problems are exceptions or must be fixed for the game to be playable.
<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" [15150-17635] -->
<!-- EDIT17 SECTION "Debugging and Test Phase" [15702-18318] -->
<h2><a>Release Phase</a></h2>
<div>
</div>
<!-- EDIT18 SECTION "Release Phase" [17636-17662] -->
<!-- EDIT18 SECTION "Release Phase" [18319-18345] -->
<h3><a>Pre-Release To-Do List</a></h3>
<div>
<ul>
<li><div> Prepare a web page, advertise, etc</div>
<li><div> Prepare a web page, a cool slogan, advertisements, etc</div>
</li>
<li><div> Verify that all assets are up-to-date and converted to .j3o. </div>
</li>
@ -454,28 +458,28 @@ Treat javadoc as messages to your future self. &quot;genNextVal() generates the
</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: Cool 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><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>
<li><div> Get a certificate if it is required for your distribution method (see below).</div>
<li><div> Get a certificate if one is required for your distribution method (see below).</div>
</li>
<li><div> Specify a classification rating.</div>
<li><div> Specify a <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Video_game_content_rating_system#Comparison"><param name="text" value="<html><u>classification rating</u></html>"><param name="textColor" value="blue"></object> (needed for e.g. app stores).</div>
</li>
</ul>
</div>
<!-- EDIT19 SECTION "Pre-Release To-Do List" [17663-18475] -->
<!-- EDIT19 SECTION "Pre-Release To-Do List" [18346-19297] -->
<h3><a>Distributing the Executables</a></h3>
<div>
<p>
The <a href="/com/jme3/gde/core/docs/sdk/application_deployment.html">jMonkeyEngine SDK helps you with deployment</a>: You specify your branding and deployment options in the Project Properties dialog, and then choose Clean and Build from the context menu. If you use another IDE, then consult the IDE&#039;s documentation.
The <a href="/com/jme3/gde/core/docs/sdk/application_deployment.html">jMonkeyEngine SDK helps you with deployment</a>: You specify your branding and deployment options in the Project Properties dialog, and then choose Clean and Build from the context menu. <strong>If you use another IDE, consult this IDE&#039;s documentation.</strong>
</p>
<p>
Decide whether you want to release your game as WebStart, Desktop JAR, or 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>
@ -503,7 +507,7 @@ Decide whether you want to release your game as WebStart, Desktop JAR, or Applet
(.APK)</td><td>Game runs on Android devices.</td><td>Android devices do not support post-procesor effects.</td>
</tr>
</table></div>
<!-- EDIT21 TABLE [18909-20129] -->
<!-- EDIT21 TABLE [19751-20971] -->
<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.
@ -515,5 +519,5 @@ The distribution appears in a newly generated <code>dist</code> directory inside
</p>
</div>
<!-- EDIT20 SECTION "Distributing the Executables" [18476-] -->
<!-- EDIT20 SECTION "Distributing the Executables" [19298-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:intermediate:best_practices?do=export_xhtmlbody">view online version</a></em></p>

@ -26,7 +26,7 @@ You want to make the most of your 3D models by specifying good looking material
</p>
<p>
If you want more advanced background info: You can learn more about <a href="/com/jme3/gde/core/docs/jme3/advanced/material_definitions.html">Material Definitions</a> in general here. You can find the full list of Material Parameters in the <a href="/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html">Material Definitions Properties</a> overview. The following sections introduce you to the most commonly used cases. You typically initialize Material objects in the <code>initSimpleApp()</code> method, and configure them using the setters described here. Then load the Materials using <code>myGeometry.setMaterial(mat)</code>.
If you want more advanced background info: You can learn more about <a href="/com/jme3/gde/core/docs/jme3/advanced/material_definitions.html">Material Definitions</a> in general here. You can find the full list of Material Parameters in the <a href="/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html">Material Definitions Properties</a> overview. The following sections introduce you to the most commonly used cases. You typically initialize Material objects in the <code>simpleInitApp()</code> method, and configure them using the setters described here. Then load the Materials using <code>myGeometry.setMaterial(mat)</code>.
</p>
</div>
@ -230,7 +230,7 @@ viewPort.addProcessor&#40;fpp&#41;;</pre>
</div>
</li>
<li><div> Specify a <code>Glow</code> color. <br/>
A ColorRGBA value of your choice, e.g. choose a warm or cold color for different effects, or white for a neutral glow.<pre>mat.setColor&#40;&quot;Glow&quot;,ColorRGBA.White&#41;;</pre>
A ColorRGBA value of your choice, e.g. choose a warm or cold color for different effects, or white for a neutral glow.<pre>mat.setColor&#40;&quot;GlowColor&quot;,ColorRGBA.White&#41;;</pre>
</div>
</li>
<li><div> (Optional) Specify a <code>GlowMap</code> texture. <br/>
@ -244,7 +244,7 @@ This texture outlines in detail where the DiffuseMap texture glows. If you don&#
To deactivate glow:
</p>
<ul>
<li><div> Set the <code>Glow</code> color to <code>ColorRGBA.Black</code>.<pre>mat.setFloat&#40;&quot;Glow&quot;, ColorRGBA.Black&#41;;</pre>
<li><div> Set the <code>Glow</code> color to <code>ColorRGBA.Black</code>.<pre>mat.setColor&#40;&quot;GlowColor&quot;, ColorRGBA.Black&#41;;</pre>
</div>
</li>
</ul>
@ -255,7 +255,7 @@ Learn more about <a href="/com/jme3/gde/core/docs/jme3/advanced/bloom_and_glow.h
</p>
</div>
<!-- EDIT8 SECTION "(Optional) Glow" [7328-8393] -->
<!-- EDIT8 SECTION "(Optional) Glow" [7328-8403] -->
<h2><a>(Optional) Transparent</a></h2>
<div>
@ -293,12 +293,13 @@ To make a Geometry transparent or translucent:
<li><div> Specify BlendMode Alpha for the Material. <pre>mat.getAdditionalRenderState&#40;&#41;.setBlendMode&#40;BlendMode.Alpha&#41;;</pre>
</div>
</li>
<li><div> Put the Geometry (not the Material!) in the appropriate render queue</div>
<li><div> Put the Geometry (not the Material!) in the appropriate render queue bucket. <br/>
Objects in the translucent bucket (e.g. particles) are not affected by SceneProcessors (e.g. shadows). Obejcts in the transparent bucket (e.g. foliage) are affected by SceneProcessors (e.g. shadows).</div>
<ul>
<li><div> <pre>geo.setQueueBucket&#40;Bucket.Translucent&#41;;</pre>
<li><div> <pre>geo.setQueueBucket&#40;Bucket.Translucent&#41;; </pre>
</div>
</li>
<li><div> <pre>geo.setQueueBucket&#40;Bucket.Transparent&#41;;</pre>
<li><div> <pre>geo.setQueueBucket&#40;Bucket.Transparent&#41;; </pre>
</div>
</li>
</ul>
@ -325,7 +326,7 @@ getAdditionalRenderState().setAlphaFallOff(0.5f);</td><td>Enables Alpha Testing
Deactivate Alpha Testing for gradually <strong>translucent</strong> objects, such as colored glass, smoked glass, ghosts.</td>
</tr>
</table></div>
<!-- EDIT10 TABLE [9801-11189] -->
<!-- EDIT10 TABLE [10024-11412] -->
<p>
<p><div>It is possible to load a DiffuseMap texture that has an Alpha channel, and combine it with an underlying Material Color.
@ -338,7 +339,7 @@ Deactivate Alpha Testing for gradually <strong>translucent</strong> objects, suc
</p>
</div>
<!-- EDIT9 SECTION "(Optional) Transparent" [8394-11828] -->
<!-- EDIT9 SECTION "(Optional) Transparent" [8404-12051] -->
<h2><a>(Optional) Wireframe</a></h2>
<div>
@ -355,7 +356,7 @@ Additionally to the above settings, you can switch off and on a wireframe render
<td>getAdditionalRenderState().setWireframe(true);</td><td>Switch to showing the (textured) Material in wireframe mode. The wireframe optionally uses the Material&#039;s <code>Color</code> value.</td><td>Use wireframes to debug meshes, or for a &quot;matrix&quot; or &quot;holodeck&quot; effect.</td>
</tr>
</table></div>
<!-- EDIT12 TABLE [12043-12328] --><div><span>
<!-- EDIT12 TABLE [12266-12551] --><div><span>
<a href="/wiki/doku.php/tag:material?do=showtag&amp;tag=tag%3Amaterial">material</a>,
<a href="/wiki/doku.php/tag:texture?do=showtag&amp;tag=tag%3Atexture">texture</a>,
<a href="/wiki/doku.php/tag:effect?do=showtag&amp;tag=tag%3Aeffect">effect</a>,
@ -365,5 +366,5 @@ Additionally to the above settings, you can switch off and on a wireframe render
</span></div>
</div>
<!-- EDIT11 SECTION "(Optional) Wireframe" [11829-] -->
<!-- EDIT11 SECTION "(Optional) Wireframe" [12052-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:intermediate:how_to_use_materials?do=export_xhtmlbody">view online version</a></em></p>

@ -14,7 +14,7 @@ This page is intended as a reference collection of optimization tricks that can
<p>
The more Geometry objects are added to the scene, the harder it gets to handle them in a speedy fashion.
The reason for this is, that for every object a render command must be done, here is a bottleneck between the CPU and the graphics card.
The reason for this is that a render command must be done for every object, potentially creating a bottleneck between the CPU and the graphics card.
</p>
<p>
@ -32,80 +32,65 @@ You can optimize nodes using the SceneComposer in the <acronym title="Software D
<ul>
<li><div> Using GeometryBatchFactory merges individual Geometries into a single mesh. Thereby it becomes hard to apply specific Materials or to remove a single Geometry. Therefore it should be used for static Geometry only that does not require frequent changes or individual materials/texturing. </div>
</li>
<li><div>Using Texture atlases might be a way to provide a limited individual texturing.</div>
<li><div> Using a <a href="/com/jme3/gde/core/docs/jme3/advanced/texture_atlas.html">Texture Atlas</a> provides limited individual texturing of batched geometries.</div>
</li>
</ul>
</div>
<!-- EDIT2 SECTION "Maintain low Geometry count" [157-1156] -->
<!-- EDIT2 SECTION "Maintain low Geometry count" [157-1193] -->
<h2><a>Avoid creating new objects</a></h2>
<div>
<p>
When you use math operations like vectorA.mult(vectorB); new objects are created that have to be garbage collected when you don&#039;t use them anymore. Check your math operations for opportunities to use the local version of the math operations, e.g. vectorA.multLocal(vectorB). This way the result is stored in vectorA and no new object needs to be created.
When you use math operations like <code>vectorA.mult(vectorB);</code>, they create new objects for the result. These objects have to be garbage collected when you don&#039;t use them anymore.
</p>
<p>
Check your math operations for opportunities to use the <em>local</em> version of the math operations, e.g. <code>vectorA.multLocal(vectorB)</code>. Local methods store the result in vectorA and do not create a new object. Use local methods if you do not need to keep the previous vectorA.
</p>
</div>
<!-- EDIT3 SECTION "Avoid creating new objects" [1157-1550] -->
<!-- EDIT3 SECTION "Avoid creating new objects" [1194-1690] -->
<h2><a>Avoid large objects in physics</a></h2>
<div>
<p>
To offload much computation to the less CPU intense physics broadphase collision check, avoid having large meshes that cover e.g. the whole map of your level. Instead separate the collision shapes into multiple smaller parts. Obviously this can also be overdone as excessive amounts of physics objects can bring other performance problems.
To offload much computation to the less CPU intense physics broadphase collision check, avoid having large meshes that cover e.g. the whole map of your level. Instead, separate the collision shapes into multiple smaller chunks. Obviously, don&#039;t exaggerate the chunking, because having excessive amounts of physics objects similarly cause performance problems.
</p>
</div>
<!-- EDIT4 SECTION "Avoid large objects in physics" [1551-1933] -->
<!-- EDIT4 SECTION "Avoid large objects in physics" [1691-2095] -->
<h2><a>Check the Statistics</a></h2>
<div>
<p>
SimpleApplication displays a HUD with statistics. Use <code>app.setDisplayStatView(true);</code> to activate it, and false to deactivate it.
It counts how many FrameBuffers, Textures, or Shaders…
SimpleApplication displays a HUD with statistics. Use <code>app.setDisplayStatView(true);</code> to activate it, and false to deactivate it.
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>
<li><div> … were used during the last frame (F)</div>
</li>
<li><div> … exist in memory (M)</div>
<li><div> … exist in OpenGL memory (M)</div>
</li>
</ul>
<p>
Example:
For example, <code>Textures (M)</code> tells you how many textures are currently in OpenGL memory.
</p>
<ul>
<li><div> Textures (M) = how many textures are currently in the OpenGL driver</div>
</li>
<li><div> Textures(F) = how many textures were used in the last frame</div>
</li>
<li><div> Textures(S) = how many texture switches were done in the last frame.</div>
</li>
</ul>
<p>
Genereally jME3 is well optimized and optimizes these things correctly. The normal state is that the (S/F/M) values should be in the same order of magnitude; (S) values can be lower than (F).
Generally jME3 is well optimized and optimizes these things correctly. Read <a href="/com/jme3/gde/core/docs/jme3/advanced/statsview.html">statsview</a> to learn the details about how to interpret the statistics, how to tell whether your values are off, or whether they point out a problem.
</p>
<ul>
<li><div> If the (S) values are significantly higher than the (F) values, that means there are a lot of extra switches happening which can cause a performance loss. Switches happen for instance if you have many transparent materials in your scene. In that case this tells you that you should use fewer transparent materials.</div>
</li>
<li><div> If the (M) values are much higher than the (F) values, that means a lot more GL objects are in memory than are actually used. This can happen in rare cases, such as extremely large scenes (&gt; 2000 wu) with lots of spatials or lots of different materials. In this case, you should can optimize performance by identifying spatials to cull or detach.</div>
</li>
<li><div> The Object Count (Batch Count) is a very important value that indicates how many geometries were rendered in the last frame. In general, try to keep the object count around 100-200 to keep your game fast and responsive. If the count is permanently higher, hand-code rules that detach remote objects, or optimize a complex multi-material scene using: <pre>GeometryBatchFactory.optimize(complexNode, true);</pre>
</div>
</li>
<li><div> Same for Triangle Counts. If your game runs sluggishly and triangle (polygon) count is high, then you are rendering too many too detailed meshes. Tell your graphic designers to create models with lower polygon counts.</div>
</li>
<li><div> FrameBuffers: If you don&#039;t use any post-processing effects (FilterPostProcessor), this count should be zero. The more effects you use, the more FrameBuffers are in use. If this value is high while others are normal, you can speed up the application by using fewer post-processing effects.</div>
</li>
</ul>
<div><span>
<a href="/wiki/doku.php/tag:performance?do=showtag&amp;tag=tag%3Aperformance">performance</a>
</span></div>
</div>
<!-- EDIT5 SECTION "Check the Statistics" [1934-] -->
<!-- EDIT5 SECTION "Check the Statistics" [2096-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:intermediate:optimization?do=export_xhtmlbody">view online version</a></em></p>

@ -187,7 +187,7 @@ A browser Applet is a Java application that runs in the web browser while the us
</p>
<p>
These instrcutions assume that you have already written a game that you want to turn into an Applet. As opposed to other jME3 games, Applets cannot capture the mouse for navigation, so the camera will be switched to dragToRotate mode. The jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> and the included build script already contain what you need.
These instructions assume that you have already written a game that you want to turn into an Applet. As opposed to other jME3 games, Applets cannot capture the mouse for navigation, so the camera will be switched to dragToRotate mode. The jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> and the included build script already contain what you need.
</p>

@ -16,8 +16,13 @@ It was important to have always the lates version of the script that is compatib
Now we have an opportunity to simplify the import process by loading data directly from blender binary files: *.blend.
</p>
<p>
<p><div>Before you try to import models, make sure you <a href="/com/jme3/gde/core/docs/jme3/external/blender.html">created them properly</a>.
</div></p>
</p>
</div>
<!-- EDIT2 SECTION "Introduction" [53-791] -->
<!-- EDIT2 SECTION "Introduction" [53-911] -->
<h2><a>Usage</a></h2>
<div>
@ -27,7 +32,7 @@ By default a BlenderModelLoader is registered with your assetManager to load ble
</p>
</div>
<!-- EDIT3 SECTION "Usage" [792-1108] -->
<!-- EDIT3 SECTION "Usage" [912-1228] -->
<h2><a>Currently supported features</a></h2>
<div>
<ol>
@ -43,6 +48,8 @@ By default a BlenderModelLoader is registered with your assetManager to load ble
</li>
<li><div> User defined UV coordinates are read.</div>
</li>
<li><div> Loading BMesh is supported.</div>
</li>
</ul>
</li>
<li><div> Loading textures.</div>
@ -73,6 +80,8 @@ By default a BlenderModelLoader is registered with your assetManager to load ble
</li>
<li><div> Generated textures are &#039;baked&#039; into 2D textures and merged to create one flat texture. They can be freely merged with image textures.</div>
</li>
<li><div> Generated textures can be used as normal maps (but this looks poor when large amount of small triangles is used; incleasing generated texture ppu in blender key might help a little)</div>
</li>
</ul>
</li>
<li><div> Loading materials.</div>
@ -152,12 +161,10 @@ By default a BlenderModelLoader is registered with your assetManager to load ble
</ol>
</div>
<!-- EDIT4 SECTION "Currently supported features" [1109-4057] -->
<!-- EDIT4 SECTION "Currently supported features" [1229-4399] -->
<h2><a>Planned features.</a></h2>
<div>
<ol>
<li><div> Loading BMesh.</div>
</li>
<li><div> Loading sky.</div>
</li>
<li><div> Full support for scale and offset in texture input mapping.</div>
@ -173,7 +180,7 @@ By default a BlenderModelLoader is registered with your assetManager to load ble
</ol>
</div>
<!-- EDIT5 SECTION "Planned features." [4058-4337] -->
<!-- EDIT5 SECTION "Planned features." [4400-4660] -->
<h2><a>Known bugs/problems.</a></h2>
<div>
<ol>
@ -184,7 +191,7 @@ By default a BlenderModelLoader is registered with your assetManager to load ble
</ol>
</div>
<!-- EDIT6 SECTION "Known bugs/problems." [4338-4744] -->
<!-- EDIT6 SECTION "Known bugs/problems." [4661-5067] -->
<h2><a>Using BlenderLoader instead of BlenderModelLoader</a></h2>
<div>
@ -245,7 +252,7 @@ You can use ModelKey as well. This will give the same result as using default Bl
</p>
</div>
<!-- EDIT7 SECTION "Using BlenderLoader instead of BlenderModelLoader" [4745-6481] -->
<!-- EDIT7 SECTION "Using BlenderLoader instead of BlenderModelLoader" [5068-6804] -->
<h2><a>How does it work?</a></h2>
<div>
@ -291,7 +298,7 @@ Here is the list of how blender features are mapped into jme.
<td>Surface </td><td>Node </td><td>The surface is transformed to the proper mesh</td>
</tr>
</table></div>
<!-- EDIT9 TABLE [6955-7306] -->
<!-- EDIT9 TABLE [7278-7629] -->
<p>
Using BlenderLoader can allow you to use blend file as your local assets repository.
@ -301,7 +308,7 @@ Probably versions before 2.49 will work pretty well too, but I never checked tha
</p>
</div>
<!-- EDIT8 SECTION "How does it work?" [6482-7641] -->
<!-- EDIT8 SECTION "How does it work?" [6805-7964] -->
<h2><a>Notes</a></h2>
<div>
@ -342,5 +349,5 @@ See also:
</span></div>
</div>
<!-- EDIT10 SECTION "Notes" [7642-] -->
<!-- EDIT10 SECTION "Notes" [7965-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:blender?do=export_xhtmlbody">view online version</a></em></p>

@ -116,9 +116,12 @@ Or in your Java code
<hr />
<p>
See also
<strong>See also:</strong>
</p>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/material_specification.html">Developer specification of the jME3 material system (.j3md,.j3m)</a></div>
</li>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_material.html">Hello Material</a></div>
</li>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html">Materials Overview</a></div>

@ -96,13 +96,25 @@ Now let&#039;s have a look at the project&#039;s file structure in the File Expl
</li>
</ul>
</div>
<!-- EDIT2 SECTION "Creating a New jMonkeyEngine Project" [159-2931] -->
<h2><a>Working With Your Game Project</a></h2>
<div>
<p>
Project Configuration
</p>
<p>
Right-Click the project to open the Project properties.
</p>
<p>
In the Run section, specify the main class of your project. (Pressing F6 runs this main class.)
In the Run section, you can optionally configure JVM options and command line parameters <strong>(in most cases set the-Xms VMOption [NUMBER] m for the memory usage. for example (-Xms500m). see <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://performance.netbeans.org/howto/jvmswitches/"><param name="text" value="<html><u>http://performance.netbeans.org/howto/jvmswitches/</u></html>"><param name="textColor" value="blue"></object>)</strong>.
In the Application section, specify the game title (by default the game will be named BasicGame).
In the Application section, specify the vendor name (your name), a short description, your project&#039;s homepage, and a splash screen.
</p>
</div>
<!-- EDIT3 SECTION "Working With Your Game Project" [2932-2975] -->
<!-- EDIT2 SECTION "Creating a New jMonkeyEngine Project" [159-3635] -->
<h3><a>Project Configuration</a></h3>
<div>
@ -122,7 +134,7 @@ Right-Click the project to open the Project properties.
</ul>
</div>
<!-- EDIT4 SECTION "Project Configuration" [2976-3502] -->
<!-- EDIT3 SECTION "Project Configuration" [3636-4162] -->
<h3><a>Clean, Build and Run Cycle</a></h3>
<div>
@ -157,7 +169,7 @@ To build and run the main() of <em>any file that is open in the editor</em>, pre
<pre>ant clean; ant jar; ant run;</pre>
</div>
<!-- EDIT5 SECTION "Clean, Build and Run Cycle" [3503-4839] -->
<!-- EDIT4 SECTION "Clean, Build and Run Cycle" [4163-5499] -->
<h3><a>Development Process</a></h3>
<div>
<ul>
@ -180,7 +192,7 @@ To build and run the main() of <em>any file that is open in the editor</em>, pre
</ul>
</div>
<!-- EDIT6 SECTION "Development Process" [4840-6025] -->
<!-- EDIT5 SECTION "Development Process" [5500-6685] -->
<h3><a>Adding external jar libraries</a></h3>
<div>
@ -226,7 +238,7 @@ That&#039;s it, your project can now use the external library. If you also linke
</p>
</div>
<!-- EDIT7 SECTION "Adding external jar libraries" [6026-7129] -->
<!-- EDIT6 SECTION "Adding external jar libraries" [6686-7789] -->
<h3><a>Application Deployment</a></h3>
<div>
<ul>
@ -235,7 +247,7 @@ That&#039;s it, your project can now use the external library. If you also linke
</ul>
</div>
<!-- EDIT8 SECTION "Application Deployment" [7130-7349] -->
<!-- EDIT7 SECTION "Application Deployment" [7790-8009] -->
<h2><a>Running Sample Projects</a></h2>
<div>
@ -264,5 +276,5 @@ Choose samples from the TestChooser and try out the included demos.</div>
</span></div>
</div>
<!-- EDIT9 SECTION "Running Sample Projects" [7350-] -->
<!-- EDIT8 SECTION "Running Sample Projects" [8010-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:project_creation?do=export_xhtmlbody">view online version</a></em></p>

@ -3,7 +3,7 @@
<div>
</div>
<!-- EDIT1 SECTION "Troubleshooting jMonkeyEngine3 SDK" [1-48] -->
<!-- EDIT1 SECTION "Troubleshooting jMonkeyEngine3 SDK" [1-47] -->
<h3><a>Specifying the JDK location</a></h3>
<div>
@ -27,7 +27,7 @@ Mac users navigate to <code>Contents/Resources/jmonkeyplatform/etc/</code>.</div
</ol>
</div>
<!-- EDIT2 SECTION "Specifying the JDK location" [49-767] -->
<!-- EDIT2 SECTION "Specifying the JDK location" [48-766] -->
<h3><a>Preferences and Settings</a></h3>
<div>
@ -46,7 +46,7 @@ To completely remove and/or reinstall the <acronym title="Software Development K
</ul>
</div>
<!-- EDIT3 SECTION "Preferences and Settings" [768-1256] -->
<!-- EDIT3 SECTION "Preferences and Settings" [767-1255] -->
<h3><a>Stability / Graphics issues</a></h3>
<div>
@ -98,7 +98,7 @@ Compiz on Linux might cause issues, if you set its rendering quality to &quot;me
</p>
</div>
<!-- EDIT4 SECTION "Stability / Graphics issues" [1257-2770] -->
<!-- EDIT4 SECTION "Stability / Graphics issues" [1256-2769] -->
<h3><a>Updating problems</a></h3>
<div>
@ -107,12 +107,20 @@ If you have problems updating the <acronym title="Software Development Kit">SDK<
</p>
</div>
<!-- EDIT5 SECTION "Updating problems" [2771-3019] -->
<h3><a>Known Issues</a></h3>
<!-- EDIT5 SECTION "Updating problems" [2770-3018] -->
<h3><a>Getting error messages and reporting issues</a></h3>
<div>
<p>
When an exception happens in the <acronym title="Software Development Kit">SDK</acronym>, a small warning sign appears in the lower right corner of the main window. Double-click it to open a window that allows you to see the exception stack trace. When posting about issues in the forum, always post the stack trace along with a description of what happens and how it can be reproduced.
</p>
</div>
<!-- EDIT6 SECTION "Getting error messages and reporting issues" [3019-3408] -->
<h3><a>Known Issues</a></h3>
<div>
<p>
For a list of known issues and possible workarounds see the following link:
<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/issues/list?can=2&amp;q=label%3AProduct-Platform+Type%3DDefect+&amp;colspec=ID+Type+Status+Component+Priority+Product+Milestone+Owner+Summary&amp;cells=tiles"><param name="text" value="<html><u>List of known issues on googlecode</u></html>"><param name="textColor" value="blue"></object>
</p>
@ -124,5 +132,5 @@ For a list of known issues and possible workarounds see the following link:
</span></div>
</div>
<!-- EDIT6 SECTION "Known Issues" [3020-] -->
<!-- EDIT7 SECTION "Known Issues" [3409-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:troubleshooting?do=export_xhtmlbody">view online version</a></em></p>

@ -8,11 +8,24 @@ Whether you work in a development team or alone: File versioning is a handy meth
</p>
<p>
For every team member, the file versioning workflow is as follows:
</p>
<ol>
<li><div> Once: Download a working copy of the project from the repository (&quot;checkout&quot;).</div>
</li>
<li><div> Regularly: Upload your own changes to the repository (&quot;commit&quot;).</div>
</li>
<li><div> Regularly: Download updates by others from the repository (&quot;update&quot;). </div>
</li>
</ol>
<p>
Note: Since the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> is based on the NetBeans Platform framework, you can learn about certain jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> features by reading the corresponding NetBeans IDE tutorials (in the &quot;see also links&quot;).
</p>
</div>
<!-- EDIT1 SECTION "jMonkeyEngine SDK: Version Control" [1-579] -->
<!-- EDIT1 SECTION "jMonkeyEngine SDK: Version Control" [1-878] -->
<h2><a>Version Control Systems</a></h2>
<div>
@ -26,7 +39,7 @@ You can use file versioning alone or in a team. The advantages are that you can
</p>
</div>
<!-- EDIT2 SECTION "Version Control Systems" [580-1076] -->
<!-- EDIT2 SECTION "Version Control Systems" [879-1375] -->
<h2><a>Creating a Repository (Upload)</a></h2>
<div>
@ -39,11 +52,11 @@ Requirements:
</li>
<li><div> You must have version control software installed (Subversion, Mercurial, or <acronym title="Concurrent Versions System">CVS</acronym>) and have initialized a repository.</div>
<ul>
<li><div> Tip: For Subversion, the init command looks like this example: <code>svnadmin create /home/joe/mysvnrepo</code></div>
<li><div> Tip: For Subversion, for example, the init command looks like this example: <code>svnadmin create /home/joe/jMonkeyProjects/MyGame</code></div>
</li>
</ul>
</li>
<li><div> The computer where the repository is to be hosted must be available in your network, or you will only be able to use your repo locally.</div>
<li><div> The computer where the repository is to be hosted must be available in your team&#039;s network, or you will only be able to use your repo locally.</div>
<ul>
<li><div> Tip: Hosts such as SourceForge, GoogleCode, dev.java.net offer free version control services for open-source projects.</div>
</li>
@ -68,7 +81,7 @@ Now you create a repository to store your project&#039;s files.
</ol>
</div>
<!-- EDIT3 SECTION "Creating a Repository (Upload)" [1077-2106] -->
<!-- EDIT3 SECTION "Creating a Repository (Upload)" [1376-2438] -->
<h2><a>Checking Out a Repository (Download)</a></h2>
<div>
@ -104,7 +117,7 @@ Of course you can also check out existing repositories and access code from othe
</p>
</div>
<!-- EDIT4 SECTION "Checking Out a Repository (Download)" [2107-3080] -->
<!-- EDIT4 SECTION "Checking Out a Repository (Download)" [2439-3412] -->
<h2><a>Updating and Committing Changes (Send and Receive)</a></h2>
<div>
@ -143,7 +156,7 @@ Receiving the latest changes from the team&#039;s repository is referred to as <
</ol>
</div>
<!-- EDIT5 SECTION "Updating and Committing Changes (Send and Receive)" [3081-4329] -->
<!-- EDIT5 SECTION "Updating and Committing Changes (Send and Receive)" [3413-4661] -->
<h2><a>Comparing and Reverting Changes</a></h2>
<div>
<ul>
@ -174,7 +187,7 @@ Receiving the latest changes from the team&#039;s repository is referred to as <
</ul>
</div>
<!-- EDIT6 SECTION "Comparing and Reverting Changes" [4330-5121] -->
<!-- EDIT6 SECTION "Comparing and Reverting Changes" [4662-5453] -->
<h2><a>No Version Control? Local History!</a></h2>
<div>
@ -208,5 +221,5 @@ See also:
</span></div>
</div>
<!-- EDIT7 SECTION "No Version Control? Local History!" [5122-] -->
<!-- EDIT7 SECTION "No Version Control? Local History!" [5454-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:version_control?do=export_xhtmlbody">view online version</a></em></p>

File diff suppressed because one or more lines are too long

@ -94,6 +94,7 @@ jme3:advanced:nifty_gui_popup_menu,\
jme3:advanced:nifty_gui_projection,\
jme3:advanced:nifty_gui_scenarios,\
jme3:advanced:nifty_gui_xml_layout,\
jme3:advanced:ogrecompatibility,\
jme3:advanced:open_game_finder,\
jme3:advanced:particle_emitters,\
jme3:advanced:physics,\

Loading…
Cancel
Save