- update manual

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9967 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 12 years ago
parent 1fbdbc59bb
commit b4cf745189
  1. 25
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/application_states.html
  2. 10
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html
  3. 99
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/audio.html
  4. 8
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/capture_audio_video_to_a_file.html
  5. 15
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html
  6. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html
  7. 27
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_meshes.html
  8. 35
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/debugging.html
  9. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html
  10. 20
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/jme3_shaders.html
  11. 47
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/networking.html
  12. 16
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_interaction.html
  13. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_scenarios.html
  14. 11
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ogrecompatibility.html
  15. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/particle_emitters.html
  16. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html
  17. 59
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/read_graphic_card_capabilites.html
  18. 63
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html
  19. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain_collision.html
  20. 52
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/update_loop.html
  21. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html
  22. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_asset.html
  23. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html
  24. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html
  25. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html
  26. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html
  27. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_material.html
  28. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_physics.html
  29. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html
  30. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_simpleapplication.html
  31. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html
  32. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/build_from_sources.html
  33. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/build_jme3_sources_with_netbeans.html
  34. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html
  35. 219
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html
  36. 29
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html
  37. 86
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/ios.html
  38. 38
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/terminology.html
  39. 18
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html
  40. 4
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/application_deployment.html
  41. 52
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/asset_packs.html
  42. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/blender.html
  43. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/code_editor.html
  44. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/extension_library.html
  45. 112
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/setup.html
  46. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/material_editing.html
  47. 47
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/welcome/3_0rc3.html
  48. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/welcome/help_update.png
  49. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/welcome/new_project.png
  50. BIN
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/welcome/search_field.png
  51. 2
      sdk/jme3-core/javahelp/com/jme3/gde/core/docs/wiki-map.xml
  52. 2
      sdk/jme3-core/javahelp/wiki_help.properties

@ -311,7 +311,7 @@ You can use custom accessors to get data from AppStates, to set data in AppState
<p> <p>
To access class fields of the application the way you are used to, initialize them to local variables: To access class fields of the SimpleApplication the way you are used to, initialize them to local variables, as shown in the following AppState template:
</p> </p>
<pre>private SimpleApplication app; <pre>private SimpleApplication app;
private Node rootNode; private Node rootNode;
@ -319,17 +319,20 @@ private AssetManager assetManager;
private AppStateManager stateManager; private AppStateManager stateManager;
private InputManager inputManager; private InputManager inputManager;
private ViewPort viewPort; private ViewPort viewPort;
private BulletAppState bullet; private BulletAppState physics;
&nbsp; &nbsp;
public void initialize&#40;AppStateManager stateManager, Application app&#41; &#123; public class MyAppState extends AbstractAppState &#123;
super.initialize&#40;stateManager, app&#41;; @Override
this.app = &#40;SimpleApplication&#41; app; // can cast Application to something more specific public void initialize&#40;AppStateManager stateManager, Application app&#41; &#123;
this.rootNode = this.app.getRootNode&#40;&#41;; super.initialize&#40;stateManager, app&#41;;
this.assetManager = this.app.getAssetManager&#40;&#41;; this.app = &#40;SimpleApplication&#41; app; // can cast Application to something more specific
this.stateManager = this.app.getStateManager&#40;&#41;; this.rootNode = this.app.getRootNode&#40;&#41;;
this.inputManager = this.app.getInputManager&#40;&#41;; this.assetManager = this.app.getAssetManager&#40;&#41;;
this.viewPort = this.app.getViewPort&#40;&#41;; this.stateManager = this.app.getStateManager&#40;&#41;;
this.bullet = this.stateManager.getState&#40;BulletAppState.class&#41;; this.inputManager = this.app.getInputManager&#40;&#41;;
this.viewPort = this.app.getViewPort&#40;&#41;;
this.physics = this.stateManager.getState&#40;BulletAppState.class&#41;;
&#125;
&#125;</pre> &#125;</pre>
</div> </div>

@ -149,7 +149,7 @@ jME3 also offers a ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, an
</div> </div>
<!-- EDIT4 SECTION "Example Code: Loading Assets" [4668-6140] --> <!-- EDIT4 SECTION "Example Code: Loading Assets" [4668-6140] -->
<h2><a>Comon AssetManager Tasks</a></h2> <h2><a>Common AssetManager Tasks</a></h2>
<div> <div>
<div><table> <div><table>
<tr> <tr>
@ -175,9 +175,9 @@ rootNode.attachChild&#40;scene&#41;;</pre>
</td> </td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT6 TABLE [6179-7107] --> <!-- EDIT6 TABLE [6180-7108] -->
</div> </div>
<!-- EDIT5 SECTION "Comon AssetManager Tasks" [6141-7108] --> <!-- EDIT5 SECTION "Common AssetManager Tasks" [6141-7109] -->
<h2><a>NullPointerException: Cannot locate resource?</a></h2> <h2><a>NullPointerException: Cannot locate resource?</a></h2>
<div> <div>
@ -232,7 +232,7 @@ Before building the executable, you must use the jMonkeyEngine <acronym title="S
</p> </p>
</div> </div>
<!-- EDIT7 SECTION "NullPointerException: Cannot locate resource?" [7109-8832] --> <!-- EDIT7 SECTION "NullPointerException: Cannot locate resource?" [7110-8833] -->
<h2><a>Asset Handling For Other IDEs: Codeless Projects</a></h2> <h2><a>Asset Handling For Other IDEs: Codeless Projects</a></h2>
<div> <div>
@ -282,5 +282,5 @@ Convert assets as described above.</div>
</p> </p>
</div> </div>
<!-- EDIT8 SECTION "Asset Handling For Other IDEs: Codeless Projects" [8833-] --> <!-- EDIT8 SECTION "Asset Handling For Other IDEs: Codeless Projects" [8834-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:asset_manager?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:asset_manager?do=export_xhtmlbody">view online version</a></em></p>

@ -4,35 +4,45 @@
<p> <p>
There are two ways to handle audio data: Short audio files are to be stored entirely in memory, while long audio files (music) is streamed from the hard drive as it is played. Place audio files in the <code>assets/Sound/</code> directory of your project. jME3 supports Ogg Vorbis audio compression (.ogg) and uncompressed PCM Wave (.wav) formats. You can use for example <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://audacity.sourceforge.net/"><param name="text" value="<html><u>Audacity</u></html>"><param name="textColor" value="blue"></object> to convert from other formats.
</p> </p>
<p> </div>
Place audio files in the <code>assets/Sound/</code> directory of your project. jME3 supports Ogg Vorbis (.ogg) and Wave (.wav) formats. You can use for example <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://audacity.sourceforge.net/"><param name="text" value="<html><u>Audacity</u></html>"><param name="textColor" value="blue"></object> to convert from other formats. <!-- EDIT1 SECTION "Audio in jME3" [1-293] -->
<h2><a>Audio Terminology</a></h2>
</p> <div>
<ul>
<li><div> <strong>Streaming:</strong> There are two ways to load audio data: Short audio files are to be stored entirely in memory (prebuffered), while long audio files, such as music, are streamed from the hard drive as it is played.</div>
</li>
<li><div> <strong>Looping:</strong> You can play a sound either once and then stop, or repeatedly (continuously) in a loop. <br/>
You cannot loop streamed sounds.</div>
</li>
<li><div> <strong>Instance:</strong> If you play the same audio twice, the playing is queued up and jME plays one after the other. If you play instances of sounds, several instances of the same sound can play at the same time.</div>
</li>
</ul>
</div> </div>
<!-- EDIT1 SECTION "Audio in jME3" [1-434] --> <!-- EDIT2 SECTION "Audio Terminology" [294-891] -->
<h2><a>Creating Audio Nodes: Streamed or Buffered</a></h2> <h2><a>Creating Audio Nodes: Streamed or Buffered</a></h2>
<div> <div>
<p> <p>
The main class to look at is <code>com.jme3.audio.AudioNode</code>. The main jME audio class to look at is <code>com.jme3.audio.AudioNode</code>. When creating a new audio node you need to declare whether how you want to load this sound:
</p> </p>
<ul> <ul>
<li><div> <strong>Buffered:</strong> By default, a new audio node is buffered. This means jME3 loads the whole file into memory before playing. You create a buffered sound by setting the boolean to false, or using no boolean at all: <pre>AudioNode boom = new AudioNode&#40;assetManager, &quot;Sound/boom.wav&quot;&#41;;</pre> <li><div> <strong>Buffered:</strong> By default, a new audio node is buffered. This means jME3 loads the whole file into memory before playing. Use this for short sounds. You create a buffered sound by setting the boolean to false, or using no boolean at all: <pre>AudioNode boom = new AudioNode&#40;assetManager, &quot;Sound/boom.wav&quot;&#41;;
AudioNode boom = new AudioNode&#40;assetManager, &quot;Sound/boom.wav&quot;, false&#41;;</pre>
</div> </div>
</li> </li>
<li><div> <strong>Streamed:</strong> If it is a long file, you stream the audio, that means, you load and play in parallel until the sound is done. You create a streamed sound by setting the boolean to true:<pre>AudioNode music = new AudioNode&#40;assetManager, &quot;Sound/music.wav&quot;, true&#41;;</pre> <li><div> <strong>Streamed:</strong> If it is a long file such as music or a dialog, you stream the audio. Streaming means, you load and play in parallel until the sound is done. You create a streamed sound by setting the boolean to true:<pre>AudioNode music = new AudioNode&#40;assetManager, &quot;Sound/music.wav&quot;, true&#41;;</pre>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
<!-- EDIT2 SECTION "Creating Audio Nodes: Streamed or Buffered" [435-1126] --> <!-- EDIT3 SECTION "Creating Audio Nodes: Streamed or Buffered" [892-1814] -->
<h2><a>Getting AudioNode Properties</a></h2> <h2><a>Getting AudioNode Properties</a></h2>
<div> <div>
<div><table> <div><table>
@ -49,14 +59,14 @@ The main class to look at is <code>com.jme3.audio.AudioNode</code>.
<td>getPitch()</td><td>Returns the pitch. </td> <td>getPitch()</td><td>Returns the pitch. </td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT4 TABLE [1168-1340] --> <!-- EDIT5 TABLE [1857-2029] -->
<p> <p>
There are other obvious getters to poll the status of corresponding setters below. Note: There are other obvious getters to poll the status of all corresponding setters listed here.
</p> </p>
</div> </div>
<!-- EDIT3 SECTION "Getting AudioNode Properties" [1127-1425] --> <!-- EDIT4 SECTION "Getting AudioNode Properties" [1815-2130] -->
<h2><a>Setting AudioNode Properties</a></h2> <h2><a>Setting AudioNode Properties</a></h2>
<div> <div>
<div><table> <div><table>
@ -69,30 +79,40 @@ There are other obvious getters to poll the status of corresponding setters belo
<tr> <tr>
<td>setPitch(1)</td><td>Makes the sound play in a higher or lower pitch. Default is 1. 2 is twice as high, .5f is half as high. </td> <td>setPitch(1)</td><td>Makes the sound play in a higher or lower pitch. Default is 1. 2 is twice as high, .5f is half as high. </td>
</tr> </tr>
</table></div>
<!-- EDIT6 TABLE [1468-1717] --><div><table>
<tr> <tr>
<th>AudioNode Method</th><th>Usage</th> <td>setTimeOffset(0.5f)</td><td>Play the sound starting at a 0.5 second offset from the beginning. Default is 0.</td>
</tr>
<tr>
<td>setMaxDistance(100f)</td><td>Maximum distance the sound can be heard, in world units. Default is 20.</td>
</tr> </tr>
<tr> <tr>
<td>setLooping(false)</td><td>Configures the sound so that, if it is played, it plays once and stops. This is the default.</td> <td>setLooping(false)</td><td>Configures the sound so that, if it is played, it plays once and stops. This is the default.</td>
</tr> </tr>
</table></div>
<!-- EDIT7 TABLE [2173-2733] -->
</div>
<!-- EDIT6 SECTION "Setting AudioNode Properties" [2131-2734] -->
<h3><a>Looping &amp; Ambient Sounds</a></h3>
<div>
<div><table>
<tr> <tr>
<td>setLooping(true)</td><td>Configures the sound so that, if it is played, it plays repeats from the beginning, until stop() or pause() are called. Good for ambient background noises. <br/> <th>AudioNode Method</th><th>Usage</th>
Does not work for streamed sounds! </td>
</tr> </tr>
<tr> <tr>
<td>setPositional(false) <br/> <td>setPositional(false) <br/>
setDirectional(false)</td><td>All 3D effects switched off. This sound is global and comes from everywhere. Good for environmental ambient sounds and background music.</td> setDirectional(false)</td><td>All 3D effects switched off. This sound is global and comes from everywhere. Good for environmental ambient sounds and background music.</td>
</tr> </tr>
<tr> <tr>
<td>setTimeOffset(0.5f)</td><td>Play the sound starting at a 0.5 second offset from the beginning. Default is 0.</td> <td>setLooping(true)</td><td>Configures the sound to be a loop: When it is played, it repeats from the beginning, until stop() or pause() are called. Good for music and ambient background noises. <br/>
</tr> Looping does not work on streamed sounds! </td>
<tr>
<td>setMaxDistance(100f)</td><td>Maximum distance the sound can be heard, in world units. Default is 20.</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT7 TABLE [1719-2453] --><div><table> <!-- EDIT9 TABLE [2771-3212] -->
</div>
<!-- EDIT8 SECTION "Looping & Ambient Sounds" [2735-3213] -->
<h3><a>Positional 3D Sounds</a></h3>
<div>
<div><table>
<tr> <tr>
<th>AudioNode Method</th><th>Usage</th> <th>AudioNode Method</th><th>Usage</th>
</tr> </tr>
@ -104,7 +124,17 @@ setLocalTranslation(…)</td><td>Activates 3D audio: The sound appears to come f
<td>setReverbEnabled(true)</td><td>A 3D echo effect that only makes sense to use with positional AudioNodes. The reverb effect is influenced by the environment that the audio renderer is in. See &quot;Setting Environment Properties&quot; below. </td> <td>setReverbEnabled(true)</td><td>A 3D echo effect that only makes sense to use with positional AudioNodes. The reverb effect is influenced by the environment that the audio renderer is in. See &quot;Setting Environment Properties&quot; below. </td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT8 TABLE [2455-2927] --><div><table> <!-- EDIT11 TABLE [3246-3718] -->
<p>
Note: 3D sounds require an audio listener.
</p>
</div>
<!-- EDIT10 SECTION "Positional 3D Sounds" [3214-3763] -->
<h3><a>Directional 3D Sounds</a></h3>
<div>
<div><table>
<tr> <tr>
<th>AudioNode Method</th><th>Usage</th> <th>AudioNode Method</th><th>Usage</th>
</tr> </tr>
@ -117,9 +147,14 @@ setDirection(…) </td><td>Activates 3D audio: This sound can only be heard from
setOuterAngle()</td><td>Set the angle in degrees for the directional audio. The angle is relative to the direction. Note: By default, both angles are 360° and the sound can be heard from all directions!</td> setOuterAngle()</td><td>Set the angle in degrees for the directional audio. The angle is relative to the direction. Note: By default, both angles are 360° and the sound can be heard from all directions!</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT9 TABLE [2929-3456] --> <!-- EDIT13 TABLE [3797-4324] -->
<p>
Note: 3D sounds require an audio listener.
</p>
</div> </div>
<!-- EDIT5 SECTION "Setting AudioNode Properties" [1426-3457] --> <!-- EDIT12 SECTION "Directional 3D Sounds" [3764-4369] -->
<h2><a>Play, Pause, Stop</a></h2> <h2><a>Play, Pause, Stop</a></h2>
<div> <div>
@ -136,18 +171,18 @@ You play, pause, and stop a node called myAudioNode by using the respective of t
</p> </p>
<p> <p>
You can also start playing an instance of this AudioNode. Use the playInstance() method if you need to play the same AudioNode multiple times, possibly simulatenously. Note that changes to the parameters of the original AudioNode do not affect the instances that are already playing! You can also start playing instances of an AudioNode. Use the <code>playInstance()</code> method if you need to play the same AudioNode multiple times, possibly simulatenously. Note that changes to the parameters of the original AudioNode do not affect the instances that are already playing!
</p> </p>
<pre>myAudioNode.playInstance&#40;&#41;;</pre> <pre>myAudioNode.playInstance&#40;&#41;;</pre>
</div> </div>
<!-- EDIT10 SECTION "Play, Pause, Stop" [3458-4162] --> <!-- EDIT14 SECTION "Play, Pause, Stop" [4370-5074] -->
<h2><a>The Listener</a></h2> <h2><a>The Listener</a></h2>
<div> <div>
<p> <p>
The default listener object is the user&#039;s ear in the scene. If you use positional audio, you have to move the listener with the player: For example, for a first-person player, you move the listener with the camera. For a third-person player, you move the listener with the player avatar Geometry. The default listener object is the user&#039;s ear in the scene. If you use 3d audio (positional and directional sounds), you have to move the listener with the player: For example, for a first-person player, you move the listener with the camera. For a third-person player, you move the listener with the player avatar Geometry.
</p> </p>
<pre> @Override <pre> @Override
public void simpleUpdate&#40;float tpf&#41; &#123; public void simpleUpdate&#40;float tpf&#41; &#123;
@ -157,7 +192,7 @@ The default listener object is the user&#039;s ear in the scene. If you use posi
&#125;</pre> &#125;</pre>
</div> </div>
<!-- EDIT11 SECTION "The Listener" [4163-4707] --> <!-- EDIT15 SECTION "The Listener" [5075-5647] -->
<h2><a>Setting Environment Properties</a></h2> <h2><a>Setting Environment Properties</a></h2>
<div> <div>
@ -186,7 +221,7 @@ Optionally, You can choose from the following environmental presets from <code>c
<td>Closet </td><td>1.00f</td><td>1.0f</td><td>1.0f</td><td>1.00f</td><td>0.15f</td><td>1.0f</td><td>0.600f</td><td>0.0025f</td><td>0.500f</td><td>0.0006f</td> <td>Closet </td><td>1.00f</td><td>1.0f</td><td>1.0f</td><td>1.00f</td><td>0.15f</td><td>1.0f</td><td>0.600f</td><td>0.0025f</td><td>0.500f</td><td>0.0006f</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT13 TABLE [5031-5520] --> <!-- EDIT17 TABLE [5971-6460] -->
<p> <p>
Activate the preset with setEnvironment(). E.g. in a dungeon environment: Activate the preset with setEnvironment(). E.g. in a dungeon environment:
@ -210,5 +245,5 @@ You can find more info about OpenAL and its advanced features here: <object clas
</span></div> </span></div>
</div> </div>
<!-- EDIT12 SECTION "Setting Environment Properties" [4708-] --> <!-- EDIT16 SECTION "Setting Environment Properties" [5648-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:audio?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:audio?do=export_xhtmlbody">view online version</a></em></p>

@ -582,13 +582,13 @@ public class Advanced extends SimpleApplication &#123;
<p> <p>
<!--[if !IE]> --> <!--[if !IE]> -->
<object class="media" width="400" height="350" type="application/x-shockwave-flash" data="/wiki/lib/exe/fetch.php?hash=568504&amp;media=http%3A%2F%2Fwww.youtube.com%2Fv%2FoCEfK0yhDrY%3F.swf" > <object>
<!-- <![endif]--> <!-- <![endif]-->
<!--[if IE]> <!--[if IE]>
<object class="media" width="400" height="350" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" > <object class="media" width="400" height="350" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" >
<param name="movie" value="/wiki/lib/exe/fetch.php?hash=568504&amp;media=http%3A%2F%2Fwww.youtube.com%2Fv%2FoCEfK0yhDrY%3F.swf" /> <param name="movie" value="/wiki/lib/exe/fetch.php?hash=568504&amp;media=http%3A%2F%2Fwww.youtube.com%2Fv%2FoCEfK0yhDrY%3F.swf" />
<!--><!-- --> <!--><!-- -->
<param name="quality" value="high" /> <param name="quality" value="high"/>
The <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.adobe.com/products/flashplayer/"><param name="text" value="<html><u>Adobe Flash Plugin</u></html>"><param name="textColor" value="blue"></object> is needed to display this content. The <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.adobe.com/products/flashplayer/"><param name="text" value="<html><u>Adobe Flash Plugin</u></html>"><param name="textColor" value="blue"></object> is needed to display this content.
</object> </object>
<!-- <![endif]--> <!-- <![endif]-->
@ -603,13 +603,13 @@ The <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param
<p> <p>
<!--[if !IE]> --> <!--[if !IE]> -->
<object class="media" width="400" height="350" type="application/x-shockwave-flash" data="/wiki/lib/exe/fetch.php?hash=6921c2&amp;media=http%3A%2F%2Fwww.youtube.com%2Fv%2FWIJt9aRGusc%3F.swf" > <object>
<!-- <![endif]--> <!-- <![endif]-->
<!--[if IE]> <!--[if IE]>
<object class="media" width="400" height="350" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" > <object class="media" width="400" height="350" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" >
<param name="movie" value="/wiki/lib/exe/fetch.php?hash=6921c2&amp;media=http%3A%2F%2Fwww.youtube.com%2Fv%2FWIJt9aRGusc%3F.swf" /> <param name="movie" value="/wiki/lib/exe/fetch.php?hash=6921c2&amp;media=http%3A%2F%2Fwww.youtube.com%2Fv%2FWIJt9aRGusc%3F.swf" />
<!--><!-- --> <!--><!-- -->
<param name="quality" value="high" /> <param name="quality" value="high"/>
The <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.adobe.com/products/flashplayer/"><param name="text" value="<html><u>Adobe Flash Plugin</u></html>"><param name="textColor" value="blue"></object> is needed to display this content. The <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.adobe.com/products/flashplayer/"><param name="text" value="<html><u>Adobe Flash Plugin</u></html>"><param name="textColor" value="blue"></object> is needed to display this content.
</object> </object>
<!-- <![endif]--> <!-- <![endif]-->

@ -83,7 +83,7 @@ A CollisionResult object contains information about the second party of the coll
<p> <p>
Assume you have two collidables a and b and want to detect collisions between them. The collision parties can be Geometries, Nodes with Geometries attached (including the rootNode), Planes, Quads, Lines, or Rays. Assume you have two collidables a and b and want to detect collisions between them. The collision parties can be Geometries, Nodes with Geometries attached (including the rootNode), Planes, Quads, Lines, or Rays. An important restriction is that you can only collide geometry vs bounding volumes or rays. (This means for example that a must be of Type Node or Geometry and b respectively of Type BoundingBox,BoundingShpere or Ray.)
</p> </p>
<p> <p>
@ -129,10 +129,11 @@ You can also loop over all results and trigger different reactions depending on
<p> <p>
Knowing the distance of the collisions is useful for example when you intersect Lines and Rays with other objects. Knowing the distance of the collisions is useful for example when you intersect Lines and Rays with other objects.
</p> </p>
</div> </div>
<!-- EDIT5 SECTION "Code Sample" [3038-5355] --> <!-- EDIT5 SECTION "Code Sample" [3038-5573] -->
<h2><a>Bounding Volumes</a></h2> <h2><a>Bounding Volumes</a></h2>
<div> <div>
@ -172,7 +173,7 @@ Supported types:
</p> </p>
</div> </div>
<!-- EDIT6 SECTION "Bounding Volumes" [5356-7399] --> <!-- EDIT6 SECTION "Bounding Volumes" [5574-7617] -->
<h3><a>Usage</a></h3> <h3><a>Usage</a></h3>
<div> <div>
@ -185,7 +186,7 @@ For example you can use Bounding Volumes on custom meshes, or complex non-physic
mesh.updateBound&#40;&#41;;</pre> mesh.updateBound&#40;&#41;;</pre>
</div> </div>
<!-- EDIT7 SECTION "Usage" [7400-7581] --> <!-- EDIT7 SECTION "Usage" [7618-7799] -->
<h2><a>Mesh and Scene Graph Collision</a></h2> <h2><a>Mesh and Scene Graph Collision</a></h2>
<div> <div>
@ -195,7 +196,7 @@ One of the supported <code>Collidable</code>s are meshes and scene graph objects
</p> </p>
</div> </div>
<!-- EDIT8 SECTION "Mesh and Scene Graph Collision" [7582-8402] --> <!-- EDIT8 SECTION "Mesh and Scene Graph Collision" [7800-8620] -->
<h2><a>Intersection</a></h2> <h2><a>Intersection</a></h2>
<div> <div>
@ -223,7 +224,7 @@ Rays are used to perform line-of-sight calculations. This means you can detect w
<p> <p>
Learn the details of how to implement <a href="/com/jme3/gde/core/docs/jme3/advanced/mouse_picking.html">Mouse Picking</a> here. Learn the details of how to implement <a href="/com/jme3/gde/core/docs/jme3/advanced/mouse_picking.html">Mouse Picking</a> here.
</p> </p>
<hr /> <hr/>
<p> <p>
TODO: TODO:
@ -236,5 +237,5 @@ TODO:
</ul> </ul>
</div> </div>
<!-- EDIT9 SECTION "Intersection" [8403-] --> <!-- EDIT9 SECTION "Intersection" [8621-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:collision_and_intersection?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:collision_and_intersection?do=export_xhtmlbody">view online version</a></em></p>

@ -87,7 +87,7 @@ Examples: You can write
<p> <p>
The possibilities are endless. <img src="/wiki/lib/images/smileys/icon_smile.gif" class="middle" alt=":-)" /> The possibilities are endless. <img src="/wiki/lib/images/smileys/icon_smile.gif" class="middle" alt=":-)"/>
</p> </p>
</div> </div>

@ -278,27 +278,38 @@ rootNode.attachChild&#40;geo&#41;;</pre>
<p> <p>
This will result in a 10 px dot being rendered for each of the four vertices. The dot has the vertex color you specified above. The Quad&#039;s faces are not rendered at all. This can be used for a special debugging or editing mode. This will result in a 10 px dot being rendered for each of the four vertices. The dot has the vertex color you specified above. The Quad&#039;s faces are not rendered at all. This can be used for a special debugging or editing mode.
</p> </p>
</div> </div>
<!-- EDIT13 SECTION "Example: Point Mode" [8164-8818] --> <!-- EDIT13 SECTION "Example: Point Mode" [8164-8819] -->
<h2><a>Tip: Front and Back Faces</a></h2> <h2><a>Debugging Tip: Culling</a></h2>
<div> <div>
<p> <p>
By default, jME3 optimizes a scene by culling all backfaces. It determines which side the front or backface of a mesh is by the order of the vertices. The frontface is the one where the vertices are specified counter-clockwise.
This means your mesh, as created above, is invisible when seen from &quot;behind&quot;. This may not be a problem and is often even intended. If you use the custom meshes to form a polyhedron, or flat wallpaper-like object, rendering the backfaces (the inside of the polyhedron) would indeed be a waste of resources. By default, jME3 optimizes a mesh by culling (not drawing) its backfaces. It determines which side the front or backface of a mesh is by the order of the vertices: The frontface is the one where the vertices are specified counter-clockwise.
In case that your use case requires the backfaces to be visible, you have two options: </p>
<p>
This means for you that your custom mesh is invisible when seen from &quot;behind&quot; or from the inside. This may not be a problem, often this is even intended because it&#039;s faster. The player will not look at the inside of most things anyway. For example, if your custom mesh is a closed polyhedron, or a flat wallpaper-like object, then rendering the backfaces (the inside of the pillar, the back of the painting, etc) would indeed be a waste of resources.
</p>
<p>
In case however that your usecase requires the backfaces to be visible, you have two options:
</p> </p>
<ul> <ul>
<li><div> If you have a very simple scene, you can just deactivate backface culling for this one mesh&#039;s material. <br/> <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>
<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/> <li><div> The recommended solution is to specify each triangle twice, the second time with the opposite order of vertices. The second, reversed triangle is a second frontface that replaces the culled backface. <br/>
<code>int[] indexes = { 2,0,1, 1,3,2, 2,3,1, 1,0,2 }; </code></div> <code>int[] indexes = { 2,0,1, 1,3,2, 2,3,1, 1,0,2 }; </code></div>
</li> </li>
</ul> </ul>
<p>
See also: <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">Spatial</a> – contains more info about how to debug custom meshes (that do not render as expected) by changing the default culling behaviour.
</p>
<div><span> <div><span>
<a href="/wiki/doku.php/tag:spatial?do=showtag&amp;tag=tag%3Aspatial">spatial</a>, <a href="/wiki/doku.php/tag:spatial?do=showtag&amp;tag=tag%3Aspatial">spatial</a>,
<a href="/wiki/doku.php/tag:node?do=showtag&amp;tag=tag%3Anode">node</a>, <a href="/wiki/doku.php/tag:node?do=showtag&amp;tag=tag%3Anode">node</a>,
@ -308,5 +319,5 @@ In case that your use case requires the backfaces to be visible, you have two op
</span></div> </span></div>
</div> </div>
<!-- EDIT14 SECTION "Tip: Front and Back Faces" [8819-] --> <!-- EDIT14 SECTION "Debugging Tip: Culling" [8820-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:custom_meshes?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:custom_meshes?do=export_xhtmlbody">view online version</a></em></p>

@ -4,15 +4,15 @@
<p> <p>
When you deal with complex game engine features like animations or physics it is handy to get feedback from the engine how it interpreted the current state. Is the physical object&#039;s collision shape really where you think it is? Is the skeleton of the animated character moveing like you think it should? This document shows you how to activate visual debug aides. When you deal with complex game engine features like animations or physics it is handy to get feedback from the engine how it interpreted the current state. Is the physical object&#039;s collision shape really where you think it is? Is the skeleton of the animated character moving like you think it should? This document shows you how to activate visual debug aides.
</p> </p>
<p> <p>
What if you just want to quickly write code that loads models and brings them in their start position? You may not want to hunt for a sample model, convert it, add lights, and load materials. Instead you use &quot;hasslefree&quot; simple shapes a wireframe material: No model, no light source, no materials are needed to see them in the scene. What if you just want to quickly write code that loads models and brings them in their start position? You may not want to hunt for a sample model, convert it, add lights, and load materials. Instead you use &quot;hasslefree&quot; simple shapes, and a &quot;hasslefree&quot; unshaded material or wireframe: No model, no light source, no materials are needed to see them in your test scene.
</p> </p>
<p> <p>
If you ever have problems with objects appearing in the wrong spot, with the wrong scale, or wrong orientation, simply attach debug shapes to your scene to have a point of reference in 3D space – just like a giant ruler. If your code positions the debug shapes correctly, but models remain invisible when you apply the same code to them, you know that the problem must be the model or the light or its material – and not the positioning code. If you ever have problems with objects appearing in the wrong spot, with the wrong scale, or wrong orientation, simply attach debug shapes to your scene to have a point of reference in 3D space – just like a giant ruler. If your code positions the debug shapes correctly, but models remain invisible when you apply the same code to them, you know that the problem must be either the model (where is its origin coordinate?), or the light (too dark? too bright? missing?), or the model&#039;s material (missing?) – and not the positioning code.
</p> </p>
<p> <p>
@ -24,12 +24,12 @@ Here are some different debug shapes:
</p> </p>
</div> </div>
<!-- EDIT1 SECTION "Debugging" [1-1259] --> <!-- EDIT1 SECTION "Debugging" [1-1389] -->
<h2><a>Debug Shapes</a></h2> <h2><a>Debug Shapes</a></h2>
<div> <div>
</div> </div>
<!-- EDIT2 SECTION "Debug Shapes" [1260-1285] --> <!-- EDIT2 SECTION "Debug Shapes" [1390-1415] -->
<h3><a>Coordinate Axes</a></h3> <h3><a>Coordinate Axes</a></h3>
<div> <div>
@ -62,7 +62,7 @@ private Geometry putShape&#40;Mesh shape, ColorRGBA color&#41;&#123;
&#125;</pre> &#125;</pre>
</div> </div>
<!-- EDIT3 SECTION "Coordinate Axes" [1286-2353] --> <!-- EDIT3 SECTION "Coordinate Axes" [1416-2483] -->
<h3><a>Wireframe Grid</a></h3> <h3><a>Wireframe Grid</a></h3>
<div> <div>
@ -82,7 +82,7 @@ Use a wireframe grid (com.jme3.scene.debug.Grid) as a ruler or simple floor.
&#125;</pre> &#125;</pre>
</div> </div>
<!-- EDIT4 SECTION "Wireframe Grid" [2354-2875] --> <!-- EDIT4 SECTION "Wireframe Grid" [2484-3005] -->
<h3><a>Wireframe Cube</a></h3> <h3><a>Wireframe Cube</a></h3>
<div> <div>
@ -102,7 +102,7 @@ Use a wireframe cube (com.jme3.scene.debug.WireBox) as a stand-in object to see
&#125;</pre> &#125;</pre>
</div> </div>
<!-- EDIT5 SECTION "Wireframe Cube" [2876-3481] --> <!-- EDIT5 SECTION "Wireframe Cube" [3006-3611] -->
<h3><a>Wireframe Sphere</a></h3> <h3><a>Wireframe Sphere</a></h3>
<div> <div>
@ -122,7 +122,7 @@ Use a wireframe sphere (com.jme3.scene.debug.WireSphere) as a stand-in object to
&#125;</pre> &#125;</pre>
</div> </div>
<!-- EDIT6 SECTION "Wireframe Sphere" [3482-4090] --> <!-- EDIT6 SECTION "Wireframe Sphere" [3612-4220] -->
<h2><a>Wireframe for Physics</a></h2> <h2><a>Wireframe for Physics</a></h2>
<div> <div>
@ -133,7 +133,7 @@ You can display a wireframe of the (usually invisible) collision shape around al
<pre>physicsSpace.enableDebug&#40;assetManager&#41;;</pre> <pre>physicsSpace.enableDebug&#40;assetManager&#41;;</pre>
</div> </div>
<!-- EDIT7 SECTION "Wireframe for Physics" [4091-4437] --> <!-- EDIT7 SECTION "Wireframe for Physics" [4221-4567] -->
<h2><a>Wireframe for Animations</a></h2> <h2><a>Wireframe for Animations</a></h2>
<div> <div>
@ -150,7 +150,7 @@ Making the skeleton visible inside animated models can be handy for debugging an
player.attachChild&#40;skeletonDebug&#41;;</pre> player.attachChild&#40;skeletonDebug&#41;;</pre>
</div> </div>
<!-- EDIT8 SECTION "Wireframe for Animations" [4438-5029] --> <!-- EDIT8 SECTION "Wireframe for Animations" [4568-5159] -->
<h2><a>Example: Toggle Wireframe on Model</a></h2> <h2><a>Example: Toggle Wireframe on Model</a></h2>
<div> <div>
@ -189,7 +189,7 @@ TIP :: To set the line width of wireframe display, use mesh.setLineWidth(lineWid
</p> </p>
</div> </div>
<!-- EDIT9 SECTION "Example: Toggle Wireframe on Model" [5030-6089] --> <!-- EDIT9 SECTION "Example: Toggle Wireframe on Model" [5160-6219] -->
<h2><a>Example: Toggle Wireframe on the scene</a></h2> <h2><a>Example: Toggle Wireframe on the scene</a></h2>
<div> <div>
@ -243,5 +243,14 @@ Then attach the scene processor to the <acronym title="Graphical User Interface"
<pre>getViewPort&#40;&#41;.addProcessor&#40;new WireProcessor&#40;&#41;&#41;;</pre> <pre>getViewPort&#40;&#41;.addProcessor&#40;new WireProcessor&#40;&#41;&#41;;</pre>
</div> </div>
<!-- EDIT10 SECTION "Example: Toggle Wireframe on the scene" [6090-] --> <!-- EDIT10 SECTION "Example: Toggle Wireframe on the scene" [6220-7593] -->
<h2><a>See also</a></h2>
<div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">Spatial</a> – if you can&#039;t see certain spatials, you can modify the culling behaviour to identify problems (such as inside-out custom meshes)</div>
</li>
</ul>
</div>
<!-- EDIT11 SECTION "See also" [7594-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:debugging?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:debugging?do=export_xhtmlbody">view online version</a></em></p>

@ -296,7 +296,7 @@ Thanks for your awesome contributions! Keep them coming!
<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestMovingParticle.java"><param name="text" value="<html><u>jme3/src/test/jme3test/effect/TestMovingParticle.java</u></html>"><param name="textColor" value="blue"></object> – dust, smoke</div> <li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestMovingParticle.java"><param name="text" value="<html><u>jme3/src/test/jme3test/effect/TestMovingParticle.java</u></html>"><param name="textColor" value="blue"></object> – dust, smoke</div>
</li> </li>
</ul> </ul>
<hr /> <hr/>
<p> <p>
See also: See also:

@ -248,17 +248,17 @@ these uniforms are passed to the shader without having to declare them in the j3
<p> <p>
Those are different attributes that are always passed to your shader.<br/> Those are different attributes that are always passed to your shader.<br/>
you can find a complete list of those attribute in the Type enum of the VertexBuffer <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/scene/VertexBuffer.java"><param name="text" value="<html><u>here</u></html>"><param name="textColor" value="blue"></object>.<br/> You can find a complete list of those attribute in the Type enum of the VertexBuffer <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/scene/VertexBuffer.java"><param name="text" value="<html><u>here</u></html>"><param name="textColor" value="blue"></object>.<br/>
Note that in the shader the attributes names will be prefixed by a “in”.<br/> Note that in the shader the attributes names will be prefixed by an “in”.<br/>
<br/> <br/>
When the enumeration lists some usual types for each attribute (for example texCoord specifies two floats) then that is the format expected by all standard JME3 shaders that use that attribute. When writing your own shaders though you can use alternative formats such as placing three floats in texCoord simply by declaring the attribute as vec3 in the shader and passing 3 as the component count into the mesh setBuffer call.
</p> </p>
</div> </div>
<!-- EDIT10 SECTION "JME3 attributes" [6890-7272] --> <!-- EDIT10 SECTION "JME3 attributes" [6890-7701] -->
<h3><a>User&#039;s uniforms</a></h3> <h3><a>User&#039;s uniforms</a></h3>
<div> <div>
@ -320,7 +320,7 @@ The uniforms will be populated at runtime with the value you sent.
</p> </p>
</div> </div>
<!-- EDIT11 SECTION "User's uniforms" [7273-8875] --> <!-- EDIT11 SECTION "User's uniforms" [7702-9304] -->
<h3><a>Example: Adding Color Keying to the Lighting.j3md Material Definition</a></h3> <h3><a>Example: Adding Color Keying to the Lighting.j3md Material Definition</a></h3>
<div> <div>
@ -384,7 +384,7 @@ A result preview can be seen here: <object classid="java:org.netbeans.modules.ja
</p> </p>
</div> </div>
<!-- EDIT12 SECTION "Example: Adding Color Keying to the Lighting.j3md Material Definition" [8876-10366] --> <!-- EDIT12 SECTION "Example: Adding Color Keying to the Lighting.j3md Material Definition" [9305-10795] -->
<h3><a>Step by step</a></h3> <h3><a>Step by step</a></h3>
<div> <div>
<ul> <ul>
@ -414,7 +414,7 @@ A result preview can be seen here: <object classid="java:org.netbeans.modules.ja
</p> </p>
</div> </div>
<!-- EDIT13 SECTION "Step by step" [10367-10986] --> <!-- EDIT13 SECTION "Step by step" [10796-11415] -->
<h3><a>JME3 and OpenGL 3 &amp; 4 compatibility</a></h3> <h3><a>JME3 and OpenGL 3 &amp; 4 compatibility</a></h3>
<div> <div>
@ -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> <td>gl_NormalMatrix </td><td>g_NormalMatrix</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT15 TABLE [11312-11623] --> <!-- EDIT15 TABLE [11741-12052] -->
</div> </div>
<!-- EDIT14 SECTION "JME3 and OpenGL 3 & 4 compatibility" [10987-11623] --> <!-- EDIT14 SECTION "JME3 and OpenGL 3 & 4 compatibility" [11416-12052] -->
<h3><a>Useful links</a></h3> <h3><a>Useful links</a></h3>
<div> <div>
@ -463,5 +463,5 @@ Those attributes are deprecated since GLSL 1.3 (opengl 3), hence JME3 global uni
</p> </p>
</div> </div>
<!-- EDIT16 SECTION "Useful links" [11624-] --> <!-- EDIT16 SECTION "Useful links" [12053-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:jme3_shaders?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:jme3_shaders?do=export_xhtmlbody">view online version</a></em></p>

@ -309,39 +309,20 @@ The ID of the Client and HostedConnection are the same at both ends of a connect
<p> <p>
A server has a game version and game name property. Each client expects to communicate with a server with a certain game name and version. Test first whether the game name matches, and then whether game version matches, before sending any messages! If they do not match, you should refuse to connect, because unmatched clients and servers will likely miscommunicate. A server has a game version and game name property. Each client expects to communicate with a server with a certain game name and version. Test first whether the game name matches, and then whether game version matches, before sending any messages! If they do not match, you should refuse to connect, because unmatched clients and servers will likely miscommunicate.
</p> </p>
<div><table>
<tr>
<th>Accessor</th><th>Purpose</th>
</tr>
<tr>
<td> myServer.setName() </td><td> Specify the game name of the Server (a free-form String) </td>
</tr>
<tr>
<td> myServer.setVersion() </td><td> Specify the game version of the Server (an integer number) </td>
</tr>
<tr>
<td> myClient.getGameName() </td><td> Client queries the name of the server it is connected to. </td>
</tr>
<tr>
<td> myClient.getVersion() </td><td> Client queries the version of the server it is connected to. </td>
</tr>
</table></div>
<!-- EDIT15 TABLE [10098-10467] -->
<p>
<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). <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).
</div></p> </div></p>
</p> </p>
</div> </div>
<!-- EDIT14 SECTION "Identification and Rejection" [9507-10795] --> <!-- EDIT14 SECTION "Identification and Rejection" [9507-10424] -->
<h2><a>Closing Clients and Server Cleanly</a></h2> <h2><a>Closing Clients and Server Cleanly</a></h2>
<div> <div>
</div> </div>
<!-- EDIT16 SECTION "Closing Clients and Server Cleanly" [10796-10842] --> <!-- EDIT15 SECTION "Closing Clients and Server Cleanly" [10425-10471] -->
<h3><a>Closing a Client</a></h3> <h3><a>Closing a Client</a></h3>
<div> <div>
@ -357,7 +338,7 @@ You must override the client&#039;s destroy() method to close the connection cle
&#125;</pre> &#125;</pre>
</div> </div>
<!-- EDIT17 SECTION "Closing a Client" [10843-11118] --> <!-- EDIT16 SECTION "Closing a Client" [10472-10747] -->
<h3><a>Closing a Server</a></h3> <h3><a>Closing a Server</a></h3>
<div> <div>
@ -373,7 +354,7 @@ You must override the server&#039;s destroy() method to close the connection whe
&#125;</pre> &#125;</pre>
</div> </div>
<!-- EDIT18 SECTION "Closing a Server" [11119-11375] --> <!-- EDIT17 SECTION "Closing a Server" [10748-11004] -->
<h3><a>Kicking a Client</a></h3> <h3><a>Kicking a Client</a></h3>
<div> <div>
@ -384,7 +365,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> <pre>conn.close&#40;&quot;We kick cheaters.&quot;&#41;;</pre>
</div> </div>
<!-- EDIT19 SECTION "Kicking a Client" [11376-11766] --> <!-- EDIT18 SECTION "Kicking a Client" [11005-11395] -->
<h2><a>Listening to Connection Notification</a></h2> <h2><a>Listening to Connection Notification</a></h2>
<div> <div>
@ -394,7 +375,7 @@ The server and clients are notified about connection changes.
</p> </p>
</div> </div>
<!-- EDIT20 SECTION "Listening to Connection Notification" [11767-11878] --> <!-- EDIT19 SECTION "Listening to Connection Notification" [11396-11507] -->
<h3><a>ClientStateListener</a></h3> <h3><a>ClientStateListener</a></h3>
<div> <div>
@ -414,7 +395,7 @@ The com.jme3.network.ClientStateListener notifies the Client when the Client has
<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> <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> </tr>
</table></div> </table></div>
<!-- EDIT22 TABLE [12121-12490] --> <!-- EDIT21 TABLE [11750-12119] -->
<p> <p>
First implement the ClientStateListener interface in the Client class. Then register it to myClient in MyGameClient&#039;s simpleInitApp() method: First implement the ClientStateListener interface in the Client class. Then register it to myClient in MyGameClient&#039;s simpleInitApp() method:
@ -422,7 +403,7 @@ First implement the ClientStateListener interface in the Client class. Then regi
<pre>myClient.addClientStateListener&#40;this&#41;;</pre> <pre>myClient.addClientStateListener&#40;this&#41;;</pre>
</div> </div>
<!-- EDIT21 SECTION "ClientStateListener" [11879-12692] --> <!-- EDIT20 SECTION "ClientStateListener" [11508-12321] -->
<h3><a>ConnectionListener</a></h3> <h3><a>ConnectionListener</a></h3>
<div> <div>
@ -442,7 +423,7 @@ The com.jme3.network.ConnectionListener notifies the Server whenever new HostedC
<td> public void connectionRemoved(Server s, HostedConnection c){} </td><td> Implement here what happens after a HostedConnection has left. E.g. a player has quit the game and the server removes his character. </td> <td> public void connectionRemoved(Server s, HostedConnection c){} </td><td> Implement here what happens after a HostedConnection has left. E.g. a player has quit the game and the server removes his character. </td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT24 TABLE [12958-13356] --> <!-- EDIT23 TABLE [12587-12985] -->
<p> <p>
First implement the ConnectionListener interface in the Server class. Then register it to myServer in MyGameServer&#039;s simpleInitApp() method. First implement the ConnectionListener interface in the Server class. Then register it to myServer in MyGameServer&#039;s simpleInitApp() method.
@ -451,7 +432,7 @@ First implement the ConnectionListener interface in the Server class. Then regis
<pre>myServer.addConnectionListener&#40;this&#41;;</pre> <pre>myServer.addConnectionListener&#40;this&#41;;</pre>
</div> </div>
<!-- EDIT23 SECTION "ConnectionListener" [12693-13556] --> <!-- EDIT22 SECTION "ConnectionListener" [12322-13185] -->
<h2><a>UDP versus TCP</a></h2> <h2><a>UDP versus TCP</a></h2>
<div> <div>
@ -469,7 +450,7 @@ message2.setReliable&#40;false&#41;; // UDP</pre>
</ul> </ul>
</div> </div>
<!-- EDIT25 SECTION "UDP versus TCP" [13557-14227] --> <!-- EDIT24 SECTION "UDP versus TCP" [13186-13856] -->
<h2><a>Important: Use Multi-Threading</a></h2> <h2><a>Important: Use Multi-Threading</a></h2>
<div> <div>
@ -493,7 +474,7 @@ For general advice, see the articles <object classid="java:org.netbeans.modules.
</p> </p>
</div> </div>
<!-- EDIT26 SECTION "Important: Use Multi-Threading" [14228-15374] --> <!-- EDIT25 SECTION "Important: Use Multi-Threading" [13857-15003] -->
<h2><a>Troubleshooting</a></h2> <h2><a>Troubleshooting</a></h2>
<div> <div>
@ -508,5 +489,5 @@ If you have set up a server in your home network, and the game clients cannot re
</span></div> </span></div>
</div> </div>
<!-- EDIT27 SECTION "Troubleshooting" [15375-] --> <!-- EDIT26 SECTION "Troubleshooting" [15004-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:networking?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:networking?do=export_xhtmlbody">view online version</a></em></p>

@ -92,15 +92,15 @@ The name and package of your custom ScreenController class (here <code>tutorial.
<p> <p>
Or the same in a Java syntax, respectively: Or the same in a Java syntax, respectively:
</p> </p>
<pre> nifty.addScreen&#40;&quot;start&quot;, new ScreenBuilder&#40;&quot;start&quot;&#41; &#123;&#123; <pre> nifty.addScreen&#40;&quot;start&quot;, new ScreenBuilder&#40;&quot;start&quot;&#41; &#123;&#123;
controller&#40;new tutorial.MyStartScreen&#40;&#41;&#41;;</pre> controller&#40;new tutorial.MyStartScreen&#40;&#41;&#41;&#125;&#125;&#41;;</pre>
<p> <p>
Now the Java class <code>MyStartScreen</code> and this <acronym title="Graphical User Interface">GUI</acronym> screen (<code>start</code>) are connected. For this example you can also connect the <code>hud</code> screen to MyStartScreen. Now the Java class <code>MyStartScreen</code> and this <acronym title="Graphical User Interface">GUI</acronym> screen (<code>start</code>) are connected. For this example you can also connect the <code>hud</code> screen to MyStartScreen.
</p> </p>
</div> </div>
<!-- EDIT2 SECTION "Connect GUI to Java Controller" [792-3175] --> <!-- EDIT2 SECTION "Connect GUI to Java Controller" [792-3174] -->
<h2><a>Make GUI and Java Interact</a></h2> <h2><a>Make GUI and Java Interact</a></h2>
<div> <div>
@ -114,7 +114,7 @@ Use any combination of the three following approaches to make Java classes inter
</p> </p>
</div> </div>
<!-- EDIT3 SECTION "Make GUI and Java Interact" [3176-3548] --> <!-- EDIT3 SECTION "Make GUI and Java Interact" [3175-3547] -->
<h3><a>GUI Calls a Void Java Method</a></h3> <h3><a>GUI Calls a Void Java Method</a></h3>
<div> <div>
@ -214,7 +214,7 @@ The quitGame() example shows that you have access to the application <code>app</
</p> </p>
</div> </div>
<!-- EDIT4 SECTION "GUI Calls a Void Java Method" [3549-6725] --> <!-- EDIT4 SECTION "GUI Calls a Void Java Method" [3548-6724] -->
<h3><a>GUI Gets Return Value from Java Method</a></h3> <h3><a>GUI Gets Return Value from Java Method</a></h3>
<div> <div>
@ -253,7 +253,7 @@ You can use this for Strings and numeric values (e.g. when you read settings fro
</p> </p>
</div> </div>
<!-- EDIT5 SECTION "GUI Gets Return Value from Java Method" [6726-7913] --> <!-- EDIT5 SECTION "GUI Gets Return Value from Java Method" [6725-7912] -->
<h3><a>Java Modifies Nifty Elements and Events</a></h3> <h3><a>Java Modifies Nifty Elements and Events</a></h3>
<div> <div>
@ -293,7 +293,7 @@ For this to work, there already needs to be a (possibly inactive) <code>&lt;inte
<pre><span>&lt;interact onClick=&quot;doNothing()&quot;/&gt;</span></pre> <pre><span>&lt;interact onClick=&quot;doNothing()&quot;/&gt;</span></pre>
</div> </div>
<!-- EDIT6 SECTION "Java Modifies Nifty Elements and Events" [7914-9330] --> <!-- EDIT6 SECTION "Java Modifies Nifty Elements and Events" [7913-9329] -->
<h2><a>Next Steps</a></h2> <h2><a>Next Steps</a></h2>
<div> <div>
@ -317,5 +317,5 @@ You&#039;re done with the basic Nifty <acronym title="Graphical User Interface">
</span></div> </span></div>
</div> </div>
<!-- EDIT7 SECTION "Next Steps" [9331-] --> <!-- EDIT7 SECTION "Next Steps" [9330-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:nifty_gui_java_interaction?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:nifty_gui_java_interaction?do=export_xhtmlbody">view online version</a></em></p>

@ -323,7 +323,7 @@ Inside myCustomStyles.xml you define styles like this:
Learn more about how to create styles by looking at the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Build_from_Source"><param name="text" value="<html><u>Nifty GUI source code</u></html>"><param name="textColor" value="blue"></object> for “nifty-style-black”. Copy it as a template and change it to create your own style. Learn more about how to create styles by looking at the <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Build_from_Source"><param name="text" value="<html><u>Nifty GUI source code</u></html>"><param name="textColor" value="blue"></object> for “nifty-style-black”. Copy it as a template and change it to create your own style.
</p> </p>
<hr /> <hr/>
<p> <p>
Learn more from the NiftyGUI page: Learn more from the NiftyGUI page:

@ -10,6 +10,9 @@ Here you can find working combinations of Blender and the OgreXML exporter, with
<tr> <tr>
<th> Blender Version </th><th> OgreXML Exporter Version </th><th> Notes </th> <th> Blender Version </th><th> OgreXML Exporter Version </th><th> Notes </th>
</tr> </tr>
<tr>
<td> 2.6.3 </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.8</u></html>"><param name="textColor" value="blue"></object> </td><td> Root bone, no transforms on object, no envelopes </td>
</tr>
<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> <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>
@ -20,9 +23,9 @@ Here you can find working combinations of Blender and the OgreXML exporter, with
<td> 2.6.0 </td><td> ? </td><td> </td> <td> 2.6.0 </td><td> ? </td><td> </td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT2 TABLE [173-391] --> <!-- EDIT2 TABLE [173-518] -->
</div> </div>
<!-- EDIT1 SECTION "Working Blender and OgreXML Versions" [1-392] --> <!-- EDIT1 SECTION "Working Blender and OgreXML Versions" [1-519] -->
<h1><a>Tips</a></h1> <h1><a>Tips</a></h1>
<div> <div>
@ -54,7 +57,7 @@ Test Character - <object classid="java:org.netbeans.modules.javahelp.BrowserDisp
</p> </p>
</div> </div>
<!-- EDIT3 SECTION "Tips" [393-869] --> <!-- EDIT3 SECTION "Tips" [520-996] -->
<h1><a>Troubleshooting</a></h1> <h1><a>Troubleshooting</a></h1>
<div> <div>
@ -68,5 +71,5 @@ Test Character - <object classid="java:org.netbeans.modules.javahelp.BrowserDisp
</p> </p>
</div> </div>
<!-- EDIT4 SECTION "Troubleshooting" [870-] --> <!-- EDIT4 SECTION "Troubleshooting" [997-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:ogrecompatibility?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:ogrecompatibility?do=export_xhtmlbody">view online version</a></em></p>

@ -225,7 +225,7 @@ The following effect textures are available by default from <code>test-data.jar<
Browse the full source code of all <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/#svn%2Ftrunk%2Fengine%2Fsrc%2Ftest%2Fjme3test%2Feffect"><param name="text" value="<html><u>effect examples</u></html>"><param name="textColor" value="blue"></object> here. Browse the full source code of all <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/#svn%2Ftrunk%2Fengine%2Fsrc%2Ftest%2Fjme3test%2Feffect"><param name="text" value="<html><u>effect examples</u></html>"><param name="textColor" value="blue"></object> here.
</p> </p>
<hr /> <hr/>
<p> <p>

@ -278,7 +278,7 @@ audioRenderer.playSource&#40;waves&#41;;</pre>
See also: <a href="/com/jme3/gde/core/docs/jme3/advanced/audio.html">audio</a>. See also: <a href="/com/jme3/gde/core/docs/jme3/advanced/audio.html">audio</a>.
</p> </p>
<hr /> <hr/>
<p> <p>
See also: See also:

@ -4,26 +4,69 @@
<p> <p>
You can read the graphic card&#039;s capabilities using the <code>com.jme3.renderer.Caps</code> class: When different people test your new game, you may get feedback that the game doesn&#039;t run on their hardware, or that some details don&#039;t look as expected. You need to detect which fetaures the user&#039;s hardware supports, and offer a replacement for non-supported features on olde hardware (or deactivate them automatically).
</p>
<p>
You can read (and print) the capabilities of the user&#039;s graphic card using the <code>com.jme3.renderer.Caps</code> class:
</p> </p>
<pre>Collection&lt;Caps&gt; caps = renderer.getCaps&#40;&#41;; <pre>Collection&lt;Caps&gt; caps = renderer.getCaps&#40;&#41;;
Logger.getLogger&#40;HelloWorld.class.getName&#40;&#41;&#41;.log&#40;Level.INFO, “Caps: &#123;0&#125;” + caps.toString&#40;&#41;&#41;; </pre> Logger.getLogger&#40;HelloWorld.class.getName&#40;&#41;&#41;.log&#40;Level.INFO, “Caps: &#123;0&#125;”, caps.toString&#40;&#41;&#41;;</pre>
<p>
<strong>Note:</strong> Replace <code>HelloWorld</code> by the name of the class where you are using this line.
</p>
</div>
<!-- EDIT1 SECTION "Read Graphic Card Capabilites" [1-731] -->
<h2><a>Examples</a></h2>
<div>
<p> <p>
Replace HelloWorld by the name of the class where you are using this line.
A newer graphic card has modern capabilities, for example OpenGL 2.1 and NonPowerOfTwoTextures:
</p> </p>
<pre>INFO: Running on jMonkeyEngine 3.0.0
INFO: Using LWJGL 2.8.2
INFO: Selected display mode: 1280 x 720 x 0 @0Hz
INFO: Adapter: null
INFO: Driver Version: null
INFO: Vendor: ATI Technologies Inc.
INFO: OpenGL Version: 2.1 ATI-7.14.5
INFO: Renderer: AMD Radeon HD 6770M OpenGL Engine
INFO: GLSL Ver: 1.20
INFO: Timer resolution: 1.000 ticks per second
INFO: Capabilities: [FrameBuffer, FrameBufferMRT, FrameBufferMultisample,
OpenGL20, OpenGL21, ARBprogram, GLSL100, GLSL110, GLSL120,
VertexTextureFetch, TextureArray, FloatTexture,
FloatColorBuffer, FloatDepthBuffer, PackedFloatTexture, SharedExponentTexture, PackedFloatColorBuffer,
TextureCompressionLATC, NonPowerOfTwoTextures, MeshInstancing]</pre>
<p> <p>
The result looks like the following example: Here is an example of the capabilities of an semi-old graphic card that only supports OpenGL 2.0. If you use OpenGL 2.1 features you need to decide whether to branch to a low-quality replacement of the unsupported features (if you still want to support this card); or whether the game will not start at all and displays an error message explaining the user what capabilities his hardware is missing to be able to play the game.
</p> </p>
<pre>Caps: [FrameBuffer, FrameBufferMRT, FrameBufferMultisample, <pre>INFO: Running on jMonkey Engine 3
INFO: Using LWJGL 2.7.1
INFO: Selected display mode: 1024 x 768 x 0 @0Hz
INFO: Adapter: null
INFO: Driver Version: null
INFO: Vendor: ATI Technologies Inc.
INFO: OpenGL Version: 2.0 ATI-1.6.36
INFO: Renderer: ATI Radeon X1600 OpenGL Engine
INFO: GLSL Ver: 1.20
INFO: Timer resolution: 1.000 ticks per second
INFO: Capabilities: [FrameBuffer, FrameBufferMRT, FrameBufferMultisample,
OpenGL20, ARBprogram, GLSL100, GLSL110, GLSL120, OpenGL20, ARBprogram, GLSL100, GLSL110, GLSL120,
VertexTextureFetch, FloatTexture, TextureCompressionLATC]</pre> VertexTextureFetch, FloatTexture,
TextureCompressionLATC, NonPowerOfTwoTextures]</pre>
<p> <p>
This would tell you that this user&#039;s graphic card only supports OpenGL 2.0 and cannot handle newer OpenGL features. This next example is lacking <code>NonPowerOfTwoTextures</code>, this tells you that this user&#039;s graphic card cannot handle textures with sizes that are not square powers of two (such as &quot;128x128&quot;).
</p> </p>
<pre>INFO: Capabilities: [FrameBuffer, FrameBufferMRT, FrameBufferMultisample,
OpenGL20, ARBprogram, GLSL100, GLSL110, GLSL120,
VertexTextureFetch, FloatTexture, TextureCompressionLATC]</pre>
</div> </div>
<!-- EDIT2 SECTION "Examples" [732-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:read_graphic_card_capabilites?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:read_graphic_card_capabilites?do=export_xhtmlbody">view online version</a></em></p>

@ -196,7 +196,66 @@ 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> <pre>Geometry submesh = &#40;Geometry&#41; houseScene.getChild&#40;&quot;door 12&quot;&#41;;</pre>
</div> </div>
<!-- EDIT7 SECTION "How to Access a Named Sub-Mesh" [7563-8366] --> <!-- EDIT7 SECTION "How to Access a Named Sub-Mesh" [7563-8365] -->
<h2><a>What is Culling?</a></h2>
<div>
<p>
There are two types of colling: Face culling, and view frustrum culling.
</p>
<p>
<strong>Face culling</strong> refers to not drawing certain polygons of a mesh. The &quot;inside&quot; of the mesh (the so called backface) is never visible to the player, and as an optimization, game engines skip calculating backfaces by default. You may want to deactivate Face Culling while debugging custom meshes, so you can see them in case you turned them inside-out by accident.
</p>
<p>
You can switch the com.jme3.material.RenderState.FaceCullMode to
</p>
<ul>
<li><div> <code>FaceCullMode.Back</code> (default) – only the frontsides of a mesh are drawn. This is the normal behaviour. </div>
</li>
<li><div> <code>FaceCullMode.Front</code> – only the backsides of meshes are drawn. The mesh will probably turn invisible. Useful if you are debugging a hand-made mesh and try to identify accidental inside-out faces.</div>
</li>
<li><div> <code>FaceCullMode.FrontAndBack</code> – The mesh becomes invisible. </div>
</li>
<li><div> <code>FaceCullMode.Off</code> – Every side of the mesh is drawn. Looks normal, but slows down large scenes.</div>
</li>
</ul>
<p>
Example:
</p>
<pre>material.getAdditionalRenderState&#40;&#41;.setFaceCullMode&#40;FaceCullMode.FrontAndBack&#41;;</pre>
<p>
<strong>View frustum culling</strong> refers to not drawing (and not even calculating) certain whole models in the scene. At any given moment, half of the scene is behind the player and out of sight anyway. View frustum culling is an optimization to not calculate scene elements that are not visible – elements that are &quot;outside the view frustrum&quot;.
</p>
<p>
The decision what is visible and what not, is done automatically by the engine (<code>CullHint.Dynamic</code>). Optionally, you can manually control whether the engine culls individual spatials (and children) from the scene graph:
</p>
<ul>
<li><div> <code>CullHint.Dynamic</code> – Default, faster because it doesn&#039;t waste time with objects that are out of view.</div>
</li>
<li><div> <code>CullHint.Never</code> – Calculate and draw everything always (even if it does not end up on the user&#039;s screen because it&#039;s out of sight). Slower, but can be used while debugging custom meshes.</div>
</li>
<li><div> <code>CullHint.Always</code> – The whole spatial is culled and is not visible. A fast way to hide a Spatial temporarily. Culling a Spatial is faster then detaching it, but it uses more memory.</div>
</li>
<li><div> <code>CullHint.Inherit</code> – Inherit culling behaviour from parent node. </div>
</li>
</ul>
<p>
Example:
</p>
<pre>spatial.setCullHint&#40;CullHint.Never&#41;; // always drawn</pre>
</div>
<!-- EDIT8 SECTION "What is Culling?" [8366-10702] -->
<h2><a>See also</a></h2> <h2><a>See also</a></h2>
<div> <div>
<ul> <ul>
@ -214,5 +273,5 @@ In the following example, the Node <code>house</code> is the loaded model. The s
</span></div> </span></div>
</div> </div>
<!-- EDIT8 SECTION "See also" [8367-] --> <!-- EDIT9 SECTION "See also" [10703-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:spatial?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:spatial?do=export_xhtmlbody">view online version</a></em></p>

@ -302,7 +302,7 @@ You see that you can combine snippets of sample code (such as HelloTerrain and H
<p> <p>
You should spawn high up in the area and fall down to the map, giving you a few seconds to survey the area. Then walk around and see how you like the lay of the land. You should spawn high up in the area and fall down to the map, giving you a few seconds to survey the area. Then walk around and see how you like the lay of the land.
</p> </p>
<hr /> <hr/>
<p> <p>
See also: See also:

@ -1,5 +1,5 @@
<h1><a>Update Loop</a></h1> <h1><a>Main Update Loop</a></h1>
<div> <div>
<p> <p>
@ -8,55 +8,67 @@ Extending your application from com.jme3.app.<a href="/com/jme3/gde/core/docs/jm
</p> </p>
<p> <p>
Examples: Here you remote-control NPCs (computer controlled characters), generate game events, and respond to user input. Some usage examples: Here you remote-control NPCs (computer controlled characters), generate game events, and respond to user input.
</p>
<p>
To let you see the main update loop in context, understand that the SimpleApplication does the following:
</p> </p>
<ul> <ul>
<li><div> Initialization – <code>simpleInitApp()</code> method</div> <li><div> <strong>Initialization</strong> – Execute <code>simpleInitApp()</code> method once.</div>
</li>
<li><div> <strong>Main Update Loop</strong></div>
<ol> <ol>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/input_handling.html">Input handling</a> – input listeners</div> <li><div> Input listeners respond to mouse clicks and keyboard presses – <a href="/com/jme3/gde/core/docs/jme3/advanced/input_handling.html">Input handling</a> </div>
</li> </li>
<li><div> Update game state</div> <li><div> Update game state:</div>
<ol> <ol>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a> update</div> <li><div> Update overall game state – Execute <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a></div>
</li> </li>
<li><div> User update <code>simpleUpdate()</code> method</div> <li><div> User code update – Execute <code>simpleUpdate()</code> method</div>
</li> </li>
<li><div> Entity logical update – <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a></div> <li><div> Logical update of entities – Execute <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a></div>
</li> </li>
</ol> </ol>
</li> </li>
<li><div> render</div> <li><div> Render audio and video</div>
<ol> <ol>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a> rendering</div> <li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">Application States</a> rendering.</div>
</li> </li>
<li><div> Scene rendering</div> <li><div> Scene rendering.</div>
</li> </li>
<li><div> User rendering – <code>simpleRender()</code> method</div> <li><div> User code rendering – Execute <code>simpleRender()</code> method.</div>
</li> </li>
</ol> </ol>
</li> </li>
</ol> <li><div> Repeat loop.</div>
</li> </li>
<li><div> If exit is requested, then cleanup and destroy</div> </ol>
</li> </li>
<li><div> Repeat</div> <li><div> <strong>Quit</strong> – If user requests <code>exit()</code>, execute <code>cleanup()</code> and <code>destroy()</code>. <br/>
The jME window closes and the loop ends.</div>
</li> </li>
</ul> </ul>
</div> </div>
<!-- EDIT1 SECTION "Update Loop" [1-784] --> <!-- EDIT1 SECTION "Main Update Loop" [1-1170] -->
<h2><a>Usage</a></h2> <h2><a>Usage</a></h2>
<div> <div>
<p> <p>
There are two strategies how advanced developers can spread out their init and update code over several Java objects: In a trivial <a href="/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html">SimpleApplication</a> (such as a <a href="/com/jme3/gde/core/docs/jme3/beginner.html">Hello World tutorial</a>), all code is either in the <code>simpleInitApp()</code> (initialization) or <code>simpleUpdate()</code> (behaviour) method – or in a helper method/class that is called from one of these two. This trivial approach will make your main class very long, hard to read, and hard to maintain. You don&#039;t need to load the whole scene at once, and you don&#039;t need to run all conditionals tests all the time.
</p>
<p>
It&#039;s a best practice to modularize your game mechanics and spread out initialization and update loop code over several Java objects:
</p> </p>
<ul> <ul>
<li><div> Move code blocks from the simpleInitApp() method to <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">AppStates</a>.</div> <li><div> Move modular code blocks from the <code>simpleInitApp()</code> method into <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">AppStates</a>. Attach AppStates to initialize custom subsets of &quot;one dungeon&quot;, and detach it when the player exits this &quot;dungeon&quot;. <br/>
Examples: Weather/sky audio and visuals, physics collision shapes, sub-rootnodes of individual dungeons including dungeon NPCs, etc.</div>
</li> </li>
<li><div> Move code blocks from the simpleUpdate() method to <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a> to control entity behavior.</div> <li><div> Move modular code blocks from the <code>simpleUpdate()</code> method into the update loops of <a href="/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html">Custom Controls</a> to control individual entity behavior (NPCs), and into the update method of <a href="/com/jme3/gde/core/docs/jme3/advanced/application_states.html">AppStates</a> to control world events. <br/>
Examples: Weather behaviour, light behaviour, physics behaviour, individual NPC behaviour, trap behaviour, etc.</div>
</li> </li>
</ul> </ul>
<div><span> <div><span>
@ -71,5 +83,5 @@ There are two strategies how advanced developers can spread out their init and u
</span></div> </span></div>
</div> </div>
<!-- EDIT2 SECTION "Usage" [785-] --> <!-- EDIT2 SECTION "Usage" [1171-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:update_loop?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:update_loop?do=export_xhtmlbody">view online version</a></em></p>

@ -340,7 +340,7 @@ Now you can load animated models, identify stored animations, and trigger animat
Now that your character can walk, wouldn&#039;t it be cool if it could also pick up things, or aim a weapon at things, or open doors? Time to reveal the secrets of <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html">mouse picking</a>! Now that your character can walk, wouldn&#039;t it be cool if it could also pick up things, or aim a weapon at things, or open doors? Time to reveal the secrets of <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html">mouse picking</a>!
</p> </p>
<hr /> <hr/>
<p> <p>
See also: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://docs.google.com/leaf?id=0B9hhZie2D-fEYmRkMTYwN2YtMzQ0My00NTM4LThhOTYtZTk1MTRlYTNjYTc3&amp;hl=en"><param name="text" value="<html><u>Creating Animated OgreXML Models in Blender</u></html>"><param name="textColor" value="blue"></object> See also: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://docs.google.com/leaf?id=0B9hhZie2D-fEYmRkMTYwN2YtMzQ0My00NTM4LThhOTYtZTk1MTRlYTNjYTc3&amp;hl=en"><param name="text" value="<html><u>Creating Animated OgreXML Models in Blender</u></html>"><param name="textColor" value="blue"></object>

@ -466,7 +466,7 @@ Now you know how to populate the scenegraph with static shapes and models, and h
Let&#039;s add some action to the scene and continue with the <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html">Update Loop</a>! Let&#039;s add some action to the scene and continue with the <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html">Update Loop</a>!
</p> </p>
<hr /> <hr/>
<p> <p>
<strong>See also:</strong> <strong>See also:</strong>

@ -369,7 +369,7 @@ You now know how to add the two most common types of sound to your game: Global
Want some fire and explosions to go with your sounds? Read on to learn more about <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html">effects</a>. Want some fire and explosions to go with your sounds? Read on to learn more about <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html">effects</a>.
</p> </p>
<hr /> <hr/>
<p> <p>

@ -183,7 +183,7 @@ public class HelloCollision extends SimpleApplication
&#125;</pre> &#125;</pre>
<p> <p>
Run the sample. You should see a town square with houses and a monument. Use the WASD keys and the mouse to navigate around with a first-person perspective. Run forward and jump by pressing W and Space. Note how you step over the sidewalk, and up the steps to the monument. You can walk in the alleys between the houses, but the walls are solid. Don&#039;t walk over the edge of the world! <img src="/wiki/lib/images/smileys/icon_smile.gif" class="middle" alt=":-)" /> Run the sample. You should see a town square with houses and a monument. Use the WASD keys and the mouse to navigate around with a first-person perspective. Run forward and jump by pressing W and Space. Note how you step over the sidewalk, and up the steps to the monument. You can walk in the alleys between the houses, but the walls are solid. Don&#039;t walk over the edge of the world! <img src="/wiki/lib/images/smileys/icon_smile.gif" class="middle" alt=":-)"/>
</p> </p>
</div> </div>
@ -508,7 +508,7 @@ You learned to speed up the physics calculations by using the CollisionShapeFact
Terrains are another type of scene in which you will want to walk around. Let&#039;s proceed with learning <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html">how to generate terrains</a> now. Terrains are another type of scene in which you will want to walk around. Let&#039;s proceed with learning <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html">how to generate terrains</a> now.
</p> </p>
<hr /> <hr/>
<p> <p>

@ -369,7 +369,7 @@ You have learned that many different effects can be created by changing the para
Now you move on to another exciting chapter – the simulation of <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_physics"><param name="text" value="<html><u>physical objects</u></html>"><param name="textColor" value="blue"></object>. Let&#039;s shoot some cannon balls at a brick wall! Now you move on to another exciting chapter – the simulation of <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_physics"><param name="text" value="<html><u>physical objects</u></html>"><param name="textColor" value="blue"></object>. Let&#039;s shoot some cannon balls at a brick wall!
</p> </p>
<hr /> <hr/>
<div><span> <div><span>
<a href="/wiki/doku.php/tag:beginner?do=showtag&amp;tag=tag%3Abeginner">beginner</a>, <a href="/wiki/doku.php/tag:beginner?do=showtag&amp;tag=tag%3Abeginner">beginner</a>,
<a href="/wiki/doku.php/tag:documentation?do=showtag&amp;tag=tag%3Adocumentation">documentation</a>, <a href="/wiki/doku.php/tag:documentation?do=showtag&amp;tag=tag%3Adocumentation">documentation</a>,

@ -201,7 +201,7 @@ Now you are listening to the update loop, &quot;the heart beat&quot; of the game
<p> <p>
The next thing the game needs is some <em>inter</em>action! Continue learning how to <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html">respond to user input</a>. The next thing the game needs is some <em>inter</em>action! Continue learning how to <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html">respond to user input</a>.
</p> </p>
<hr /> <hr/>
<p> <p>
See also: See also:

@ -417,7 +417,7 @@ You have also learned that a material can be stored in a .j3m file. The file ref
Now that you know how to load models and how to assign good-looking materials to them, let&#039;s have a look at how to animate models in the next chapter, <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html">Hello Animation</a>. Now that you know how to load models and how to assign good-looking materials to them, let&#039;s have a look at how to animate models in the next chapter, <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html">Hello Animation</a>.
</p> </p>
<hr /> <hr/>
<p> <p>
See also See also

@ -482,7 +482,7 @@ This code sample does the following:
</li> </li>
<li><div> You create a RigidBodyControl floor_phy for floor_geo.</div> <li><div> You create a RigidBodyControl floor_phy for floor_geo.</div>
<ul> <ul>
<li><div> floor_phy has a mass of 0f <img src="/wiki/lib/images/smileys/icon_exclaim.gif" class="middle" alt=":!:" /></div> <li><div> floor_phy has a mass of 0f <img src="/wiki/lib/images/smileys/icon_exclaim.gif" class="middle" alt=":!:"/></div>
</li> </li>
<li><div> You add floor_phy to floor_geo.</div> <li><div> You add floor_phy to floor_geo.</div>
</li> </li>

@ -506,7 +506,7 @@ Use your imagination from here:
Now, wouldn&#039;t it be nice if those targets and the floor were solid objects and you could walk around between them? Let&#039;s continue to learn about <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html">Collision Detection</a>. Now, wouldn&#039;t it be nice if those targets and the floor were solid objects and you could walk around between them? Let&#039;s continue to learn about <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html">Collision Detection</a>.
</p> </p>
<hr /> <hr/>
<p> <p>
See also: See also:

@ -326,7 +326,7 @@ The now following tutorials teach how you accomplish these tasks with the jMonke
Continue with the <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_node.html">Hello Node</a> tutorial, where you learn more details about how to initialize the game world, also known as the scene graph. Continue with the <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_node.html">Hello Node</a> tutorial, where you learn more details about how to initialize the game world, also known as the scene graph.
</p> </p>
<hr /> <hr/>
<p> <p>
See also: See also:

@ -554,7 +554,7 @@ You have learned how to create terrains that are more efficient than loading one
Do you want to hear your players say &quot;ouch!&quot; when they bump into a wall or fall off a hill? Continue with learning <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html">how to add sound</a> to your game. Do you want to hear your players say &quot;ouch!&quot; when they bump into a wall or fall off a hill? Continue with learning <a href="/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html">how to add sound</a> to your game.
</p> </p>
<hr /> <hr/>
<p> <p>
See also: See also:

@ -46,7 +46,7 @@ We recommend downloading the <object classid="java:org.netbeans.modules.javahelp
For a detailed description of the created jar files see <a href="/com/jme3/gde/core/docs/jme3/jme3_source_structure#structure_of_jmonkeyengine3_jars.html">this list</a>. For a detailed description of the created jar files see <a href="/com/jme3/gde/core/docs/jme3/jme3_source_structure#structure_of_jmonkeyengine3_jars.html">this list</a>.
</p> </p>
<hr /> <hr/>
<p> <p>
Learn more about: Learn more about:

@ -148,7 +148,7 @@ If you are working on a game project that depends on jme3:
This tip works for any third-party JAR library that you use. (You may have to download the javadoc/sources from their home page separately). This tip works for any third-party JAR library that you use. (You may have to download the javadoc/sources from their home page separately).
</p> </p>
<hr /> <hr/>
<p> <p>
Sources used: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/wiki/BuildJme3"><param name="text" value="<html><u>BuildJme3</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.jmonkeyengine.com/forum/index.php?topic=13108.0"><param name="text" value="<html><u>NetBeans tutorial from forum</u></html>"><param name="textColor" value="blue"></object> Sources used: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/wiki/BuildJme3"><param name="text" value="<html><u>BuildJme3</u></html>"><param name="textColor" value="blue"></object>, <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.jmonkeyengine.com/forum/index.php?topic=13108.0"><param name="text" value="<html><u>NetBeans tutorial from forum</u></html>"><param name="textColor" value="blue"></object>

@ -337,7 +337,7 @@ The blend file, the ogre xml files and the textures can be found in the download
<div> <div>
<p> <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. 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>
<p> <p>

@ -31,14 +31,14 @@ Extend com.jme3.app.SimpleApplication.
<div> <div>
<p> <p>
Yes! For your own games, you create a custom base class that extends <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/app/SimpleApplication.java"><param name="text" value="<html><u>com.jme3.app.SimpleApplication</u></html>"><param name="textColor" value="blue"></object> class, so it&#039;s no longer a &quot;simple&quot; application. Configure your <a href="/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html">application settings</a>, and customize away. Yes! Actually, you MUST customize it! For your own games, you always create a custom base class that extends <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/app/SimpleApplication.java"><param name="text" value="<html><u>com.jme3.app.SimpleApplication</u></html>"><param name="textColor" value="blue"></object> class. From now on it&#039;s no longer a &quot;simple application&quot; – it&#039;s now your game. Configure your <a href="/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html">application settings</a>, implement methods, and customize away!
<br/> <br/>
<strong>Learn more:</strong> <a href="/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html">SimpleApplication</a>, <a href="/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html">AppSettings</a>. <strong>Learn more:</strong> <a href="/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html">SimpleApplication</a>, <a href="/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html">AppSettings</a>.
</p> </p>
</div> </div>
<!-- EDIT5 SECTION "Can I customize the SimpleApplication class?" [516-1022] --> <!-- EDIT5 SECTION "Can I customize the SimpleApplication class?" [516-1112] -->
<h3><a>How can I switch between screens or states?</a></h3> <h3><a>How can I switch between screens or states?</a></h3>
<div> <div>
@ -50,7 +50,7 @@ You should break app your application logic into components by spreading it out
</p> </p>
</div> </div>
<!-- EDIT6 SECTION "How can I switch between screens or states?" [1023-1567] --> <!-- EDIT6 SECTION "How can I switch between screens or states?" [1113-1657] -->
<h3><a>How do I pause/unpause a game?</a></h3> <h3><a>How do I pause/unpause a game?</a></h3>
<div> <div>
@ -62,7 +62,7 @@ You split up your application into several AppStates and implement the setEnable
</p> </p>
</div> </div>
<!-- EDIT7 SECTION "How do I pause/unpause a game?" [1568-2173] --> <!-- EDIT7 SECTION "How do I pause/unpause a game?" [1658-2263] -->
<h3><a>How do I disable logger output to the console?</a></h3> <h3><a>How do I disable logger output to the console?</a></h3>
<div> <div>
@ -86,7 +86,7 @@ For the release, switch the severity level of the default logger to print only S
</p> </p>
</div> </div>
<!-- EDIT8 SECTION "How do I disable logger output to the console?" [2174-2660] --> <!-- EDIT8 SECTION "How do I disable logger output to the console?" [2264-2750] -->
<h3><a>Why does the executable crash with &quot;Cannot locate resource&quot;?</a></h3> <h3><a>Why does the executable crash with &quot;Cannot locate resource&quot;?</a></h3>
<div> <div>
@ -98,7 +98,7 @@ Make sure to only load() models converted to .j3o binary format, not the origina
</p> </p>
</div> </div>
<!-- EDIT9 SECTION "Why does the executable crash with Cannot locate resource?" [2661-2991] --> <!-- EDIT9 SECTION "Why does the executable crash with Cannot locate resource?" [2751-3081] -->
<h3><a>What is java.lang.LinkageError: Version mismatch?</a></h3> <h3><a>What is java.lang.LinkageError: Version mismatch?</a></h3>
<div> <div>
@ -110,29 +110,21 @@ To fix this, search for .dll (Windows), .jnilib (Mac), and .so (Linux) files for
</p> </p>
</div> </div>
<!-- EDIT10 SECTION "What is java.lang.LinkageError: Version mismatch?" [2992-4375] --> <!-- EDIT10 SECTION "What is java.lang.LinkageError: Version mismatch?" [3082-4465] -->
<h2><a>I want to load my scene</a></h2> <h2><a>I want to load my scene</a></h2>
<div> <div>
</div> </div>
<!-- EDIT11 SECTION "I want to load my scene" [4376-4411] --> <!-- EDIT11 SECTION "I want to load my scene" [4466-4501] -->
<h3><a>How do I make objects appear / disappear in the 3D scene?</a></h3> <h3><a>How do I make objects appear / disappear in the 3D scene?</a></h3>
<div> <div>
<p> <p>
To make a spatial appear in the scene, you attach it to the rootNode, To remove a spatial, you detach it. To make a spatial appear in the scene, you attach it to the rootNode (or to a node that is attached to the rootnode). To remove a spatial, you detach it from its parent node.
</p> </p>
<pre>rootNode.attachChild&#40;spatial&#41;; // appear</pre> <pre>rootNode.attachChild&#40;spatial&#41;; // appear in scene</pre>
<pre>rootNode.detachChild&#40;spatial&#41;; // remove</pre> <pre>rootNode.detachChild&#40;spatial&#41;; // remove from scene</pre>
<p>
Optionally, you can control whether the engine culls an object always or never.
</p>
<pre>spatial.setCullHint&#40;CullHint.Never&#41;; // always drawn</pre>
<pre>spatial.setCullHint&#40;CullHint.Always&#41;; // never drawn</pre>
<p> <p>
@ -140,7 +132,7 @@ Optionally, you can control whether the engine culls an object always or never.
</p> </p>
</div> </div>
<!-- EDIT12 SECTION "How do I make objects appear / disappear in the 3D scene?" [4412-5321] --> <!-- EDIT12 SECTION "How do I make objects appear / disappear in the 3D scene?" [4502-5278] -->
<h3><a>Why do I get AssetNotFoundException when loading X ?</a></h3> <h3><a>Why do I get AssetNotFoundException when loading X ?</a></h3>
<div> <div>
@ -166,7 +158,7 @@ this.assetManager.registerLocator&#40;&quot;town.zip&quot;, ZipLocator.class&#41
</p> </p>
</div> </div>
<!-- EDIT13 SECTION "Why do I get AssetNotFoundException when loading X ?" [5322-6204] --> <!-- EDIT13 SECTION "Why do I get AssetNotFoundException when loading X ?" [5279-6161] -->
<h3><a>How do I Create 3-D models, textures, sounds?</a></h3> <h3><a>How do I Create 3-D models, textures, sounds?</a></h3>
<div> <div>
@ -182,7 +174,7 @@ You create sounds in an audio editor, for example, Audacity, and export them as
</p> </p>
</div> </div>
<!-- EDIT14 SECTION "How do I Create 3-D models, textures, sounds?" [6205-7202] --> <!-- EDIT14 SECTION "How do I Create 3-D models, textures, sounds?" [6162-7159] -->
<h3><a>How do I load a 3-D model into the scene?</a></h3> <h3><a>How do I load a 3-D model into the scene?</a></h3>
<div> <div>
@ -202,7 +194,7 @@ Spatial ninja = assetManager.loadModel&#40;&quot;Models/Ninja/Ninja.j3o&quot;&#4
</p> </p>
</div> </div>
<!-- EDIT15 SECTION "How do I load a 3-D model into the scene?" [7203-8408] --> <!-- EDIT15 SECTION "How do I load a 3-D model into the scene?" [7160-8365] -->
<h3><a>How do initialize the scene?</a></h3> <h3><a>How do initialize the scene?</a></h3>
<div> <div>
@ -213,12 +205,12 @@ Use the simpleInitApp() method in SimpleApplication (or initApp() in Application
</p> </p>
</div> </div>
<!-- EDIT16 SECTION "How do initialize the scene?" [8409-8741] --> <!-- EDIT16 SECTION "How do initialize the scene?" [8366-8698] -->
<h2><a>I want to transform objects in the scene</a></h2> <h2><a>I want to transform objects in the scene</a></h2>
<div> <div>
</div> </div>
<!-- EDIT17 SECTION "I want to transform objects in the scene" [8742-8794] --> <!-- EDIT17 SECTION "I want to transform objects in the scene" [8699-8751] -->
<h3><a>How do I move or turn or resize a spatial?</a></h3> <h3><a>How do I move or turn or resize a spatial?</a></h3>
<div> <div>
@ -234,7 +226,7 @@ To move or turn or resize a spatial you use transformations. You can concatenate
</p> </p>
</div> </div>
<!-- EDIT18 SECTION "How do I move or turn or resize a spatial?" [8795-9376] --> <!-- EDIT18 SECTION "How do I move or turn or resize a spatial?" [8752-9333] -->
<h3><a>How do I make a spatial move by itself?</a></h3> <h3><a>How do I make a spatial move by itself?</a></h3>
<div> <div>
@ -247,7 +239,7 @@ Change the geometry&#039;s translation (position) live in the update loop using
</p> </p>
</div> </div>
<!-- EDIT19 SECTION "How do I make a spatial move by itself?" [9377-10240] --> <!-- EDIT19 SECTION "How do I make a spatial move by itself?" [9334-10197] -->
<h3><a>How do I access a named sub-mesh in Model?</a></h3> <h3><a>How do I access a named sub-mesh in Model?</a></h3>
<div> <div>
<pre>Geometry result = spatial.getName&#40;&#41;.startsWith&#40;name&#41;;</pre> <pre>Geometry result = spatial.getName&#40;&#41;.startsWith&#40;name&#41;;</pre>
@ -258,7 +250,7 @@ Change the geometry&#039;s translation (position) live in the update loop using
</p> </p>
</div> </div>
<!-- EDIT20 SECTION "How do I access a named sub-mesh in Model?" [10241-10408] --> <!-- EDIT20 SECTION "How do I access a named sub-mesh in Model?" [10198-10365] -->
<h3><a>How do I make procedural or custom shapes?</a></h3> <h3><a>How do I make procedural or custom shapes?</a></h3>
<div> <div>
@ -269,12 +261,12 @@ You can programmatically create com.jme3.scene.Mesh&#039;es.
</p> </p>
</div> </div>
<!-- EDIT21 SECTION "How do I make procedural or custom shapes?" [10409-10569] --> <!-- EDIT21 SECTION "How do I make procedural or custom shapes?" [10366-10526] -->
<h2><a>I want to change the surface of objects in the scene</a></h2> <h2><a>I want to change the surface of objects in the scene</a></h2>
<div> <div>
</div> </div>
<!-- EDIT22 SECTION "I want to change the surface of objects in the scene" [10570-10634] --> <!-- EDIT22 SECTION "I want to change the surface of objects in the scene" [10527-10591] -->
<h3><a>Why is my UV wrapping / texture appearance all wrong?</a></h3> <h3><a>Why is my UV wrapping / texture appearance all wrong?</a></h3>
<div> <div>
@ -292,7 +284,7 @@ You can set the boolean value in the constructor of TextureKey to flipped or not
<pre> material.setTexture&#40;&quot;ColorMap&quot;, this.assetManager.loadTexture&#40;new TextureKey&#40;&quot;myTexture.jpg&quot;, false&#41;&#41;&#41;;</pre> <pre> material.setTexture&#40;&quot;ColorMap&quot;, this.assetManager.loadTexture&#40;new TextureKey&#40;&quot;myTexture.jpg&quot;, false&#41;&#41;&#41;;</pre>
</div> </div>
<!-- EDIT23 SECTION "Why is my UV wrapping / texture appearance all wrong?" [10635-11184] --> <!-- EDIT23 SECTION "Why is my UV wrapping / texture appearance all wrong?" [10592-11141] -->
<h3><a>How do I scale, mirror, or wrap a texture?</a></h3> <h3><a>How do I scale, mirror, or wrap a texture?</a></h3>
<div> <div>
@ -310,7 +302,7 @@ You can choose among various <code>com.jme3.texture.Texture.WrapMode</code>s for
<pre>material.getTextureParam&#40;&quot;DiffuseMap&quot;&#41;.getTextureValue&#40;&#41;.setWrap&#40;WrapMode.Repeat&#41;;</pre> <pre>material.getTextureParam&#40;&quot;DiffuseMap&quot;&#41;.getTextureValue&#40;&#41;.setWrap&#40;WrapMode.Repeat&#41;;</pre>
</div> </div>
<!-- EDIT24 SECTION "How do I scale, mirror, or wrap a texture?" [11185-11726] --> <!-- EDIT24 SECTION "How do I scale, mirror, or wrap a texture?" [11142-11683] -->
<h3><a>How do I change color or shininess of an material?</a></h3> <h3><a>How do I change color or shininess of an material?</a></h3>
<div> <div>
@ -323,7 +315,7 @@ Use the AssetManager to load Materials, and change material settings.
</p> </p>
</div> </div>
<!-- EDIT25 SECTION "How do I change color or shininess of an material?" [11727-12314] --> <!-- EDIT25 SECTION "How do I change color or shininess of an material?" [11684-12271] -->
<h3><a>How do I make a surface wood, stone, metal, etc?</a></h3> <h3><a>How do I make a surface wood, stone, metal, etc?</a></h3>
<div> <div>
@ -336,7 +328,7 @@ Create Textures as image files. Use the AssetManager to load a Material and use
</p> </p>
</div> </div>
<!-- EDIT26 SECTION "How do I make a surface wood, stone, metal, etc?" [12315-13088] --> <!-- EDIT26 SECTION "How do I make a surface wood, stone, metal, etc?" [12272-13045] -->
<h3><a>Why are materials too bright, too dark, or flickering?</a></h3> <h3><a>Why are materials too bright, too dark, or flickering?</a></h3>
<div> <div>
@ -345,7 +337,7 @@ If you use a lit material (based on Lighting.j3md) then you must attach a light
</p> </p>
</div> </div>
<!-- EDIT27 SECTION "Why are materials too bright, too dark, or flickering?" [13089-13902] --> <!-- EDIT27 SECTION "Why are materials too bright, too dark, or flickering?" [13046-13859] -->
<h3><a>How do I make geometries cast a shadow?</a></h3> <h3><a>How do I make geometries cast a shadow?</a></h3>
<div> <div>
@ -358,7 +350,7 @@ Use com.jme3.shadow.BasicShadowRenderer together with com.jme3.light.Directional
</p> </p>
</div> </div>
<!-- EDIT28 SECTION "How do I make geometries cast a shadow?" [13903-14411] --> <!-- EDIT28 SECTION "How do I make geometries cast a shadow?" [13860-14368] -->
<h3><a>How do I make materials transparent?</a></h3> <h3><a>How do I make materials transparent?</a></h3>
<div> <div>
@ -374,23 +366,36 @@ Assign a texture with an alpha channel to a Material and set the Material&#039;s
</p> </p>
</div> </div>
<!-- EDIT29 SECTION "How do I make materials transparent?" [14412-14848] --> <!-- EDIT29 SECTION "How do I make materials transparent?" [14369-14805] -->
<h3><a>How do I force or disable backface culling?</a></h3> <h3><a>How do I force or disable culling?</a></h3>
<div> <div>
<p> <p>
You can switch the com.jme3.material.RenderState.FaceCullMode to Back, Front, FrontAndBack, or Off. This influences whether the front or backside of an object is being drawn. By default, backsides are culled (not drawn) because they are usually not visible anyway. While debugging custom meshes, you can switch the <code>com.jme3.material.RenderState.FaceCullMode</code> off to see the inside and outside of the mesh.
</p>
<pre>someMaterial.getAdditionalRenderState&#40;&#41;.setFaceCullMode&#40;FaceCullMode.Off&#41;;</pre>
<p>
You can also deactivate the <code>com.jme3.scene.Spatial.CullHint</code> of a whole spatial to force jme to calculate it even if it is behind the camera and outside of view.
</p>
<pre>someNode.setCullHint&#40;CullHint.Never&#41;;</pre>
<p>
<strong>Learn more:</strong> <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">Spatial</a>
</p> </p>
<pre>material.getAdditionalRenderState&#40;&#41;.setFaceCullMode&#40;FaceCullMode.FrontAndBack&#41;;</pre>
</div> </div>
<!-- EDIT30 SECTION "How do I force or disable backface culling?" [14849-15265] --> <!-- EDIT30 SECTION "How do I force or disable culling?" [14806-15354] -->
<h3><a>Can I draw only an outline of the scene?</a></h3> <h3><a>Can I draw only an outline of the scene?</a></h3>
<div> <div>
<p> <p>
Create a material and switch its renders state to wireframe. Add a renders state to the material&#039;s and activate <code>Wireframe</code>.
</p> </p>
<pre>material.getAdditionalRenderState&#40;&#41;.setWireframe&#40;true&#41;;</pre> <pre>material.getAdditionalRenderState&#40;&#41;.setWireframe&#40;true&#41;;</pre>
@ -401,12 +406,12 @@ Create a material and switch its renders state to wireframe.
</p> </p>
</div> </div>
<!-- EDIT31 SECTION "Can I draw only an outline of the scene?" [15266-15497] --> <!-- EDIT31 SECTION "Can I draw only an outline of the scene?" [15355-15591] -->
<h2><a>I want to control the camera</a></h2> <h2><a>I want to control the camera</a></h2>
<div> <div>
</div> </div>
<!-- EDIT32 SECTION "I want to control the camera" [15498-15538] --> <!-- EDIT32 SECTION "I want to control the camera" [15592-15632] -->
<h3><a>How do I switch between third-person and first-person view ?</a></h3> <h3><a>How do I switch between third-person and first-person view ?</a></h3>
<div> <div>
@ -428,18 +433,18 @@ chaseCam = new ChaseCamera&#40;cam, spatial, inputManager&#41;;</pre>
</ul> </ul>
</div> </div>
<!-- EDIT33 SECTION "How do I switch between third-person and first-person view ?" [15539-16595] --> <!-- EDIT33 SECTION "How do I switch between third-person and first-person view ?" [15633-16689] -->
<h3><a>How do I increase camera speed?</a></h3> <h3><a>How do I increase camera speed?</a></h3>
<div> <div>
<pre>flyCam.setMoveSpeed&#40;50f&#41;;</pre> <pre>flyCam.setMoveSpeed&#40;50f&#41;;</pre>
</div> </div>
<!-- EDIT34 SECTION "How do I increase camera speed?" [16596-16682] --> <!-- EDIT34 SECTION "How do I increase camera speed?" [16690-16776] -->
<h2><a>Actions, Interactions, Physics</a></h2> <h2><a>Actions, Interactions, Physics</a></h2>
<div> <div>
</div> </div>
<!-- EDIT35 SECTION "Actions, Interactions, Physics" [16683-16725] --> <!-- EDIT35 SECTION "Actions, Interactions, Physics" [16777-16819] -->
<h3><a>How do I implement game logic / game mechanics?</a></h3> <h3><a>How do I implement game logic / game mechanics?</a></h3>
<div> <div>
@ -450,7 +455,7 @@ Use Controls to define the behaviour of types of Spatials. Use Application State
</p> </p>
</div> </div>
<!-- EDIT36 SECTION "How do I implement game logic / game mechanics?" [16726-17287] --> <!-- EDIT36 SECTION "How do I implement game logic / game mechanics?" [16820-17381] -->
<h3><a>How do I let players interact via keyboard?</a></h3> <h3><a>How do I let players interact via keyboard?</a></h3>
<div> <div>
@ -461,7 +466,7 @@ Use com.jme3.input.KeyInput and a Input Listener.
</p> </p>
</div> </div>
<!-- EDIT37 SECTION "How do I let players interact via keyboard?" [17288-17495] --> <!-- EDIT37 SECTION "How do I let players interact via keyboard?" [17382-17589] -->
<h3><a>How do I let players interact by clicking?</a></h3> <h3><a>How do I let players interact by clicking?</a></h3>
<div> <div>
@ -474,7 +479,7 @@ Players typically click the mouse to pick up objects, to open doors, to shoot a
</p> </p>
</div> </div>
<!-- EDIT38 SECTION "How do I let players interact by clicking?" [17496-18320] --> <!-- EDIT38 SECTION "How do I let players interact by clicking?" [17590-18414] -->
<h3><a>How do I animate characters?</a></h3> <h3><a>How do I animate characters?</a></h3>
<div> <div>
@ -487,7 +492,7 @@ Create an animated OgreMesh model with bones in a 3-D mesh editor (e.g. Blender)
</p> </p>
</div> </div>
<!-- EDIT39 SECTION "How do I animate characters?" [18321-18792] --> <!-- EDIT39 SECTION "How do I animate characters?" [18415-18886] -->
<h3><a>How do I keep players from falling through walls and floors?</a></h3> <h3><a>How do I keep players from falling through walls and floors?</a></h3>
<div> <div>
@ -498,7 +503,7 @@ Use collision detection. The most common solution is to use jme&#039;s physics i
</p> </p>
</div> </div>
<!-- EDIT40 SECTION "How do I keep players from falling through walls and floors?" [18793-19155] --> <!-- EDIT40 SECTION "How do I keep players from falling through walls and floors?" [18887-19249] -->
<h3><a>How do I make balls/wheels/etc bounce and roll?</a></h3> <h3><a>How do I make balls/wheels/etc bounce and roll?</a></h3>
<div> <div>
@ -511,7 +516,7 @@ Add physics controls to Spatials and give them spherical or cylindrical bounding
</p> </p>
</div> </div>
<!-- EDIT41 SECTION "How do I make balls/wheels/etc bounce and roll?" [19156-19753] --> <!-- EDIT41 SECTION "How do I make balls/wheels/etc bounce and roll?" [19250-19847] -->
<h3><a>How do I debug weird Physics behaviour?</a></h3> <h3><a>How do I debug weird Physics behaviour?</a></h3>
<div> <div>
@ -521,7 +526,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> <pre>bulletAppState.getPhysicsSpace&#40;&#41;.enableDebug&#40;assetManager&#41;;</pre>
</div> </div>
<!-- EDIT42 SECTION "How do I debug weird Physics behaviour?" [19754-20067] --> <!-- EDIT42 SECTION "How do I debug weird Physics behaviour?" [19848-20161] -->
<h3><a>How do I make a walking character?</a></h3> <h3><a>How do I make a walking character?</a></h3>
<div> <div>
@ -534,7 +539,7 @@ Code samples: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplay
</p> </p>
</div> </div>
<!-- EDIT43 SECTION "How do I make a walking character?" [20068-20626] --> <!-- EDIT43 SECTION "How do I make a walking character?" [20162-20720] -->
<h3><a>How do I steer vehicles?</a></h3> <h3><a>How do I steer vehicles?</a></h3>
<div> <div>
@ -547,7 +552,7 @@ Code samples: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplay
</p> </p>
</div> </div>
<!-- EDIT44 SECTION "How do I steer vehicles?" [20627-20994] --> <!-- EDIT44 SECTION "How do I steer vehicles?" [20721-21088] -->
<h3><a>Can objects swing like a pendulums, chains, ropebridges?</a></h3> <h3><a>Can objects swing like a pendulums, chains, ropebridges?</a></h3>
<div> <div>
@ -559,12 +564,12 @@ Use a PhysicsControl&#039;s hinges and joints.
</p> </p>
</div> </div>
<!-- EDIT45 SECTION "Can objects swing like a pendulums, chains, ropebridges?" [20995-21395] --> <!-- EDIT45 SECTION "Can objects swing like a pendulums, chains, ropebridges?" [21089-21489] -->
<h2><a>Default GUI Display</a></h2> <h2><a>Default GUI Display</a></h2>
<div> <div>
</div> </div>
<!-- EDIT46 SECTION "Default GUI Display" [21396-21427] --> <!-- EDIT46 SECTION "Default GUI Display" [21490-21521] -->
<h3><a>What are these FPS/Objects/Vertices/Triangles statistics?</a></h3> <h3><a>What are these FPS/Objects/Vertices/Triangles statistics?</a></h3>
<div> <div>
@ -576,7 +581,7 @@ At the bottom left of every default SimpleGame, you see the <a href="/com/jme3/g
</p> </p>
</div> </div>
<!-- EDIT47 SECTION "What are these FPS/Objects/Vertices/Triangles statistics?" [21428-21955] --> <!-- EDIT47 SECTION "What are these FPS/Objects/Vertices/Triangles statistics?" [21522-22049] -->
<h3><a>How do I get rid of the FPS/Objects statistics?</a></h3> <h3><a>How do I get rid of the FPS/Objects statistics?</a></h3>
<div> <div>
@ -595,7 +600,7 @@ setDisplayStatView(false); // to hide the statistics </pre>
</p> </p>
</div> </div>
<!-- EDIT48 SECTION "How do I get rid of the FPS/Objects statistics?" [21956-22220] --> <!-- EDIT48 SECTION "How do I get rid of the FPS/Objects statistics?" [22050-22314] -->
<h3><a>How do I display score, health, mini-maps, status icons?</a></h3> <h3><a>How do I display score, health, mini-maps, status icons?</a></h3>
<div> <div>
@ -608,7 +613,7 @@ Attach text and pictures to the orthogonal <code>guiNode</code> to create a head
</p> </p>
</div> </div>
<!-- EDIT49 SECTION "How do I display score, health, mini-maps, status icons?" [22221-22813] --> <!-- EDIT49 SECTION "How do I display score, health, mini-maps, status icons?" [22315-22907] -->
<h3><a>How do I display buttons and UI controls?</a></h3> <h3><a>How do I display buttons and UI controls?</a></h3>
<div> <div>
@ -621,7 +626,7 @@ Sample Code: <object classid="java:org.netbeans.modules.javahelp.BrowserDisplaye
</p> </p>
</div> </div>
<!-- EDIT50 SECTION "How do I display buttons and UI controls?" [22814-23258] --> <!-- EDIT50 SECTION "How do I display buttons and UI controls?" [22908-23352] -->
<h3><a>How do i display a loading screen?</a></h3> <h3><a>How do i display a loading screen?</a></h3>
<div> <div>
@ -632,12 +637,12 @@ Instead of having a frozen frame while your games loads, you can have a loading
</p> </p>
</div> </div>
<!-- EDIT51 SECTION "How do i display a loading screen?" [23259-23475] --> <!-- EDIT51 SECTION "How do i display a loading screen?" [23353-23569] -->
<h2><a>Nifty GUI</a></h2> <h2><a>Nifty GUI</a></h2>
<div> <div>
</div> </div>
<!-- EDIT52 SECTION "Nifty GUI" [23476-23497] --> <!-- EDIT52 SECTION "Nifty GUI" [23570-23591] -->
<h3><a>I get NoSuchElementException when adding controls (buttons etc)!</a></h3> <h3><a>I get NoSuchElementException when adding controls (buttons etc)!</a></h3>
<div> <div>
@ -648,7 +653,7 @@ Verify that you include a controls definition file link in your <acronym title="
<pre><span>&lt;useControls filename=&quot;nifty-default-controls.xml&quot;/&gt;</span></pre> <pre><span>&lt;useControls filename=&quot;nifty-default-controls.xml&quot;/&gt;</span></pre>
</div> </div>
<!-- EDIT53 SECTION "I get NoSuchElementException when adding controls (buttons etc)!" [23498-23733] --> <!-- EDIT53 SECTION "I get NoSuchElementException when adding controls (buttons etc)!" [23592-23827] -->
<h3><a>Where can I find example code of Nifty GUI&#039;s XML and Java classes?</a></h3> <h3><a>Where can I find example code of Nifty GUI&#039;s XML and Java classes?</a></h3>
<div> <div>
@ -657,7 +662,7 @@ Verify that you include a controls definition file link in your <acronym title="
</p> </p>
</div> </div>
<!-- EDIT54 SECTION "Where can I find example code of Nifty GUI's XML and Java classes?" [23734-23896] --> <!-- EDIT54 SECTION "Where can I find example code of Nifty GUI's XML and Java classes?" [23828-23990] -->
<h3><a>Is there Java Doc for Nifty GUI?</a></h3> <h3><a>Is there Java Doc for Nifty GUI?</a></h3>
<div> <div>
@ -666,12 +671,12 @@ Verify that you include a controls definition file link in your <acronym title="
</p> </p>
</div> </div>
<!-- EDIT55 SECTION "Is there Java Doc for Nifty GUI?" [23897-24022] --> <!-- EDIT55 SECTION "Is there Java Doc for Nifty GUI?" [23991-24116] -->
<h2><a>I want to create an environment with sounds, effects, and landscapes</a></h2> <h2><a>I want to create an environment with sounds, effects, and landscapes</a></h2>
<div> <div>
</div> </div>
<!-- EDIT56 SECTION "I want to create an environment with sounds, effects, and landscapes" [24023-24103] --> <!-- EDIT56 SECTION "I want to create an environment with sounds, effects, and landscapes" [24117-24197] -->
<h3><a>How do I play sounds and noises?</a></h3> <h3><a>How do I play sounds and noises?</a></h3>
<div> <div>
@ -684,7 +689,7 @@ Use AudioRenderer, Listener, and AudioNode from com.jme3.audio.*.
</p> </p>
</div> </div>
<!-- EDIT57 SECTION "How do I play sounds and noises?" [24104-24407] --> <!-- EDIT57 SECTION "How do I play sounds and noises?" [24198-24501] -->
<h3><a>How do I make fire, smoke, explosions, swarms, magic spells?</a></h3> <h3><a>How do I make fire, smoke, explosions, swarms, magic spells?</a></h3>
<div> <div>
@ -697,7 +702,7 @@ For swarm like effects you use particle emitters.
</p> </p>
</div> </div>
<!-- EDIT58 SECTION "How do I make fire, smoke, explosions, swarms, magic spells?" [24408-25063] --> <!-- EDIT58 SECTION "How do I make fire, smoke, explosions, swarms, magic spells?" [24502-25157] -->
<h3><a>How do I make water, waves, reflections?</a></h3> <h3><a>How do I make water, waves, reflections?</a></h3>
<div> <div>
@ -710,7 +715,7 @@ Use a special post-processor renderer from com.jme3.water.*.
</p> </p>
</div> </div>
<!-- EDIT59 SECTION "How do I make water, waves, reflections?" [25064-25824] --> <!-- EDIT59 SECTION "How do I make water, waves, reflections?" [25158-25918] -->
<h3><a>How do I make fog, bloom, blur, light scrattering?</a></h3> <h3><a>How do I make fog, bloom, blur, light scrattering?</a></h3>
<div> <div>
@ -721,7 +726,7 @@ Use special post-processor renderers from com.jme3.post.*.
</p> </p>
</div> </div>
<!-- EDIT60 SECTION "How do I make fog, bloom, blur, light scrattering?" [25825-26000] --> <!-- EDIT60 SECTION "How do I make fog, bloom, blur, light scrattering?" [25919-26094] -->
<h3><a>How do I generate a terrain?</a></h3> <h3><a>How do I generate a terrain?</a></h3>
<div> <div>
@ -734,7 +739,7 @@ Use com.jme3.terrain.*. The JMonkeyEngine also provides you with a Terrain Edito
</p> </p>
</div> </div>
<!-- EDIT61 SECTION "How do I generate a terrain?" [26001-26384] --> <!-- EDIT61 SECTION "How do I generate a terrain?" [26095-26478] -->
<h3><a>How do I make a sky?</a></h3> <h3><a>How do I make a sky?</a></h3>
<div> <div>
@ -752,69 +757,41 @@ skyGeo.setQueueBucket&#40;Bucket.Sky&#41; </pre>
</p> </p>
</div> </div>
<!-- EDIT62 SECTION "How do I make a sky?" [26385-26764] --> <!-- EDIT62 SECTION "How do I make a sky?" [26479-26858] -->
<h2><a>I want to access to back-end properties</a></h2> <h2><a>I want to access to back-end properties</a></h2>
<div> <div>
</div> </div>
<!-- EDIT63 SECTION "I want to access to back-end properties" [26765-26816] --> <!-- EDIT63 SECTION "I want to access to back-end properties" [26859-26910] -->
<h3><a>How do I read out graphic card capabilities?</a></h3> <h3><a>How do I read out graphic card capabilities?</a></h3>
<div> <div>
<p> <p>
If your game is heavily using features that older cards do not support, you can add a check of the JME3 Renderer Caps. If your game is heavily using features that older cards do not support, you can <a href="/com/jme3/gde/core/docs/jme3/advanced/read_graphic_card_capabilites.html">Read Graphic Card Capabilites</a> in the beginning before starting the app, and then decide how to proceed.
</p> </p>
<pre>Collection&lt;com.jme3.renderer.Caps&gt; caps = renderer.getCaps&#40;&#41;; <pre>Collection&lt;com.jme3.renderer.Caps&gt; caps = renderer.getCaps&#40;&#41;;
Logger.getLogger&#40;HelloJME3.class.getName&#40;&#41;&#41;.log&#40;Level.INFO, &quot;Capabilities: {0}&quot; + caps.toString&#40;&#41;&#41;;</pre> Logger.getLogger&#40;HelloJME3.class.getName&#40;&#41;&#41;.log&#40;Level.INFO, &quot;Capabilities: {0}&quot;, caps.toString&#40;&#41;&#41;;</pre>
<p>
The following shortened example shows the capabilities of an older graphic card. In this case you decide whether to branch to a low-quality rendering of the unsupported features (if you still want to support this card), or print an error message explaining the user what capabilities the card is missing to play the game. </div>
</p> <!-- EDIT64 SECTION "How do I read out graphic card capabilities?" [26911-27346] -->
<h3><a>How do I Run jMonkeyEngine 3 with OpenGL1?</a></h3>
<div>
<p> <p>
Here is an example of the capabilities of an older graphic card: In you game, add
</p> </p>
<pre>INFO: Running on jMonkey Engine 3 <pre>settings.setRenderer&#40;AppSettings.LWJGL_OPENGL1&#41;</pre>
INFO: Using LWJGL 2.7.1
INFO: Selected display mode: 1024 x 768 x 0 @0Hz
INFO: Adapter: null
INFO: Driver Version: null
INFO: Vendor: ATI Technologies Inc.
INFO: OpenGL Version: 2.0 ATI-1.6.36
INFO: Renderer: ATI Radeon X1600 OpenGL Engine
INFO: GLSL Ver: 1.20
INFO: Timer resolution: 1.000 ticks per second
INFO: Capabilities: [FrameBuffer, FrameBufferMRT, FrameBufferMultisample,
OpenGL20, ARBprogram, GLSL100, GLSL110, GLSL120,
VertexTextureFetch, FloatTexture,
TextureCompressionLATC, NonPowerOfTwoTextures]</pre>
<p> <p>
to the <a href="/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html">AppSettings</a> (see details there). <br/>
A newer graphic card has better capabilities, for example: For the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> itself, choose Options &gt; OpenGL, and check OpenGL1.
</p> </p>
<pre>INFO: Running on jMonkeyEngine 3.0.0
INFO: Using LWJGL 2.8.2
INFO: Selected display mode: 1280 x 720 x 0 @0Hz
INFO: Adapter: null
INFO: Driver Version: null
INFO: Vendor: ATI Technologies Inc.
INFO: OpenGL Version: 2.1 ATI-7.14.5
INFO: Renderer: AMD Radeon HD 6770M OpenGL Engine
INFO: GLSL Ver: 1.20
INFO: Timer resolution: 1.000 ticks per second
INFO: Capabilities: [FrameBuffer, FrameBufferMRT, FrameBufferMultisample,
OpenGL20, OpenGL21, ARBprogram, GLSL100, GLSL110, GLSL120,
VertexTextureFetch, TextureArray, FloatTexture,
FloatColorBuffer, FloatDepthBuffer, PackedFloatTexture, SharedExponentTexture, PackedFloatColorBuffer,
TextureCompressionLATC, NonPowerOfTwoTextures, MeshInstancing]</pre>
</div> </div>
<!-- EDIT64 SECTION "How do I read out graphic card capabilities?" [26817-28897] --> <!-- EDIT65 SECTION "How do I Run jMonkeyEngine 3 with OpenGL1?" [27347-27626] -->
<h3><a>How do I optimize the heck out of the Scene Graph?</a></h3> <h3><a>How do I optimize the heck out of the Scene Graph?</a></h3>
<div> <div>
@ -831,7 +808,7 @@ Batching means that all Geometries with the same Material are combined into one
</p> </p>
</div> </div>
<!-- EDIT65 SECTION "How do I optimize the heck out of the Scene Graph?" [28898-29367] --> <!-- EDIT66 SECTION "How do I optimize the heck out of the Scene Graph?" [27627-28096] -->
<h3><a>How do I prevent users from unzipping my JAR?</a></h3> <h3><a>How do I prevent users from unzipping my JAR?</a></h3>
<div> <div>
@ -841,12 +818,12 @@ Add an <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><pa
</p> </p>
</div> </div>
<!-- EDIT66 SECTION "How do I prevent users from unzipping my JAR?" [29368-29617] --> <!-- EDIT67 SECTION "How do I prevent users from unzipping my JAR?" [28097-28346] -->
<h2><a>I want to do maths</a></h2> <h2><a>I want to do maths</a></h2>
<div> <div>
</div> </div>
<!-- EDIT67 SECTION "I want to do maths" [29618-29648] --> <!-- EDIT68 SECTION "I want to do maths" [28347-28377] -->
<h3><a>What does addLocal() / multLocal() etc mean?</a></h3> <h3><a>What does addLocal() / multLocal() etc mean?</a></h3>
<div> <div>
@ -864,7 +841,7 @@ Many maths functions (mult(), add(), subtract(), etc) come as local and a non-lo
</li> </li>
</ul> </ul>
</li> </li>
<li><div> Example 2: <code>v.mult(b).add(b);</code> <img src="/wiki/lib/images/smileys/icon_exclaim.gif" class="middle" alt=":!:" /></div> <li><div> Example 2: <code>v.mult(b).add(b);</code> <img src="/wiki/lib/images/smileys/icon_exclaim.gif" class="middle" alt=":!:"/></div>
<ul> <ul>
<li><div> <strong>Watch out:</strong> This calculates the expected result, but unless you actually use the return value, it is discarded!</div> <li><div> <strong>Watch out:</strong> This calculates the expected result, but unless you actually use the return value, it is discarded!</div>
</li> </li>
@ -899,7 +876,7 @@ Many maths functions (mult(), add(), subtract(), etc) come as local and a non-lo
</ol> </ol>
</div> </div>
<!-- EDIT68 SECTION "What does addLocal() / multLocal() etc mean?" [29649-31010] --> <!-- EDIT69 SECTION "What does addLocal() / multLocal() etc mean?" [28378-29739] -->
<h3><a>What is the difference between World and Local coordinates?</a></h3> <h3><a>What is the difference between World and Local coordinates?</a></h3>
<div> <div>
@ -909,7 +886,7 @@ World coordinates of a Spatial are its absolute coordinates in the 3D scene (thi
</p> </p>
</div> </div>
<!-- EDIT69 SECTION "What is the difference between World and Local coordinates?" [31011-31320] --> <!-- EDIT70 SECTION "What is the difference between World and Local coordinates?" [29740-30049] -->
<h3><a>How do I convert Degrees to Radians?</a></h3> <h3><a>How do I convert Degrees to Radians?</a></h3>
<div> <div>
@ -923,5 +900,5 @@ Multiply degree value by FastMath.DEG_TO_RAD to convert it to radians.
</span></div> </span></div>
</div> </div>
<!-- EDIT70 SECTION "How do I convert Degrees to Radians?" [31321-] --> <!-- EDIT71 SECTION "How do I convert Degrees to Radians?" [30050-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:faq?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:faq?do=export_xhtmlbody">view online version</a></em></p>

@ -4,7 +4,12 @@
<p> <p>
Every class that extends jme3.app.SimpleApplication has properties that can be configured by customizing a <code>com.jme3.system.AppSettings</code> object. Configure the settings before you call <code>app.start()</code> on the application object. If you change display settings during runtime, call <code>app.restart()</code> to make them take effect. Every class that extends jme3.app.SimpleApplication has properties that can be configured by customizing a <code>com.jme3.system.AppSettings</code> object.
</p>
<p>
<p><div>Configure application settings in <code>main()</code>, before you call <code>app.start()</code> on the application object. If you change display settings during runtime, for eyample in <code>simpleInitApp()</code>, you must call <code>app.restart()</code> to make them take effect.
</div></p>
</p> </p>
<p> <p>
@ -12,13 +17,13 @@ Every class that extends jme3.app.SimpleApplication has properties that can be c
</p> </p>
</div> </div>
<!-- EDIT1 SECTION "jME3 Application Display Settings" [1-465] --> <!-- EDIT1 SECTION "jME3 Application Display Settings" [1-558] -->
<h2><a>Code Samples</a></h2> <h2><a>Code Samples</a></h2>
<div> <div>
<p> <p>
This is how you specify settinsg for MyGame (or Main or whatever you called your SimpleApplication instance) before the game starts: Specify settings for a game (here called <code>MyGame</code>, or whatever you called your SimpleApplication instance) in the <code>main()</code> method before the game starts:
</p> </p>
<pre>public static void main&#40;String&#91;&#93; args&#41; &#123; <pre>public static void main&#40;String&#91;&#93; args&#41; &#123;
AppSettings settings = new AppSettings&#40;true&#41;; AppSettings settings = new AppSettings&#40;true&#41;;
@ -49,7 +54,7 @@ This example toggles the settings to fullscreen while the game is already runnin
&#125;</pre> &#125;</pre>
</div> </div>
<!-- EDIT2 SECTION "Code Samples" [466-1941] --> <!-- EDIT2 SECTION "Code Samples" [559-2059] -->
<h2><a>Properties</a></h2> <h2><a>Properties</a></h2>
<div> <div>
<div><table> <div><table>
@ -89,7 +94,7 @@ Set VSync to false to deactivate vertical syncing (faster, but possible page tea
60 fps</td> 60 fps</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT4 TABLE [1966-4187] --><div><table> <!-- EDIT4 TABLE [2084-4305] --><div><table>
<tr> <tr>
<th>Settings Property (Input)</th><th>Description</th><th>Default</th> <th>Settings Property (Input)</th><th>Description</th><th>Default</th>
</tr> </tr>
@ -106,7 +111,7 @@ Set VSync to false to deactivate vertical syncing (faster, but possible page tea
<td>setEmulateMouseFlipAxis(true,true)</td><td>Flips the X or Y (or both) axes for the emulated mouse. Set the first parameter to true to flip the x axis, and the second to flip the y axis.</td><td>false,false</td> <td>setEmulateMouseFlipAxis(true,true)</td><td>Flips the X or Y (or both) axes for the emulated mouse. Set the first parameter to true to flip the x axis, and the second to flip the y axis.</td><td>false,false</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT5 TABLE [4189-4903] --><div><table> <!-- EDIT5 TABLE [4307-5021] --><div><table>
<tr> <tr>
<th>Settings Property (Audio)</th><th>Description</th><th>Default</th> <th>Settings Property (Audio)</th><th>Description</th><th>Default</th>
</tr> </tr>
@ -117,7 +122,7 @@ Set VSync to false to deactivate vertical syncing (faster, but possible page tea
<td>setStereo3D(true)</td><td>Enable 3D stereo. This feature requires hardware support from the GPU driver. See <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Quad_buffering"><param name="text" value="<html><u>Quad Buffering</u></html>"><param name="textColor" value="blue"></object>. Currently, your everday user&#039;s hardware does not support this, so you can ignore it for now.</td><td>false</td> <td>setStereo3D(true)</td><td>Enable 3D stereo. This feature requires hardware support from the GPU driver. See <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikipedia.org/wiki/Quad_buffering"><param name="text" value="<html><u>Quad Buffering</u></html>"><param name="textColor" value="blue"></object>. Currently, your everday user&#039;s hardware does not support this, so you can ignore it for now.</td><td>false</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT6 TABLE [4905-5329] --><div><table> <!-- EDIT6 TABLE [5023-5447] --><div><table>
<tr> <tr>
<th>Settings Property (Branding)</th><th>Description</th><th>Default</th> <th>Settings Property (Branding)</th><th>Description</th><th>Default</th>
</tr> </tr>
@ -132,7 +137,7 @@ ImageIO.read(new File(&quot;&quot;)), …});</td><td>This specifies the little a
<td>setSettingsDialogImage(&quot;Interface/mysplashscreen.png&quot;)</td><td>A custom splashscreen image in the <code>assets/Interface</code> directory which is displayed when the settings dialog is shown.</td><td>&quot;/com/jme3/app/Monkey.png&quot;</td> <td>setSettingsDialogImage(&quot;Interface/mysplashscreen.png&quot;)</td><td>A custom splashscreen image in the <code>assets/Interface</code> directory which is displayed when the settings dialog is shown.</td><td>&quot;/com/jme3/app/Monkey.png&quot;</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT7 TABLE [5331-6038] --> <!-- EDIT7 TABLE [5449-6156] -->
<p> <p>
<p><div>You can use <code>app.setShowSettings(true);</code> and <code>setSettingsDialogImage(&quot;Interface/mysplashscreen.png&quot;)</code> to present the user with jme3&#039;s default display settings dialog when starting the game. Use <code>app.setShowSettings(false);</code> to hide the default settings screen. Set this boolean before calling <code>app.start()</code> on the SimpleApplication. <p><div>You can use <code>app.setShowSettings(true);</code> and <code>setSettingsDialogImage(&quot;Interface/mysplashscreen.png&quot;)</code> to present the user with jme3&#039;s default display settings dialog when starting the game. Use <code>app.setShowSettings(false);</code> to hide the default settings screen. Set this boolean before calling <code>app.start()</code> on the SimpleApplication.
@ -140,7 +145,7 @@ ImageIO.read(new File(&quot;&quot;)), …});</td><td>This specifies the little a
</p> </p>
</div> </div>
<!-- EDIT3 SECTION "Properties" [1942-6398] --> <!-- EDIT3 SECTION "Properties" [2060-6516] -->
<h2><a>Toggling and Activating Settings</a></h2> <h2><a>Toggling and Activating Settings</a></h2>
<div> <div>
<div><table> <div><table>
@ -160,9 +165,9 @@ ImageIO.read(new File(&quot;&quot;)), …});</td><td>This specifies the little a
<td>app.restart()</td><td>Restart()ing a running game restarts the game context and applies the updated settings object. (This does not restart or reinitialize the whole game.)</td> <td>app.restart()</td><td>Restart()ing a running game restarts the game context and applies the updated settings object. (This does not restart or reinitialize the whole game.)</td>
</tr> </tr>
</table></div> </table></div>
<!-- EDIT9 TABLE [6445-7326] --> <!-- EDIT9 TABLE [6563-7444] -->
</div> </div>
<!-- EDIT8 SECTION "Toggling and Activating Settings" [6399-7327] --> <!-- EDIT8 SECTION "Toggling and Activating Settings" [6517-7445] -->
<h2><a>Saving and Loading Settings</a></h2> <h2><a>Saving and Loading Settings</a></h2>
<div> <div>
@ -202,5 +207,5 @@ Provide the unique name of your jME3 application as the String argument. For exa
</ul> </ul>
</div> </div>
<!-- EDIT10 SECTION "Saving and Loading Settings" [7328-] --> <!-- EDIT10 SECTION "Saving and Loading Settings" [7446-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:intermediate:appsettings?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:intermediate:appsettings?do=export_xhtmlbody">view online version</a></em></p>

@ -0,0 +1,86 @@
<h2><a>iOS Deployment</a></h2>
<div>
<p>
To use iOS deployment you need a computer running MacOSX and a version of Xcode 4.0+ installed. To deploy to a device or the Apple App Store, you need an Apple developer account.
</p>
<p>
iOS deployment works via cross-compilation to native iOS ARM code, there is no virtual machine running on the device. The Avian JVM supports this feature while maintaining general compatibility to OpenJDK and JNI for native access. The minimum compatible iOS deployment target is 4.3.
</p>
<p>
<p><div>Note that at the moment this option is in pre-alpha state and the system runs on a null renderer. This means there is no visual output. You can however use the current system to explore the options and test cross-compiling your applications.
</div></p>
</p>
</div>
<!-- EDIT1 SECTION "iOS Deployment" [1-755] -->
<h3><a>Enabling iOS deployment</a></h3>
<div>
<p>
To enable iOS deployment, go to the project settings and under &quot;Application→iOS&quot; select the &quot;Enable iOS deployment&quot; checkbox, adapt the application ID and then press OK.
</p>
<p>
Note: When you do this for the first time or any time that the Avian library and OpenJDK is updated, they will be extracted to your <acronym title="Software Development Kit">SDK</acronym> settings folder, wait until it has been extracted before building an iOS-enabled project.
</p>
<p>
After enabling deployment, a new <code>ios</code> directory is created in the project root that contains a <code>project</code> and a <code>src</code> folder. The <code>ios/project</code> folder contains an Xcode project that you will use to build and run the final iOS application for both iPhone and iOS. The <code>ios/src</code> folder contains java and native source files for bridging iOS and native code, you can add .java and .m files with your own iOS code here.
</p>
</div>
<!-- EDIT2 SECTION "Enabling iOS deployment" [756-1614] -->
<h3><a>Building the iOS binaries</a></h3>
<div>
<p>
The iOS binaries are automatically built when you have iOS deployment enabled and build your project.
</p>
<p>
When the iOS binaries are built, all needed classes, including a complete copy of the OpenJDK7 classes are run through a proguard process that strips out the unnecessary classes for the project and optimizes the code for the platform. This happens without changing the naming structure so that reflection etc. still works. If necessary, adapt the proguard options in the ios properties file.
</p>
<p>
After the iOS classpath has been created the avian compiler is used to create a native .o file from the classpath for both arm (device) and i386 (simulator). Furthermore the other needed avian .o files are extracted and a library list is compiled which is referenced in the Xcode project.
</p>
</div>
<!-- EDIT3 SECTION "Building the iOS binaries" [1615-2436] -->
<h3><a>Running and deploying the application</a></h3>
<div>
<p>
To run the application, open the Xcode project in Xcode and press the run button. You can make changes to the UI and native invocation classes in the Xcode project as well. From here you can also deploy the application to your devices or the App Store.
</p>
</div>
<!-- EDIT4 SECTION "Running and deploying the application" [2437-2738] -->
<h3><a>Creating native and java code for iOS</a></h3>
<div>
<p>
To bridge between native and java code, JNI is used like in a normal java application. The <code>ios/src</code> folder is for Java and C/Obj-C source files that are specific to your iOS application. In these java files you have access to the full project classpath as well as the iOS-specific jME3 classes.
</p>
<p>
The JmeAppHarness.java class is initialized and called from native code through the default project and you can extend it to perform other native operations. It has a simple native popup method. The JmeAppHarness.m file contains the native method needed for that popup.
</p>
<p>
Effectively native code can reside in both the Xcode project and in the <code>ios/src</code> folder. To keep the dependencies clean and make code reusable you should try to put generic native code that does not depend on the Xcode project in the <code>ios/src</code> folder.
</p>
<p>
Java code for iOS should be in the <code>ios/src</code> folder as well for clean separation, its also the only place where they will be compiled with a reference to the iOS specific jME classes. For information on how to connect your application code and device specific code, see the <a href="/com/jme3/gde/core/docs/jme3/android#using_android_specific_functions.html">notes in the android deployment documentation</a>.
</p>
</div>
<!-- EDIT5 SECTION "Creating native and java code for iOS" [2739-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:ios?do=export_xhtmlbody">view online version</a></em></p>

@ -492,14 +492,14 @@ Non-player (computer-controlled) characters (NPCs) are only fun in a game if the
The domain of artificial intelligence deals, among other things, with: The domain of artificial intelligence deals, among other things, with:
</p> </p>
<ul> <ul>
<li><div> <strong>Knowledge</strong> – Knowledge is about the data to which the agent has access to base its decisions on. Realistic agents only &quot;know&quot; what they &quot;see and hear&quot;, this implies that information can be hidden from them (to keep the game fair). You can let some agents share information and others need to find out by themselves. <br/> <li><div> <strong>Knowledge</strong> – Knowledge is <em>the data</em> to which the AI agent has access, and on which the AI bases its decisions. Realistic agents only &quot;know&quot; what they &quot;see and hear&quot;. This implies that information can be hidden from the AI to keep the game fair. You can have an all-knowing AI, or you can let only some AI agents share information, or you let only AI agents who are close know the current state. <br/>
Example: After tripping the wire, all guards with two-way radios start moving towards the player&#039;s position within 60 sec, while minor guards don&#039;t suspect anything yet.</div> Example: After the player trips the wire, only a few AI guards with two-way radios start moving towards the player&#039;s position, while many other guards don&#039;t suspect anything yet.</div>
</li> </li>
<li><div> <strong>Goal Planning</strong> – Planning is about how the agent <em>takes action</em>. Each game agent has the priority to achieve a specific goal, to reach a future state. You split the agent&#039;s goal into subgoals, then the agent chooses from available tactics and strategies, and prioritizes them. The agent keeps testing whether the current state is closer to the (sub)goal. If unsuccessful, the agent changes the tactics/strategy and tries again. <br/> <li><div> <strong>Goal Planning</strong> – Planning is about how an AI agent <em>takes action</em>. Each agent has the priority to achieve a specific goal, to reach a future state. When programming, you split the agent&#039;s goal into several subgoals. The agent consults its knowledge about the current state, chooses from available tactics and strategies, and prioritizes them. The agent repeatedly tests whether the current state is closer to its goal. If unsuccessful, the agent must discard the current tactics/strategy and try another one. <br/>
Example: An agent searches the best path to reach the player base in a changing environment; an agent chases the player with the goal of eliminating him; an agent hides from the player with the goal of murdering a VIP. </div> Example: An agent searches the best path to reach the player base in a changing environment, avoiding traps. An agent chases the player with the goal of eliminating him. An agent hides from the player with the goal of murdering a VIP. </div>
</li> </li>
<li><div> <strong>Problem Solving</strong> – Problem solving is about how the agent <em>reacts to interruptions</em>, obstacles that stand between it and its goal. The agent uses a given set of facts and rules to deduct what state it is in – triggered by perceptions similar to pain, agony, boredom, or being trapped. In every state, only a specific subset of reactions makes sense. The actual reaction also depends on the agent&#039;s, goal since the agent&#039;s reaction must not block its own goal. <br/> <li><div> <strong>Problem Solving</strong> – Problem solving is about how the agent <em>reacts to interruptions</em>, obstacles that stand between it and its goal. The agent uses a given set of facts and rules to deduct what state it is in – triggered by perceptions similar to pain, agony, boredom, or being trapped. In each state, only a specific subset of reactions makes sense. The actual reaction also depends on the agent&#039;s, goal since the agent&#039;s reaction must not block its own goal! <br/>
Examples: If player approaches, then attack or retreat or raise alarm? If I am idle, do I lay traps or heal self or recharge runes? If danger to own life, then escape or kamikaze?</div> Examples: If player approaches, does the agent attack or conceal himself or raise alarm? While agent is idle, does he lay traps or heal self or recharge magic runes? If danger to own life, does the agent try to escape or kamikaze?</div>
</li> </li>
</ul> </ul>
@ -527,7 +527,7 @@ There are lots of resources explaining interesting AI algorithms:
</ul> </ul>
</div> </div>
<!-- EDIT29 SECTION "Artificial Intelligence (AI)" [15998-19245] --> <!-- EDIT29 SECTION "Artificial Intelligence (AI)" [15998-19483] -->
<h1><a>Math</a></h1> <h1><a>Math</a></h1>
<div> <div>
@ -536,7 +536,7 @@ There are lots of resources explaining interesting AI algorithms:
</p> </p>
</div> </div>
<!-- EDIT30 SECTION "Math" [19246-19319] --> <!-- EDIT30 SECTION "Math" [19484-19557] -->
<h2><a>Coordinates</a></h2> <h2><a>Coordinates</a></h2>
<div> <div>
@ -547,7 +547,7 @@ In contrast to a vector (which looks similar), a coordinate is a location, not a
</p> </p>
</div> </div>
<!-- EDIT31 SECTION "Coordinates" [19320-19709] --> <!-- EDIT31 SECTION "Coordinates" [19558-19947] -->
<h3><a>The Origin</a></h3> <h3><a>The Origin</a></h3>
<div> <div>
@ -561,7 +561,7 @@ The origin is the central point in the 3D world, where the three axes meet. It&#
</p> </p>
</div> </div>
<!-- EDIT32 SECTION "The Origin" [19710-19914] --> <!-- EDIT32 SECTION "The Origin" [19948-20152] -->
<h2><a>Vectors</a></h2> <h2><a>Vectors</a></h2>
<div> <div>
@ -577,7 +577,7 @@ A vector has a length and a direction, like an arrow in 3D space. A vector start
Vector3f v = new Vector3f&#40; 8f , 0f , 33f &#41;.add&#40;new Vector3f&#40; 0f , -2f , -2f &#41;&#41;; // starts at (8/0/33)</pre> Vector3f v = new Vector3f&#40; 8f , 0f , 33f &#41;.add&#40;new Vector3f&#40; 0f , -2f , -2f &#41;&#41;; // starts at (8/0/33)</pre>
</div> </div>
<!-- EDIT33 SECTION "Vectors" [19915-20364] --> <!-- EDIT33 SECTION "Vectors" [20153-20602] -->
<h3><a>Unit Vectors</a></h3> <h3><a>Unit Vectors</a></h3>
<div> <div>
@ -601,7 +601,7 @@ Negate the vegator to change its direction, e.g. (-1, 0, 0) = left.
</p> </p>
</div> </div>
<!-- EDIT34 SECTION "Unit Vectors" [20365-20863] --> <!-- EDIT34 SECTION "Unit Vectors" [20603-21101] -->
<h3><a>Normalized Vectors</a></h3> <h3><a>Normalized Vectors</a></h3>
<div> <div>
@ -616,7 +616,7 @@ When you normalize a vector, it still has the same direction, but you lose the i
</p> </p>
</div> </div>
<!-- EDIT35 SECTION "Normalized Vectors" [20864-21207] --> <!-- EDIT35 SECTION "Normalized Vectors" [21102-21445] -->
<h3><a>Surface Normal Vectors</a></h3> <h3><a>Surface Normal Vectors</a></h3>
<div> <div>
@ -628,7 +628,7 @@ You calculate the Surface Normal by calculating the cross product.
</p> </p>
</div> </div>
<!-- EDIT36 SECTION "Surface Normal Vectors" [21208-21420] --> <!-- EDIT36 SECTION "Surface Normal Vectors" [21446-21658] -->
<h3><a>Cross Product</a></h3> <h3><a>Cross Product</a></h3>
<div> <div>
@ -645,7 +645,7 @@ In 3D space, speaking of an orthogonal only makes sense with respect to a plane.
</p> </p>
</div> </div>
<!-- EDIT37 SECTION "Cross Product" [21421-22131] --> <!-- EDIT37 SECTION "Cross Product" [21659-22369] -->
<h3><a>Transformation</a></h3> <h3><a>Transformation</a></h3>
<div> <div>
@ -659,7 +659,7 @@ Examples: Falling and rotating bricks in 3D Tetris.
</p> </p>
</div> </div>
<!-- EDIT38 SECTION "Transformation" [22132-22396] --> <!-- EDIT38 SECTION "Transformation" [22370-22634] -->
<h3><a>Slerp</a></h3> <h3><a>Slerp</a></h3>
<div> <div>
@ -677,7 +677,7 @@ Example: A burning meteorite Geometry slerps from &quot;position p1, rotation r1
</p> </p>
</div> </div>
<!-- EDIT39 SECTION "Slerp" [22397-23166] --> <!-- EDIT39 SECTION "Slerp" [22635-23404] -->
<h1><a>Game Developer Jargon</a></h1> <h1><a>Game Developer Jargon</a></h1>
<div> <div>
<ul> <ul>
@ -686,7 +686,7 @@ Example: A burning meteorite Geometry slerps from &quot;position p1, rotation r1
</ul> </ul>
</div> </div>
<!-- EDIT40 SECTION "Game Developer Jargon" [23167-23330] --> <!-- EDIT40 SECTION "Game Developer Jargon" [23405-23568] -->
<h1><a>3D graphics Terminology Wiki book</a></h1> <h1><a>3D graphics Terminology Wiki book</a></h1>
<div> <div>
<ul> <ul>
@ -695,5 +695,5 @@ Example: A burning meteorite Geometry slerps from &quot;position p1, rotation r1
</ul> </ul>
</div> </div>
<!-- EDIT41 SECTION "3D graphics Terminology Wiki book" [23331-] --> <!-- EDIT41 SECTION "3D graphics Terminology Wiki book" [23569-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:terminology?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:terminology?do=export_xhtmlbody">view online version</a></em></p>

@ -120,20 +120,32 @@ A Spatial can be transformed, loaded and saved. There are two types of Spatials,
<p> <p>
Before you start creating your game, you should have completed the <a href="/com/jme3/gde/core/docs/jme3/beginner.html">Hello World tutorial series</a>. It shows how to load and create Spatials, how to lay out a scene by attaching and transforming Spatials, and how to add interaction and effects to a game. Before you start creating your game, you should plan your scene graph: Which Nodes and Geometries will you need? Complete the <a href="/com/jme3/gde/core/docs/jme3/beginner.html">Hello World tutorial series</a> to learn how to load and create Spatials, how to lay out a scene by attaching, detaching, and transforming Spatials, and how to add interaction and effects to a game.
</p> </p>
<p> <p>
The <a href="/com/jme3/gde/core/docs/jme3.html">intermediate and advanced documentation</a> gives you more details on how to put all the parts together to create an awesome 3D game in Java! The <a href="/com/jme3/gde/core/docs/jme3.html">intermediate and advanced documentation</a> gives you more details on how to put all the parts together to create an awesome 3D game in Java!
</p> </p>
</div>
<!-- EDIT6 SECTION "How to Use This Knowledge?" [2680-3212] -->
<h2><a>See also</a></h2>
<div>
<ul>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/spatial.html">Spatial</a> – More details about working with Nodes and Geometries</div>
</li>
<li><div> <a href="/com/jme3/gde/core/docs/jme3/advanced/traverse_scenegraph.html">Traverse SceneGraph</a> – Find any Node or Geometry in the scenegraph.</div>
</li>
</ul>
<div><span> <div><span>
<a href="/wiki/doku.php/tag:spatial?do=showtag&amp;tag=tag%3Aspatial">spatial</a>, <a href="/wiki/doku.php/tag:spatial?do=showtag&amp;tag=tag%3Aspatial">spatial</a>,
<a href="/wiki/doku.php/tag:node?do=showtag&amp;tag=tag%3Anode">node</a>, <a href="/wiki/doku.php/tag:node?do=showtag&amp;tag=tag%3Anode">node</a>,
<a href="/wiki/doku.php/tag:mesh?do=showtag&amp;tag=tag%3Amesh">mesh</a>, <a href="/wiki/doku.php/tag:mesh?do=showtag&amp;tag=tag%3Amesh">mesh</a>,
<a href="/wiki/doku.php/tag:geometry?do=showtag&amp;tag=tag%3Ageometry">geometry</a>, <a href="/wiki/doku.php/tag:geometry?do=showtag&amp;tag=tag%3Ageometry">geometry</a>,
<a href="/wiki/doku.php/tag:scenegraph?do=showtag&amp;tag=tag%3Ascenegraph">scenegraph</a> <a href="/wiki/doku.php/tag:scenegraph?do=showtag&amp;tag=tag%3Ascenegraph">scenegraph</a>,
<a href="/wiki/doku.php/tag:rootnode?do=showtag&amp;tag=tag%3Arootnode">rootnode</a>
</span></div> </span></div>
</div> </div>
<!-- EDIT6 SECTION "How to Use This Knowledge?" [2680-] --> <!-- EDIT7 SECTION "See also" [3213-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:the_scene_graph?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/jme3:the_scene_graph?do=export_xhtmlbody">view online version</a></em></p>

@ -48,7 +48,7 @@ Make your game unique and recognizable:
</li> </li>
<li><div> Vendor: Enter your name (the development team)</div> <li><div> Vendor: Enter your name (the development team)</div>
</li> </li>
<li><div> Description: Write one line why your game is the coolest ever <img src="/wiki/lib/images/smileys/icon_wink.gif" class="middle" alt=";-)" /></div> <li><div> Description: Write one line why your game is the coolest ever <img src="/wiki/lib/images/smileys/icon_wink.gif" class="middle" alt=";-)"/></div>
</li> </li>
<li><div> Homepage: Enter your web <acronym title="Uniform Resource Locator">URL</acronym>, so your fans can find you</div> <li><div> Homepage: Enter your web <acronym title="Uniform Resource Locator">URL</acronym>, so your fans can find you</div>
</li> </li>
@ -157,7 +157,7 @@ Web Start allows your users to start your application by simply clicking a link
<ol> <ol>
<li><div> In the Application&gt;Web Start category, check the box to Enable Web Start.</div> <li><div> In the Application&gt;Web Start category, check the box to Enable Web Start.</div>
</li> </li>
<li><div> Check the box to make the application self-signed. <img src="/wiki/lib/images/smileys/icon_exclaim.gif" class="middle" alt=":!:" /></div> <li><div> Check the box to make the application self-signed. <img src="/wiki/lib/images/smileys/icon_exclaim.gif" class="middle" alt=":!:"/></div>
</li> </li>
<li><div> Optionally, check the box to allow offline use.</div> <li><div> Optionally, check the box to allow offline use.</div>
</li> </li>

@ -1,13 +1,14 @@
<h1><a>jMonkeyEngine SDK: AssetPacks</a></h1> <h1><a>jMonkeyEngine SDK: AssetPacks and AssetPack Browser</a></h1>
<div> <div>
<p> <p>
AssetPacks are a way to package jME3 compatible assets like models, textures, sounds and whole scenes into a package that contains publisher info, license info, descriptions etc. for all of the assets. An AssetPack basically consists of an <code>assetpack.xml</code> file that describes the content and an <code>assets</code> folder that contains the content. The integrated browser in the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> allows you to add the assets of installed AssetPacks to any project you are doing.
AssetPacks are a way to package jME3 compatible assets (like models, textures, sounds and whole scenes!) into a package that contains publisher info, license info, descriptions etc. for all of the assets. An AssetPack basically consists of an <code>assetpack.xml</code> file that describes the content and an <code>assets</code> folder that contains the content. The integrated browser in the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> allows you to add the assets from installed AssetPacks to any jme3 project scene you are working on.
</p> </p>
</div> </div>
<!-- EDIT1 SECTION "jMonkeyEngine SDK: AssetPacks" [1-519] --> <!-- EDIT1 SECTION "jMonkeyEngine SDK: AssetPacks and AssetPack Browser" [1-563] -->
<h2><a>The AssetPack Browser</a></h2> <h2><a>The AssetPack Browser</a></h2>
<div> <div>
@ -15,12 +16,19 @@ AssetPacks are a way to package jME3 compatible assets like models, textures, so
<img src="nbdocs:/com/jme3/gde/core/docs/sdk/assetpackbrowser-300x166.jpg"> <img src="nbdocs:/com/jme3/gde/core/docs/sdk/assetpackbrowser-300x166.jpg">
</p> </p>
</div>
<!-- EDIT2 SECTION "The AssetPack Browser" [564-638] -->
<h3><a>Browsing Assets</a></h3>
<div>
<p> <p>
The AssetPack browser in jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> makes browsing the installed AssetPacks easy. Browse categories, search for tags and find the right asset for your project. When you have found it, you can add it with one click to your current scene. The AssetPack manager will automagically copy all needed textures, sounds etc. to your projects assets folder. The AssetPack browser in jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> makes browsing the installed AssetPacks easy. Browse categories, search for tags and find the right asset for your project. When you have found it, you can add it with one click to your current scene. The AssetPack manager will automagically copy all needed textures, sounds etc. to your projects assets folder.
</p> </p>
<p> <p>
You can also browse a selection of online assetpacks that are available on jMonkeyEngine.org for download and install them to your jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>&#039;s AssetPack browser. <p><div>You can also browse a selection of online assetpacks that are available on jMonkeyEngine.org for download and install them to your jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>&#039;s AssetPack browser.
</div></p>
</p> </p>
<p> <p>
@ -28,11 +36,12 @@ The AssetPack browser uses a predefined directory to store the AssetPacks which
</p> </p>
</div> </div>
<!-- EDIT2 SECTION "The AssetPack Browser" [520-1342] --> <!-- EDIT3 SECTION "Browsing Assets" [639-1430] -->
<h3><a>Using the browser</a></h3> <h3><a>Adding Assets to Your Scene</a></h3>
<div> <div>
<p> <p>
To preview a model from the browser, right-click it and select &quot;Preview Asset&quot; To preview a model from the browser, right-click it and select &quot;Preview Asset&quot;
</p> </p>
@ -55,8 +64,8 @@ The model will be added to your scene and all needed texture files will be copie
</p> </p>
</div> </div>
<!-- EDIT3 SECTION "Using the browser" [1343-1948] --> <!-- EDIT4 SECTION "Adding Assets to Your Scene" [1431-2047] -->
<h2><a>AssetPack Projects</a></h2> <h2><a>Create Your Own AssetPack Project</a></h2>
<div> <div>
<p> <p>
@ -66,9 +75,9 @@ Editing of asset and project info, adding of new assets and setting their proper
</p> </p>
<ol> <ol>
<li><div> Select &quot;File → New Project&quot;</div> <li><div> Choose &quot;File → New Project&quot; from the menu</div>
</li> </li>
<li><div> Select &quot;AssetPack Project&quot;</div> <li><div> Choose &quot;AssetPack Project&quot;</div>
</li> </li>
<li><div> Fill in the project info and press &quot;finish&quot;</div> <li><div> Fill in the project info and press &quot;finish&quot;</div>
</li> </li>
@ -77,12 +86,11 @@ Editing of asset and project info, adding of new assets and setting their proper
<p> <p>
You can access and change the project properties by right-clicking the project and selecting &quot;Properties&quot;. You can access and change the project properties by right-clicking the project and selecting &quot;Properties&quot;.
</p> </p>
</div> </div>
<!-- EDIT4 SECTION "AssetPack Projects" [1949-2622] --> <!-- EDIT5 SECTION "Create Your Own AssetPack Project" [2048-2751] -->
<h3><a>Adding Assets</a></h3> <h3><a>Add Your Own Assets</a></h3>
<div> <div>
<p> <p>
@ -137,7 +145,8 @@ If the material file is an Ogre material file (.material) it will be used for lo
</p> </p>
<p> <p>
In your AssetPack Project, if you right-click your asset and select &quot;preview asset&quot; you should be able to see your model. If you do, it should work for the user as well. <p><div>In your AssetPack Project, right-click each asset and select &quot;preview asset&quot; to see your model. Verify hat it looks correctly, because then it should work for other users as well.
</div></p>
</p> </p>
<p> <p>
@ -159,7 +168,7 @@ Supported formats for models (main files) are:
</ol> </ol>
</div> </div>
<!-- EDIT5 SECTION "Adding Assets" [2623-5521] --> <!-- EDIT6 SECTION "Add Your Own Assets" [2752-5683] -->
<h3><a>AssetPack Publishing</a></h3> <h3><a>AssetPack Publishing</a></h3>
<div> <div>
@ -168,19 +177,20 @@ Supported formats for models (main files) are:
</p> </p>
<p> <p>
You can publish your AssetPacks either as a zip file or directly to jmonkeyengine.org, using your website user name and login. This means other jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> users can download your AssetPacks and install them to their local database right off the AssetPack online packages browser. You can publish your AssetPacks either as a zip file or directly to jmonkeyengine.org, using your website user name and login. <strong>This means other jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> users can download your AssetPacks and install them to their local database right off the AssetPack online packages browser.</strong>
</p> </p>
<p> <p>
To make sure you can upload, you have to be registered on jmonkeyengine.org and have to enter your login info in the AssetPack preferences (jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>→Settings). <p><div>To make sure you can upload, you have to be registered on jmonkeyengine.org, and have to enter your login info in the AssetPack preferences: jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym>→Options→Asset Packs first.
</div></p>
</p> </p>
<ol> <ol>
<li><div> Right-Click your AssetPack project and select &quot;Publish AssetPack..&quot;</div> <li><div> Right-Click your AssetPack project in the <acronym title="Software Development Kit">SDK</acronym> and select &quot;Publish AssetPack&quot;</div>
</li> </li>
<li><div> Check the description etc. settings and press &quot;Next&quot;</div> <li><div> Check the description etc. settings, and press &quot;Next&quot;.</div>
</li> </li>
<li><div> Select the checkbox for online and/or local publishing and press &quot;finish&quot;</div> <li><div> Select the checkbox for online and/or local publishing and press &quot;finish&quot;.</div>
</li> </li>
</ol> </ol>
<div><span> <div><span>
@ -190,5 +200,5 @@ To make sure you can upload, you have to be registered on jmonkeyengine.org and
</span></div> </span></div>
</div> </div>
<!-- EDIT6 SECTION "AssetPack Publishing" [5522-] --> <!-- EDIT7 SECTION "AssetPack Publishing" [5684-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:asset_packs?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:asset_packs?do=export_xhtmlbody">view online version</a></em></p>

@ -331,7 +331,7 @@ P.S.
This text might be edited in a meantime if I forgot about something ;) This text might be edited in a meantime if I forgot about something ;)
</p> </p>
<hr /> <hr/>
<p> <p>
See also: See also:

@ -239,7 +239,7 @@ By default, jMonkeyEngine uses the same <object classid="java:org.netbeans.modul
<li><div> Press <strong>F1</strong> for Help</div> <li><div> Press <strong>F1</strong> for Help</div>
</li> </li>
</ul> </ul>
<hr /> <hr/>
<p> <p>
See also See also

@ -65,7 +65,7 @@ Adding the library:
<p> <p>
You will notice a new file &quot;MyLibrary.xml&quot; is created in the plugins base package and linked to in the layer.xml file. This is basically it, you can configure a version number, license file (should be placed in Module root folder) and more via the Module Properties. You will notice a new file &quot;MyLibrary.xml&quot; is created in the plugins base package and linked to in the layer.xml file. Additionally the jar file and sources /javadoc are copied into a &quot;release&quot; folder in the project root. This is basically it, you can configure a version number, license file (should be placed in Module root folder) and more via the Module Properties.
</p> </p>
<p> <p>

@ -9,10 +9,10 @@ Note that the creation of a Module Suite is only necessary if you want to upload
</div> </div>
<!-- EDIT1 SECTION "Creating a jMonkeyEngine SDK plugin" [1-178] --> <!-- EDIT1 SECTION "Creating a jMonkeyEngine SDK plugin" [1-178] -->
<h3><a>Using jMonkeyEngine SDK for development (preferred)</a></h3> <h3><a>Using jMonkeyEngine SDK for development</a></h3>
<div> <div>
<ul> <ul>
<li><div> Install the &quot;Netbeans Plugin Development&quot;, &quot;NetBeans <acronym title="Application Programming Interface">API</acronym> Documentation&quot; and &quot;<acronym title="Graphical User Interface">GUI</acronym> Builder&quot; plugins via Tools→Plugins</div> <li><div> Install the &quot;Netbeans Plugin Development&quot; and &quot;NetBeans <acronym title="Application Programming Interface">API</acronym> Documentation&quot; plugins via Tools→Plugins</div>
</li> </li>
<li><div> Create a new &quot;Module Suite&quot; project (can be any name, this will be your local &quot;collection&quot; of plugins that you create)</div> <li><div> Create a new &quot;Module Suite&quot; project (can be any name, this will be your local &quot;collection&quot; of plugins that you create)</div>
</li> </li>
@ -32,49 +32,16 @@ Note that the creation of a Module Suite is only necessary if you want to upload
</li> </li>
<li><div> Enter a &quot;Module Display Name&quot; for your plugin like &quot;My Library&quot;</div> <li><div> Enter a &quot;Module Display Name&quot; for your plugin like &quot;My Library&quot;</div>
</li> </li>
<li><div> Check the &quot;Generate <acronym title="Extensible Markup Language">XML</acronym> Layer&quot; checkbox</div>
</li>
<li><div> Press Finish</div>
</li>
<li><div> To use core <acronym title="Software Development Kit">SDK</acronym> or jME3 functions, add &quot;jMonkeyPlatfom Core&quot; and &quot;jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> Core jME3&quot; via &quot;Module Properties→Library→Add Dependency&quot;</div>
</li>
<li><div> Write your plugin </div>
</li>
</ul>
</div>
<!-- EDIT2 SECTION "Using jMonkeyEngine SDK for development (preferred)" [179-1383] -->
<h3><a>Using NetBeans for development</a></h3>
<div>
<ul>
<li><div> Download the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> source from svn, then open and compile the project</div>
</li>
<li><div> Create a new &quot;Module Suite&quot; project (can be any name, this will be your local &quot;collection&quot; of plugins that you create)</div>
</li>
<li><div> In the Suites Properties, under &quot;Libraries&quot;, press &quot;Add Project&quot; and select the jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> project folder.</div>
</li>
<li><div> Open the suite, right-click the &quot;Modules&quot; folder and select &quot;Add new..&quot;</div>
</li>
<li><div> For &quot;Project Name&quot; enter an all-lowercase name for your plugin without spaces like <code>my-library</code></div>
</li>
<li><div> Make sure the &quot;Project Location&quot; is inside the module suite folder and press &quot;Next&quot;</div>
</li>
<li><div> Enter the base java package for your plugin in &quot;Code Name Base&quot; like <code>com.mycompany.plugins.mylibrary</code></div>
</li>
<li><div> Enter a &quot;Module Display Name&quot; for your plugin like &quot;My Library&quot;</div>
</li>
<li><div> Check the &quot;Generate <acronym title="Extensible Markup Language">XML</acronym> Layer&quot; checkbox</div>
</li>
<li><div> Press Finish</div> <li><div> Press Finish</div>
</li> </li>
<li><div> To use core <acronym title="Software Development Kit">SDK</acronym> or jME3 functions, add &quot;jMonkeyPlatfom Core&quot; and &quot;jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> Core jME3&quot; via &quot;Module Properties→Library→Add Dependency&quot;</div> <li><div> To use core <acronym title="Software Development Kit">SDK</acronym> or jME3 functions, add &quot;<acronym title="Software Development Kit">SDK</acronym> Core&quot; and &quot;<acronym title="Software Development Kit">SDK</acronym> Core Libraries&quot; via &quot;Module Properties→Library→Add Dependency&quot;</div>
</li> </li>
<li><div> Write your plugin </div> <li><div> Write your plugin </div>
</li> </li>
</ul> </ul>
</div> </div>
<!-- EDIT3 SECTION "Using NetBeans for development" [1384-2425] --> <!-- EDIT2 SECTION "Using jMonkeyEngine SDK for development" [179-1294] -->
<h3><a>jMonkeyEngine SDK Contributions Update Center</a></h3> <h3><a>jMonkeyEngine SDK Contributions Update Center</a></h3>
<div> <div>
@ -83,28 +50,67 @@ If you want your plugin to appear in the &quot;jMonkeyEngine <acronym title="Sof
</p> </p>
<p> <p>
<br/> Effectively its one large module suite with multiple modules which each represent one plugin, extension library.
</p>
</div>
<h4><a>Adding your plugin to the repository</a></h4>
<div>
<p>
To add your plugin to the repository, do the following: To add your plugin to the repository, do the following:
</p> </p>
<ul> <ul>
<li><div> Make sure the plugin is part of a &quot;Module Suite&quot; and that its located in the folder of the suite (this saves you from problems with the svn and local version not being configured the same)</div> <li><div> Make sure the plugin is part of a &quot;Module Suite&quot; and that its located in the folder of the suite (this saves you from problems with the svn and local version not being configured the same)</div>
</li> </li>
<li><div> In &quot;Module Properties→Sources&quot; set the &quot;Source Level&quot; to 1.5 if possible (jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> is compatible to Java 1.5)</div> <li><div> In &quot;Module Properties→Sources&quot;</div>
<ul>
<li><div> Set the &quot;Source Level&quot; to 1.5 if possible (jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> is compatible to Java 1.5)</div>
</li>
</ul>
</li> </li>
<li><div> In &quot;Module Properties→<acronym title="Application Programming Interface">API</acronym> Versioning&quot; set a specification version for your plugin (like 0.8.1)</div> <li><div> In &quot;Module Properties→<acronym title="Application Programming Interface">API</acronym> Versioning&quot;</div>
<ul>
<li><div> Set a specification version for your plugin (like 0.8.1)</div>
</li> </li>
<li><div> Set the &quot;implementation version&quot; to &quot;0&quot; and select &quot;append implementation versions automatically&quot;</div> <li><div> Set the &quot;implementation version&quot; to &quot;0&quot; and select &quot;append implementation versions automatically&quot;</div>
</li> </li>
</ul>
</li>
<li><div> In &quot;Module Properties→Display&quot;</div>
<ul>
<li><div> Enter a purposeful description of your plugin and one of the following categories:</div>
<ul>
<li><div> For a library plugin: &quot;jME3 - Library&quot;</div>
</li>
<li><div> For a <acronym title="Software Development Kit">SDK</acronym> plugin: &quot;jME3 - <acronym title="Software Development Kit">SDK</acronym> Plugin&quot;</div>
</li>
<li><div> For a model loader plugin: &quot;jME3 - Loader&quot;</div>
</li>
</ul>
</li>
</ul>
</li>
<li><div> In &quot;Module Properties→Build→Packaging&quot;</div>
<ul>
<li><div> Add your name</div>
</li>
<li><div> Add a link to your forum post / home page relating to the plugin</div>
</li>
<li><div> Add a license, you can use <code>../license-jme.txt</code> to insert the default jME BSD license or use a text file you store in the project folder</div>
</li>
</ul>
</li>
<li><div> Ask the managers or developers for access to the gc project</div> <li><div> Ask the managers or developers for access to the gc project</div>
</li> </li>
<li><div> Commit <strong>only the module project</strong> to trunk:</div> <li><div> Commit <strong>only the module project</strong> to trunk:</div>
<ul> <ul>
<li><div> Right click the Plugin Project and select &quot;Versioning → Import into Subversion Repository&quot;</div> <li><div> Right click the Module Project and select &quot;Versioning → Import into Subversion Repository&quot;</div>
</li> </li>
<li><div> Enter <code><object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://jmonkeyplatform-contributions.googlecode.com/svn/trunk"><param name="text" value="<html><u>https://jmonkeyplatform-contributions.googlecode.com/svn/trunk</u></html>"><param name="textColor" value="blue"></object></code> in the <acronym title="Uniform Resource Locator">URL</acronym> field</div> <li><div> Enter <code><object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://jmonkeyplatform-contributions.googlecode.com/svn/trunk"><param name="text" value="<html><u>https://jmonkeyplatform-contributions.googlecode.com/svn/trunk</u></html>"><param name="textColor" value="blue"></object></code> in the <acronym title="Uniform Resource Locator">URL</acronym> field</div>
</li> </li>
<li><div> Enter your googlecode username and commit password (different than login pass!) and press &quot;Next&quot;</div> <li><div> Enter your googlecode username and commit password (different than login pass, you can find your password <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://code.google.com/hosting/settings"><param name="text" value="<html><u>here</u></html>"><param name="textColor" value="blue"></object>!) and press &quot;Next&quot;</div>
</li> </li>
<li><div> Check that the &quot;Repository Folder&quot; is <code>trunk/mypluginfolder</code> and enter an import message</div> <li><div> Check that the &quot;Repository Folder&quot; is <code>trunk/mypluginfolder</code> and enter an import message</div>
</li> </li>
@ -117,9 +123,29 @@ To add your plugin to the repository, do the following:
<p> <p>
And thats it, from now on each time you commit changes to your module it will be built and added to the contributions center automatically and the version number will be extended by the svn revision number (e.g. 0.8.1.1234) And thats it, from now on each time you commit changes to your module it will be built and added to the contributions center automatically and the version number will be extended by the svn revision number (e.g. 0.8.1.1234)
</p>
</div>
<h4><a>Building library jar files on the server</a></h4>
<div>
<p>
As only the module project is being built on the server, any projects that create the actual jar files for library plugins (&quot;normal&quot; projects from the <acronym title="Software Development Kit">SDK</acronym>/NetBeans) have to be built from the module build file. To do that simply add the following ant targets to the module build file:
</p>
<pre><span>&lt;target name=&quot;init&quot; depends=&quot;basic-init,files-init,build-init,-javac-init,-build-subproject&quot;/&gt;</span>
<span>&lt;target name=&quot;-build-subproject&quot;&gt;</span>
<span>&lt;ant dir=&quot;./MySubProject&quot; inheritall=&quot;false&quot; target=&quot;jar&quot;/&gt;</span>
<span>&lt;copy file=&quot;./MySubProject/dist/MySubProject.jar&quot; todir=&quot;release/libs&quot;/&gt;</span>
<span><span>&lt;/target&gt;</span></span></pre>
<p>
<strong>Note that for the module version number to increase automatically on a commit to the library project, the library project has to be a subfolder of the main module project.</strong>
</p> </p>
</div> </div>
<!-- EDIT4 SECTION "jMonkeyEngine SDK Contributions Update Center" [2426-] --> <!-- EDIT3 SECTION "jMonkeyEngine SDK Contributions Update Center" [1295-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:development:setup?do=export_xhtmlbody">view online version</a></em></p> <p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:development:setup?do=export_xhtmlbody">view online version</a></em></p>

@ -113,7 +113,7 @@ Or in your Java code
</li> </li>
</ul> </ul>
<pre>mywall.setMaterial&#40;assetManager.loadAsset&#40; &quot;Materials/mat_wall.j3m&quot;&#41;&#41;;</pre> <pre>mywall.setMaterial&#40;assetManager.loadAsset&#40; &quot;Materials/mat_wall.j3m&quot;&#41;&#41;;</pre>
<hr /> <hr/>
<p> <p>
<strong>See also:</strong> <strong>See also:</strong>

@ -0,0 +1,47 @@
<h1><a>Welcome to the jMonkeyEngine SDK</a></h1>
<div>
</div>
<!-- EDIT1 SECTION "Welcome to the jMonkeyEngine SDK" [1-47] -->
<h3><a>Getting Started</a></h3>
<div>
<p>
Press the &quot;New Project&quot; button to create a new Project. Press the &quot;New File&quot; button to create new java files, materials, scenes, fonts and other files.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/sdk/welcome/new_project.png" class="media" alt=""/>
</p>
</div>
<!-- EDIT2 SECTION "Getting Started" [48-267] -->
<h3><a>Tutorials / Manual</a></h3>
<div>
<p>
By pressing &quot;F1&quot; you can open the manual which contains up to date tutorials, documentation and more to help you get started. You can search the manual contents via the search field up right.
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/sdk/welcome/search_field.png" class="media" alt=""/>
</p>
</div>
<!-- EDIT3 SECTION "Tutorials / Manual" [268-531] -->
<h3><a>Updates</a></h3>
<div>
<p>
This (jMonkeyEngine <acronym title="Software Development Kit">SDK</acronym> 3.0RC3) is the latest version of the application. You can check for incremental updates to the application via the Help menu:
</p>
<p>
<img src="nbdocs:/com/jme3/gde/core/docs/sdk/welcome/help_update.png" class="media" alt=""/>
</p>
</div>
<!-- EDIT4 SECTION "Updates" [532-] -->
<p><em><a href="http://jmonkeyengine.org/wiki/doku.php/sdk:welcome:3_0rc3?do=export_xhtmlbody">view online version</a></em></p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

@ -28,7 +28,9 @@ sdk:development:projects_assets,\
sdk:development:scene,\ sdk:development:scene,\
sdk:development:sceneexplorer,\ sdk:development:sceneexplorer,\
sdk:development:setup,\ sdk:development:setup,\
sdk:welcome:3_0rc3,\
jme3:android,\ jme3:android,\
jme3:ios,\
jme3:build_jme3_sources_with_netbeans,\ jme3:build_jme3_sources_with_netbeans,\
jme3:build_from_sources,\ jme3:build_from_sources,\
jme3:simpleapplication_from_the_commandline,\ jme3:simpleapplication_from_the_commandline,\

Loading…
Cancel
Save