diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/core-toc.xml b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/core-toc.xml index c3640e2c9..f52240ef4 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/core-toc.xml +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/core-toc.xml @@ -47,6 +47,7 @@ + diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/application_states.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/application_states.html index f2a69ee6e..f265102f5 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/application_states.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/application_states.html @@ -4,7 +4,7 @@

-The com.jme3.app.state.AppState class is a customizable jME3 interface that allows you to control the global game logic – the overall game mechanics. (To control the behaviour of a Spatial, see Custom Controls instead. Controls and AppStates can be used together.) +The com.jme3.app.state.AppState class is a customizable jME3 interface that allows you to control the global game logic ??? the overall game mechanics. (To control the behaviour of a Spatial, see Custom Controls instead. Controls and AppStates can be used together.)

@@ -51,7 +51,7 @@ You can! This is what AppStates are there for. An AppState class is subset of (o
  • a subset of other AppStates and Controls
  • -
  • … or combinations thereof.
    +
  • ??? or combinations thereof.
  • @@ -190,7 +190,7 @@ stateDetached(asm)The AppState knows when it is attached to, or detache

    -The AbstractAppState class already implements some common methods (isInitialized(), setActive(), isActive()) and makes creation of custom AppStates a bit easier. We recommend you extend AbstractAppState and override the remaining AppState methods: initialize(), setEnabled(), cleanUp(). +The AbstractAppState class already implements some common methods (isInitialized(), setActive(), isActive()) and makes creation of custom AppStates a bit easier. We recommend you extend AbstractAppState and override the remaining AppState methods: initialize(), setEnabled(), cleanup().

    @@ -263,7 +263,7 @@ You define what an AppState does when Paused or Unpaused, in the setEnable

    -The com.jme3.app.state.AppStateManager holds the list of AppStates for an application. AppStateManager ensures that activate AppStates can modify the scene graph, and that the update() loops of active AppStates is executed. There is one AppStateManager per application. You typically attach several AppStates to one AppStateManager, but the same state can only be attached once. +The com.jme3.app.state.AppStateManager holds the list of AppStates for an application. AppStateManager ensures that active AppStates can modify the scene graph, and that the update() loops of active AppStates is executed. There is one AppStateManager per application. You typically attach several AppStates to one AppStateManager, but the same state can only be attached once.

    @@ -277,19 +277,32 @@ The com.jme3.app.state.AppStateManager holds the list of AppStates for an applic
    getState(MyAppState.class)Returns the first attached state that is an instance of a subclass of MyAppState.class.
    - +

    -The AppStateManager's render(), postRender(), cleanUp() methods are internal, ignore them, users never call them directly. +The AppStateManager's render(), postRender(), cleanup() methods are internal, ignore them, users never call them directly. +

    +
      +
    • If a detached AppState is attached then initialize() will be called on the following render pass.
      +
    • +
    • If an attached AppState is detached then cleanup() will be called on the following render pass.
      +
    • +
    • If you attach an already-attached AppState then the second attach is a no-op and will return false.
      +
    • +
    • If you both attach and detach an AppState within one frame then neither initialize() or cleanup() will be called, although if either is called both will be.
      +
    • +
    • If you both detach and then re-attach an AppState within one frame then on the next update pass its cleanup() and initialize() methods will be called in that order.
      +
    • +
    - +

    Best Practices

    - +

    Communication Among AppStates

    @@ -305,7 +318,7 @@ You can use custom accessors to get data from AppStates, to set data in AppState
    this.app.getStateManager().getState(MyAppState.class).doSomeCustomStuffInThisState();
    - +

    Initialize Familiar Class Fields

    @@ -336,5 +349,5 @@ public class MyAppState extends AbstractAppState { }
    - +

    view online version

    \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html index 81fae5c5c..c85e215de 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/asset_manager.html @@ -4,7 +4,25 @@

    -JME3 has an integrated an asset manager that helps you keep your project assets organized. By assets we mean media files, such as 3D models, materials, textures, scenes, shaders, sounds, and fonts. Think of the asset manager as the filesystem of your game, independent of the actual deployment platform. It also manages the appropriate managing of OpenGL objects like textures so that they are e.g. not uploaded to the graphics card multiple times when multiple models use them. +By assets we mean multi-media files, such as 3D models, materials, textures, scenes, custom shaders, music and sound files, and custom fonts. JME3 has an integrated asset manager that helps you keep your project assets organized. Think of the asset manager as the filesystem of your game, independent of the actual deployment platform. By default, store your assets in the MyGame/assets/ directory of your project. +

    + +

    +Advantages of the AssetManager: +

    +
      +
    • The paths stay the same, no matter whether the game runs on Windows, Mac, Linux, etc!
      +
    • +
    • The AssetManager automatically optimizes the handling of OpenGL objects.
      +For example, the same textures are not uploaded to the graphics card multiple times when multiple models use them.
      +
    • +
    • The default build script automatically bundles the contents of the assets directory into the executable.
      +
    • +
    + +

    + +Advanced users can write a custom build and packaging script, and can register custom paths to the AssetManager, but this is up to you then.

    @@ -25,7 +43,7 @@ See also - +

    Usage

    @@ -45,7 +63,7 @@ Here is an example how you load assets using the AssetManager. This lines loads new AssetKey("Common/Materials/RedColor.j3m"));

    -This Material is "somewhere" in the jME3 JAR; the default Asset Manager is configured to handle a Common/… path correctly, so you don't have to specify the whole path when referring to built-in assets (such as default Materials). +This Material is "somewhere" in the jME3 JAR; the default Asset Manager is configured to handle a Common/??? path correctly, so you don't have to specify the whole path when referring to built-in assets (such as default Materials).

    @@ -53,31 +71,41 @@ Additionally, you can configure the Asset Manager and add any path to its root.

    - +

    Asset Directory

    -By default, jME3 searches for models in a directory named assets. In Java projects created with the jMonkeyEngine SDK, an assets folder is created by default. Using any other IDE or the command line, you have to create this assets directory as an extra step (see the Codeless Project tip below). +By default, jME3 searches for models in a directory named assets. +

    + +

    +

    In Java projects created with the jMonkeyEngine SDK, an assets folder is created by default in your project directory. If you are using any other IDE, or the command line, you simply create an assets directory manually (see the Codeless Project tip below). +

    This is our recommended directory structure for storing assets:

    -
    jMonkeyProjects/MyGame/src/...          # Packages, .java source code.
    -jMonkeyProjects/MyGame/assets/...       # The assets directory:
    -jMonkeyProjects/MyGame/assets/Interface/  # .font, .jpg, .png, .xml
    -jMonkeyProjects/MyGame/assets/MatDefs/    # .j3md
    -jMonkeyProjects/MyGame/assets/Materials/  # .j3m
    -jMonkeyProjects/MyGame/assets/Models/     # .j3o
    -jMonkeyProjects/MyGame/assets/Scenes/     # .j3o
    -jMonkeyProjects/MyGame/assets/Shaders/    # .j3f, .vert, .frag
    -jMonkeyProjects/MyGame/assets/Sounds/     # .ogg, .wav
    -jMonkeyProjects/MyGame/assets/Textures/   # .jpg, .png; also .mesh.xml+.material, .mtl+.obj, .blend (!) 
    +
    jMonkeyProjects/MyGame/src/...           # Packages, .java source code.
    +jMonkeyProjects/MyGame/assets/...        # The assets directory:
    +jMonkeyProjects/MyGame/assets/Interface/   # .font, .jpg, .png, .xml
    +jMonkeyProjects/MyGame/assets/MatDefs/     # .j3md
    +jMonkeyProjects/MyGame/assets/Materials/   # .j3m
    +jMonkeyProjects/MyGame/assets/Models/      # .j3o
    +jMonkeyProjects/MyGame/assets/Scenes/      # .j3o
    +jMonkeyProjects/MyGame/assets/Shaders/     # .j3f, .vert, .frag
    +jMonkeyProjects/MyGame/assets/Sounds/      # .ogg, .wav
    +jMonkeyProjects/MyGame/assets/Textures/    # .jpg, .png; also .mesh.xml+.material, .mtl+.obj, .blend (!) 

    -These are just the most common examples. You can rename/delete/add directories and subdirectories inside the assets directory in any way you like. Note however that there is no automatic refactoring for asset paths in the SDK, so if you modify them late in the development process, you have to refactor all paths manually. +These subdirectories are just the most common examples. +

    + +

    +

    You can rename/delete/add (sub)directories inside the assets directory in any way you like. Note however that there is no automatic refactoring for asset paths in the SDK, so if you modify them late in the development process, you have to refactor all paths manually. +

    @@ -91,7 +119,7 @@ After the conversion, you move the .j3o file into the assets/Models/

    - +

    Example Code: Loading Assets

    @@ -148,7 +176,7 @@ jME3 also offers a ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, an

    - +

    Common AssetManager Tasks

    @@ -175,9 +203,9 @@ rootNode.attachChild(scene);
    - +
    - +

    NullPointerException: Cannot locate resource?

    @@ -200,7 +228,7 @@ java.lang.NullPointerException

    -If you use the default build script, original models and scenes, and ZIP files, are excluded from the distribution automatically. A stand-alone executable includes converted .j3o models and scenes only. The default build script makes sure to include existing .j3o files in the distribution, but you need to convert the models manually. +If you use the default build script, original models and scenes (.mesh.xml, .obj, .blend, .zip), are excluded from the distribution automatically. A stand-alone executable includes converted .j3o files (models and scenes) only. The default build script makes sure to bundle existing .j3o files in the distribution, but you need to remember to convert the models (from mesh.xml???>.j3o, or .obj???>.j3o, etc) yourself.

    @@ -211,28 +239,34 @@ If you use the default build script, original models and scenes, and ZIP Before building the executable, you must use the jMonkeyEngine SDK's context menu action to convert 3D models to .j3o binary format.

      -
    1. Open the jME3 Project in the jMonkeyEngine SDK.
      +
    2. Save your original models (.mesh.xml, .scene, .blend, or .obj files, plus textures) into assets/Textures/. (!)
      +
    3. +
    4. Open the jME3 project in the jMonkeyEngine SDK.
    5. Browse to the assets directory in the Projects window.
    6. -
    7. Right-click a .mesh.xml/.scene/.obj file, and choose "convert to JME3 binary".
      +
    8. Right-click an original model in assets/Textures/, and choose "Convert to JME3 binary".
    9. -
    10. The converted file appears in the same directory as the .mesh.xml file. It has the same name and a .j3o suffix.
      +
    11. The converted file appears in the same directory as the original file. It has the same name and a .j3o suffix.
    12. -
    13. Move the .j3o file into the assets/Models/ or assets/Scenes/ directories.
      +
    14. Move the .j3o file into the assets/Models/ or assets/Scenes/ directory.
    15. -
    16. Update the file name in the load() code to access the .j3o file.
      +
    17. Use the assetManager's load() method to load the .j3o file.

    -

    If you load the scene from a non-.j3o ZIP file, ammend the default_build_script manully to copy the ZIP files into the distribution. +This ensures that the model's Texture paths keep working between your 3D mesh editor and JME3. +

    + +

    +

    If you must load custom assets from a non-.j3o ZIP file, you must manually ammend the default build script to copy ZIP files into your distribution. ZIPs are skipped by default.

    - +

    Asset Handling For Other IDEs: Codeless Projects

    @@ -261,7 +295,7 @@ Store your assets there as described above.
  • Download and install the jMonkeyEngine SDK.
  • -
  • In the SDK, go to File → Import Projects → External Project Assets.
    +
  • In the SDK, go to File ??? Import Projects ??? External Project Assets.
  • Select your (Eclipse or whatever) project and your assets folder in the Import Wizard.
  • @@ -282,5 +316,5 @@ Convert assets as described above.

    - +

    view online version

    \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/audio.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/audio.html index 4f87adbc6..b51e3749e 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/audio.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/audio.html @@ -36,13 +36,13 @@ The main jME audio class to look at is com.jme3.audio.AudioNode. Wh AudioNode boom = new AudioNode(assetManager, "Sound/boom.wav", false); -
  • Streamed: 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:
    AudioNode music = new AudioNode(assetManager, "Sound/music.wav", true);
    +
  • Streamed: If it is a long file such as music or a dialog, you stream the audio. Streaming means, you load and play in parallel until the sound is done. You cannot loop streams. You create a streamed sound by setting the boolean to true:
    AudioNode music = new AudioNode(assetManager, "Sound/music.wav", true);
  • - +

    Getting AudioNode Properties

    @@ -59,14 +59,14 @@ AudioNode boom = new AudioNode(assetManager, "Sound/boom.wav", fal
    getPitch()Returns the pitch.
    - +

    Note: There are other obvious getters to poll the status of all corresponding setters listed here.

    - +

    Setting AudioNode Properties

    @@ -74,24 +74,27 @@ Note: There are other obvious getters to poll the status of all corresponding se - + - + + + + - + - +
    AudioNode MethodUsage
    setVolume(1)Sets the volume gain. 1 is the default volume, 2 is twice as loud, etc. 0 is silent/mute. setTimeOffset(0.5f)Play the sound starting at a 0.5 second offset from the beginning. Default is 0.
    setPitch(1)Makes the sound play in a higher or lower pitch. Default is 1. 2 is twice as high, .5f is half as high.
    setTimeOffset(0.5f)Play the sound starting at a 0.5 second offset from the beginning. Default is 0.setVolume(1)Sets the volume gain. 1 is the default volume, 2 is twice as loud, etc. 0 is silent/mute.
    setRefDistance(50f)The reference distance controls how far a sound can still be heard at 50% of its original volume (this is assuming an exponential fall-off!). A sound with a high RefDist can be heard loud over wide distances; a sound with a low refDist can only be heard when the listener is close by. Default is 10 world units.
    setMaxDistance(100f)Maximum distance the sound can be heard, in world units. Default is 20.setMaxDistance(100f) The 'maximum attenuation distance' specifies how far from the source the sound stops growing more quiet (sounds in nature don't do that). Set this to a smaller value to keep the sound loud even at a distance; set this to higher value to let the sound fade out quickly. Default is 20 world units.
    setLooping(false)Configures the sound so that, if it is played, it plays once and stops. This is the default.setLooping(false)Configures the sound so that, if it is played, it plays once and stops. No looping is the default.
    - +
    - +

    Looping & Ambient Sounds

    @@ -100,16 +103,16 @@ Note: There are other obvious getters to poll the status of all corresponding se +setDirectional(false) - +
    setPositional(false)
    -setDirectional(false)
    All 3D effects switched off. This sound is global and comes from everywhere. Good for environmental ambient sounds and background music.All 3D effects switched off. This sound is global and plays in headspace (it appears to come from everywhere). Good for environmental ambient sounds and background music.
    setLooping(true)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.
    -Looping does not work on streamed sounds!
    setLooping(true)Configures the sound to be a loop: After the sound plays, it repeats from the beginning, until you call stop() or pause(). Good for music and ambient background noises.
    +Looping does not work on streamed sounds.
    - +
    - +

    Positional 3D Sounds

    @@ -118,20 +121,21 @@ Looping does not work on streamed sounds! +setLocalTranslation(???) - +
    setPositional(true)
    -setLocalTranslation(…)
    Activates 3D audio: The sound appears to come from a certain position, where it is loudest. Position the AudioNode in the 3D scene, or move it with mobile players or NPCs.Activates 3D audio: The sound appears to come from a certain position, where it is loudest. Position the AudioNode in the 3D scene, or move it with mobile players or NPCs.
    setReverbEnabled(true)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 "Setting Environment Properties" below. setReverbEnabled(true)Reverb is a 3D echo effect that only makes sense with positional AudioNodes. Use Audio Environments to make scenes sound as if they were "outdoors", or "indoors" in a large or small room, etc. The reverb effect is defined by the com.jme3.audio.Environment that the audioRenderer is in. See "Setting Audio Environment Properties" below.
    - +

    -Note: 3D sounds require an audio listener. +

    Positional 3D sounds require an AudioListener object in the scene (representing the player's ears). +

    - +

    Directional 3D Sounds

    @@ -140,21 +144,22 @@ Note: 3D sounds require an audio listener. +setDirection(???) +setOuterAngle()
    setDirectional(true)
    -setDirection(…)
    Activates 3D audio: This sound can only be heard from a certain direction. Specify the direction and angle in the 3D scene if you have setDirectional() true. Use this to restrict noises that should not be heard, for example, through a wall.Activates 3D audio: This sound can only be heard from a certain direction. Specify the direction and angle in the 3D scene if you have setDirectional() true. Use this to restrict noises that should not be heard, for example, through a wall.
    setInnerAngle()
    -setOuterAngle()
    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!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!
    - +

    -Note: 3D sounds require an audio listener. +

    Directional 3D sounds require an AudioListener object in the scene (representing the player's ears). +

    - +

    Play, Pause, Stop

    @@ -176,29 +181,29 @@ You can also start playing instances of an AudioNode. Use the playInstance
    myAudioNode.playInstance();
    - -

    The Listener

    + +

    The Audio Listener

    -The default listener object is the user's ear in the scene. If you use 3d audio (positional and directional sounds), you have to move the listener with the player: For example, for a first-person player, you move the listener with the camera. For a third-person player, you move the listener with the player avatar Geometry. +The default AudioListener object listener in SimpleApplication is the user's ear in the scene. If you use 3D audio (positional or directional sounds), you must move the AudioListener with the player: For example, for a first-person player, you move the listener with the camera. For a third-person player, you move the listener with the player avatar Geometry.

      @Override
       public void simpleUpdate(float tpf) {
    -    // keep the audio listener moving with the camera
    +    // first-person: keep the audio listener moving with the camera
         listener.setLocation(cam.getLocation());
         listener.setRotation(cam.getRotation());
       }
    - -

    Setting Environment Properties

    + +

    Setting Audio Environment Properties

    -Optionally, You can choose from the following environmental presets from com.jme3.audio.Environment. This presets influence subtle echo effects that evoke associations of different environments in your users. You use it together with setReverbEnabled(true) mentioned above. +Optionally, You can choose from the following environmental presets from com.jme3.audio.Environment. This presets influence subtle echo effects (reverb) that evoke associations of different environments in your users. That is, it makes you scene sound "indoors" or "outdoors" etc. You use Audio Environments together with setReverbEnabled(true) on positional AudioNodes (see above).

    @@ -221,22 +226,38 @@ Optionally, You can choose from the following environmental presets from c
    Closet 1.00f1.0f1.0f1.00f0.15f1.0f0.600f0.0025f0.500f0.0006f
    - +
      +
    1. Activate a Environment preset
      +
        +
      • Either use a default, e.g. make you scene sounds like a dungeon environment:
        audioRenderer.setEnvironment(new Environment(Environment.Dungeon));
        +
        +
      • +
      • Or activate custom environment settings in the Environment constructor:
        audioRenderer.setEnvironment(
        +        new Environment( density, diffusion, gain, gainHf, decayTime, decayHf,
        +                reflGain, reflDelay, lateGain, lateDelay ) );
        +
        +
      • +
      +
    2. +
    3. Activate 3D audio for certain sounds:
      footstepsAudio.setPositional(true);
      +footstepsAudio.setReverbEnabled(true);
      +
      +
    4. +
    +

    -Activate the preset with setEnvironment(). E.g. in a dungeon environment: +

    A sound engineer can create a custom com.???jme3.???audio.Environment object and specify custom environment values such as density, diffusion, gain, decay, delay??? You can find many examples of custom audio environment presets here. +

    -
    audioRenderer.setEnvironment(new Environment(Environment.Dungeon));

    -A sound engineer can create a custom com.​jme3.​audio.Environment object and specify custom environment factors. You can find many examples of audio environment presets here. Activate your custom environment settings in the Environment constructor: +Advanced users find more info about OpenAL and its features here: .

    -
    audioRenderer.setEnvironment(
    -        new Environment( density, diffusion, gain, gainHf, decayTime, decayHf,
    -                reflGain, reflDelay, lateGain, lateDelay ) );

    -You can find more info about OpenAL and its advanced features here: . It depends on the hardware whether audio effects are supported (if not, you get the message OpenAL EFX not available! Audio effects won't work.) +

    It depends on the hardware whether audio effects are supported (if not, you get the message OpenAL EFX not available! Audio effects won't work.) +

    sound, @@ -245,5 +266,5 @@ You can find more info about OpenAL and its advanced features here: - +

    view online version

    \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/camera.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/camera.html index 8d5c7ed67..3a5c04a2c 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/camera.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/camera.html @@ -20,7 +20,7 @@ The camera object is created with the following defaults:
  • Frustum Perspective:
      -
    • Frame of view angle of 45° along the Y axis
      +
    • Frame of view angle of 45?? along the Y axis
    • Aspect ratio of width divided by height
    • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/capture_audio_video_to_a_file.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/capture_audio_video_to_a_file.html index 4f59994b5..b6c2cc71d 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/capture_audio_video_to_a_file.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/capture_audio_video_to_a_file.html @@ -59,7 +59,7 @@ That's all!

      This way of A/V recording is still in development. It works for all of jMonkeyEngine's test cases. If you experience any problems or -if something isn't clear, please . – bortreb +if something isn't clear, please . ??? bortreb

      diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/cinematics.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/cinematics.html index dbba350ce..97af239ef 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/cinematics.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/cinematics.html @@ -384,7 +384,7 @@ You can extend individual CinematicEvents. The . An AbstractCinematicEvent implements the CinematicEvent interface and provides duration, time, speed, etc… management. Look at the is to use this for a custom fadeIn/fadeOut effect in combination with a com.jme3.post.filters.FadeFilter. +You can also create new CinematicEvent by extending . An AbstractCinematicEvent implements the CinematicEvent interface and provides duration, time, speed, etc??? management. Look at the is to use this for a custom fadeIn/fadeOut effect in combination with a com.jme3.post.filters.FadeFilter.

      diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html index 02790237b..e60ce64e5 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html @@ -12,7 +12,7 @@ Non-physical collision detection is interesting because it uses less computing r

      -Example: One example for an optimization is a physical vehicle's wheels. You could make the wheels fully physical disks, and have jME calculate every tiny force – sounds very accurate? It's total overkill and too slow for a racing game. A more performant solution is to cast four invisible rays down from the vehicle and calculate the intersections with the floor. These non-physical wheels require (in the simplest case) only four calculations per tick to achieve an effect that players can hardly distinguish from the real thing. +Example: One example for an optimization is a physical vehicle's wheels. You could make the wheels fully physical disks, and have jME calculate every tiny force ??? sounds very accurate? It's total overkill and too slow for a racing game. A more performant solution is to cast four invisible rays down from the vehicle and calculate the intersections with the floor. These non-physical wheels require (in the simplest case) only four calculations per tick to achieve an effect that players can hardly distinguish from the real thing.

      @@ -93,7 +93,7 @@ The following code snippet can be triggered by listeners (e.g. after an input ac CollisionResults results = new CollisionResults(); a.collideWith(b, results); System.out.println("Number of Collisions between" + - a.getName()+ " and " + b.getName() ": " + results.size()); + a.getName()+ " and " + b.getName() + ": " + results.size()); // Use the results if (results.size() > 0) { // how to react when a collision was detected @@ -133,7 +133,7 @@ Knowing the distance of the collisions is useful for example when you intersect

      - +

      Bounding Volumes

      @@ -147,7 +147,7 @@ jME3 computes bounding volumes for all objects. These bounding volumes are later

      -All fast-paced action and shooter games use BoundingVolumes as an optimization. Wrap all complex models into simpler shapes – in the end, you get equally useful collision detection results, but faster. +All fast-paced action and shooter games use BoundingVolumes as an optimization. Wrap all complex models into simpler shapes ??? in the end, you get equally useful collision detection results, but faster.

      @@ -173,7 +173,7 @@ Supported types:

      - +

      Usage

      @@ -186,7 +186,7 @@ For example you can use Bounding Volumes on custom meshes, or complex non-physic mesh.updateBound();
      - +

      Mesh and Scene Graph Collision

      @@ -196,7 +196,7 @@ One of the supported Collidables are meshes and scene graph objects

      - +

      Intersection

      @@ -217,7 +217,7 @@ Rays are used to perform line-of-sight calculations. This means you can detect w

      -

      These simple but powerful ray-surface intersection tests are called Ray Casting. As opposed to the more advanced Ray Tracing technique, Ray Casting does not follow the ray's reflection after the first hit – the ray just goes straight on. +

      These simple but powerful ray-surface intersection tests are called Ray Casting. As opposed to the more advanced Ray Tracing technique, Ray Casting does not follow the ray's reflection after the first hit ??? the ray just goes straight on.

      @@ -237,5 +237,5 @@ TODO:
    - +

    view online version

    \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/combo_moves.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/combo_moves.html index 46daaaa65..ff182f85e 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/combo_moves.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/combo_moves.html @@ -36,9 +36,9 @@ Copy the two classes ComboMoveExecution.java and ComboMove.java into your applic
    • -
    • ← required
      +
    • ??? required
    • -
    • ← required
      +
    • ??? required
    @@ -117,7 +117,7 @@ Combo step is recorded if A and B are both released. press("A").notPress("B").timeElapsed(0.11f).done();Combo step is recorded a certain time after A and not B is entered.
    -etc, etc … +etc, etc ??? setPriority(0.5f);If there is an ambiguity, a high-priority combo will trigger instead of a low-priority combo. This prevents that a similar looking combo step "hijacks" another Combo. Use only once per ComboMove. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html index 506b8b794..f167fb221 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html @@ -3,11 +3,11 @@

    -A com.jme3.scene.control.Control is a customizable jME3 interface that allows you to cleanly steer the behaviour of game entities (Spatials), such as artificially intelligent behaviour in NPCs, traps, automatic alarms and doors, animals and pets, self-steering vehicles or platforms – anything that moves and interacts. Several instances of customs Controls together implement the behaviours of a type of Spatial. +A com.jme3.scene.control.Control is a customizable jME3 interface that allows you to cleanly steer the behaviour of game entities (Spatials), such as artificially intelligent behaviour in NPCs, traps, automatic alarms and doors, animals and pets, self-steering vehicles or platforms ??? anything that moves and interacts. Several instances of customs Controls together implement the behaviours of a type of Spatial.

    -To control global game behaviour see Application States – you often use AppStates and Control together. +To control global game behaviour see Application States ??? you often use AppStates and Control together.

    - +

    Example: Toggle Wireframe on the scene

    @@ -243,14 +262,14 @@ Then attach the scene processor to the getViewPort().addProcessor(new WireProcessor());
    - +

    See also

      -
    • Spatial – if you can't see certain spatials, you can modify the culling behaviour to identify problems (such as inside-out custom meshes)
      +
    • Spatial ??? if you can't see certain spatials, you can modify the culling behaviour to identify problems (such as inside-out custom meshes)
    - +

    view online version

    \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html index 6c802666b..eaa86a300 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html @@ -81,9 +81,9 @@ Use the SimpleWaterProcessor (SceneProcessor) for small, limited bodies of water See also the announcement with video.

      -
    • – SimpleWaterProcessor (SceneProcessor)
      +
    • ??? SimpleWaterProcessor (SceneProcessor)
    • -
    • – SimpleWaterProcessor (SceneProcessor)
      +
    • ??? SimpleWaterProcessor (SceneProcessor)
    @@ -91,9 +91,9 @@ See also the

      -
    • – WaterFilter
      +
    • ??? WaterFilter
    • -
    • – WaterFilter
      +
    • ??? WaterFilter
    @@ -112,7 +112,7 @@ See also the

      -
    • – DepthOfFieldFilter
      +
    • ??? DepthOfFieldFilter
    @@ -121,7 +121,7 @@ See also the – FogFilter +
  • ??? FogFilter
  • @@ -130,7 +130,7 @@ See also the – LightScatteringFilter +
  • ??? LightScatteringFilter
  • @@ -161,7 +161,7 @@ See also the -
  • More details: Bloom and Glow – BloomFilter
    +
  • More details: Bloom and Glow ??? BloomFilter
  • @@ -170,11 +170,11 @@ See also the – DirectionalLight, PointLight +
  • ??? DirectionalLight, PointLight
  • -
  • – DirectionalLight, PointLight
    +
  • ??? DirectionalLight, PointLight
  • -
  • – .j3o scene
    +
  • ??? .j3o scene
  • More details: Light and Shadow
  • @@ -190,13 +190,13 @@ See also the – BasicShadowRenderer (SceneProcessor) +
  • ??? BasicShadowRenderer (SceneProcessor)
  • -
  • – PssmShadowRenderer (SceneProcessor), also known as Parallel-Split Shadow Mapping (PSSM).
    +
  • ??? PssmShadowRenderer (SceneProcessor), also known as Parallel-Split Shadow Mapping (PSSM).
  • -
  • , – SSAOFilter, also known as Screen-Space Ambient Occlusion shadows (SSOA).
    +
  • , ??? SSAOFilter, also known as Screen-Space Ambient Occlusion shadows (SSOA).
  • -
  • – SSAOFilter, also known as Screen-Space Ambient Occlusion shadows (SSOA), plus transparancy
    +
  • ??? SSAOFilter, also known as Screen-Space Ambient Occlusion shadows (SSOA), plus transparancy
  • More details: Light and Shadow
  • @@ -218,9 +218,9 @@ See also the – CartoonEdgeFilter +
  • ??? CartoonEdgeFilter
  • -
  • – CartoonEdgeFilter
    +
  • ??? CartoonEdgeFilter
  • @@ -229,7 +229,7 @@ See also the Fade – FadeFilter +
  • Fade ??? FadeFilter
  • @@ -247,29 +247,29 @@ See also the

      -
    • LightBlow Shader – blend material texture maps
      +
    • LightBlow Shader ??? blend material texture maps
    • -
    • FakeParticleBlow Shader – jet, fire effect
      +
    • FakeParticleBlow Shader ??? jet, fire effect
    • -
    • ToonBlow Shader – Toon Shading, toon edges
      +
    • ToonBlow Shader ??? Toon Shading, toon edges
    • -
    • Dissolve Shader – Scifi teleportation/dissolve effect
      +
    • Dissolve Shader ??? Scifi teleportation/dissolve effect
    • -
    • MatCap Shader – Gold, metals, glass, toons…!
      +
    • MatCap Shader ??? Gold, metals, glass, toons???!
    • -
    • Glass Shader – Glass
      +
    • Glass Shader ??? Glass
    • -
    • Force Shield Shader – Scifi impact-on-force-field effect
      +
    • Force Shield Shader ??? Scifi impact-on-force-field effect
    • -
    • SimpleSprite Shader – Animated textures
      +
    • SimpleSprite Shader ??? Animated textures
    • -
    • SimpleSpriteParticle Shader – Sprite library
      +
    • SimpleSpriteParticle Shader ??? Sprite library
    • -
    • MovingTexture Shader – Animated cloud/mist texture
      +
    • MovingTexture Shader ??? Animated cloud/mist texture
    • -
    • SoftParticles Shader – Fire, clouds, smoke etc
      +
    • SoftParticles Shader ??? Fire, clouds, smoke etc
    • -
    • Displace Shader – Deformation effect: Ripple, wave, pulse, swell!
      +
    • Displace Shader ??? Deformation effect: Ripple, wave, pulse, swell!
    @@ -286,14 +286,14 @@ Thanks for your awesome contributions! Keep them coming!

    -Particle emitter effects are highly configurable and can have any texture. They can simulate smoke, dust, leaves, meteors, snowflakes, mosquitos, fire, explosions, clusters, embers, sparks… +Particle emitter effects are highly configurable and can have any texture. They can simulate smoke, dust, leaves, meteors, snowflakes, mosquitos, fire, explosions, clusters, embers, sparks???

      -
    • – debris, flame, flash, shockwave, smoke, sparks
      +
    • ??? debris, flame, flash, shockwave, smoke, sparks
    • -
    • – cluster of points
      +
    • ??? cluster of points
    • -
    • – dust, smoke
      +
    • ??? dust, smoke

    diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/endless_terraingrid.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/endless_terraingrid.html index 942beb561..60c93a6c7 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/endless_terraingrid.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/endless_terraingrid.html @@ -5,7 +5,7 @@

    TerrainGrid is an extension built on top of the TerraMonkey tools like TerrainQuad and HeightMap, that provides "infinite" Terrain paging routines.
    -Thanks to Gábor (@anthyon) and Brent (@sploreg) for this contribution! +Thanks to G??bor (@anthyon) and Brent (@sploreg) for this contribution!

    @@ -50,10 +50,10 @@ TerrainGrid is made up of the TerrainGrid class, and the HeightMapGrid and Terra


    -Multiple listeners can be added to the TerrainGrid, they will be called in the order of addition, so it’s possible to have multiple changes to the material before completing the load of the tile. +Multiple listeners can be added to the TerrainGrid, they will be called in the order of addition, so it???s possible to have multiple changes to the material before completing the load of the tile.
    -HeightMapGrid adds the possibility of loading terrain tiles on demand instead of having a simple height array. There’s no predefined way of how to store these tiles, it only takes care of loading one HeightMap object at given location at a time. +HeightMapGrid adds the possibility of loading terrain tiles on demand instead of having a simple height array. There???s no predefined way of how to store these tiles, it only takes care of loading one HeightMap object at given location at a time.

    @@ -63,7 +63,7 @@ HeightMapGrid adds the possibility of loading terrain tiles on demand instead of

    -After playing around with the terrain in jME3, soon comes the requirement of having larger explorable lands. Increasing the size of one TerrainQuad leads to more memory usage, while it will still be easy to reach the worlds boundaries. That’s why TerrainGrid was designed. It extends the TerraindQuad class and uses 4 HeightMaps (dark blue) as the four sub-quad. This means that a terrain of size 513 will use tiles of 257. Also an LRUCache is built into the terrain package, so surrounding tiles (green) can be pre-cached on a different thread, lowering the loading time. The quads are updated as the camera approaches the boundary of the light blue section. +After playing around with the terrain in jME3, soon comes the requirement of having larger explorable lands. Increasing the size of one TerrainQuad leads to more memory usage, while it will still be easy to reach the worlds boundaries. That???s why TerrainGrid was designed. It extends the TerraindQuad class and uses 4 HeightMaps (dark blue) as the four sub-quad. This means that a terrain of size 513 will use tiles of 257. Also an LRUCache is built into the terrain package, so surrounding tiles (green) can be pre-cached on a different thread, lowering the loading time. The quads are updated as the camera approaches the boundary of the light blue section.

    @@ -79,7 +79,7 @@ There exist also two basic HeightMapGrid implementations:
    • ImageBasedHeightMapGrid: uses a sequentially numbered, 16 bit grayscale heightmaps. The physical filename of these files can be generated through the Namer interface. When a tile cannot be found by the assetManager, an empty (all-zero) heightmap is created, and a warning is added to the log.
    • -
    • FractalHeightMapGrid: uses a noise library to create a landscape on the fly. The shape of the terrain can be controlled by the various parameters and postfilters of the fractals. With the help of this grid implementation there’s no limitation – above of floating point precision limits – how far the camera can get. The tiles generated this way can be cached to the filesystem, for later modification. The FractalHeightMapGrid will always load from cache if a tile exists there!
      +
    • FractalHeightMapGrid: uses a noise library to create a landscape on the fly. The shape of the terrain can be controlled by the various parameters and postfilters of the fractals. With the help of this grid implementation there???s no limitation ??? above of floating point precision limits ??? how far the camera can get. The tiles generated this way can be cached to the filesystem, for later modification. The FractalHeightMapGrid will always load from cache if a tile exists there!
    diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/headless_server.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/headless_server.html index fde98eac5..662bcc8cc 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/headless_server.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/headless_server.html @@ -18,16 +18,16 @@ It's very easy to change your current (client) game to function as a server

    -A headless server… +A headless server???

      -
    • does not display any output – no window opens, no audio plays, no graphics are rendered.
      +
    • does not display any output ??? no window opens, no audio plays, no graphics are rendered.
    • -
    • ignores all input – no input handling.
      +
    • ignores all input ??? no input handling.
    • -
    • keeps game state – you can attach to, transform, and save the rootNode, although the scene is not displayed.
      +
    • keeps game state ??? you can attach to, transform, and save the rootNode, although the scene is not displayed.
    • -
    • calls the simpleUpdate() loop – you can run tests and trigger events as usual.
      +
    • calls the simpleUpdate() loop ??? you can run tests and trigger events as usual.
    @@ -73,7 +73,7 @@ Okay, so you can now start your game in a headless 'server mode', wher

      -
    • Parse String[] args from the main-method to enable server mode on demand (e.g. start your server like java -jar mygame.jar –server.
      +
    • Parse String[] args from the main-method to enable server mode on demand (e.g. start your server like java -jar mygame.jar ???server.
    • Integrate SpiderMonkey, to provide game updates to the server over a network.
    • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hinges_and_joints.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hinges_and_joints.html index b89c25d1c..91a746d13 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hinges_and_joints.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hinges_and_joints.html @@ -97,7 +97,7 @@ For a rope bridge, each set of planks would be one dynamic node.

      -A PhysicsHingeJoint is an invisible connection between two nodes – here between the pendulum body and the hook. Why are hinges and joints represented by the same class? Hinges and joints have something in common: They constrain the mechanical degree of freedom (DOF) of another object. +A PhysicsHingeJoint is an invisible connection between two nodes ??? here between the pendulum body and the hook. Why are hinges and joints represented by the same class? Hinges and joints have something in common: They constrain the mechanical degree of freedom (DOF) of another object.

      @@ -135,7 +135,7 @@ You'll understand that, when creating any type of joint, it is important to

      -You create the HingeJoint after you have created the nodes that are to be chained together. In the code snippet you see that the HingeJoint constructor requires the two node objects. You also have to specify axes and pivots – they are the degrees of freedom that you just heard about. +You create the HingeJoint after you have created the nodes that are to be chained together. In the code snippet you see that the HingeJoint constructor requires the two node objects. You also have to specify axes and pivots ??? they are the degrees of freedom that you just heard about.

      private HingeJoint joint;
       ...
      @@ -160,15 +160,15 @@ The pivot point's position will be at (0,0,0) in the global 3D
       Specify the following parameters for each joint:
       

        -
      • PhysicsControl A and B – the two nodes that are to be joined
        +
      • PhysicsControl A and B ??? the two nodes that are to be joined
      • -
      • Vector3f pivot A and pivot B – coordinates of the attachment point relative to A and B
        +
      • Vector3f pivot A and pivot B ??? coordinates of the attachment point relative to A and B
        • The points typically lie on the surface of the PhysicsControl's Spatials, rarely in the middle.
      • -
      • Vector3f axisA and axisB – around which axes each node is allowed to spin.
        +
      • Vector3f axisA and axisB ??? around which axes each node is allowed to spin.
        • In our example, we constrain the pendulum to swing only along the Z axis.
        • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hud.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hud.html index 6b1a30e09..66103b07b 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hud.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/hud.html @@ -15,13 +15,13 @@ A HUD (Head-Up Display) is part of a game's visual user interface. It' HUDs are used to supply players with essential information about the game state.

            -
          • Status: Score, minimap, points, stealth mode, …
            +
          • Status: Score, minimap, points, stealth mode, ???
          • -
          • Resources: Ammunition, lives/health, time, …
            +
          • Resources: Ammunition, lives/health, time, ???
          • -
          • Vehicle instruments: Cockpit, speedometer, …
            +
          • Vehicle instruments: Cockpit, speedometer, ???
          • -
          • Navigational aides: Crosshairs, mouse pointer or hand, …
            +
          • Navigational aides: Crosshairs, mouse pointer or hand, ???
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/input_handling.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/input_handling.html index 07ff5532a..6068ef1ce 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/input_handling.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/input_handling.html @@ -4,7 +4,7 @@

          -Users interact with your jME3 application with different input devices – the mouse, the keyboard, or a joystick. To respond to inputs we use the inputManager object in SimpleApplication. +Users interact with your jME3 application with different input devices ??? the mouse, the keyboard, or a joystick. To respond to inputs we use the inputManager object in SimpleApplication.

          @@ -81,13 +81,13 @@ Choose one or several key/mouse events for the interaction. We use KeyTrig Mouse wheel: Down MouseAxisTrigger(MouseInput.AXIS_WHEEL,true) - NumPad: 1, 2, 3, … KeyTrigger(KeyInput.KEY_NUMPAD1) … + NumPad: 1, 2, 3, ??? KeyTrigger(KeyInput.KEY_NUMPAD1) ??? - Keyboard: 1, 2 , 3, … KeyTrigger(KeyInput.KEY_1) … + Keyboard: 1, 2 , 3, ??? KeyTrigger(KeyInput.KEY_1) ??? - Keyboard: A, B, C, … KeyTrigger(KeyInput.KEY_A) … + Keyboard: A, B, C, ??? KeyTrigger(KeyInput.KEY_A) ??? Keyboard: Spacebar KeyTrigger(KeyInput.KEY_SPACE) @@ -97,7 +97,7 @@ Choose one or several key/mouse events for the interaction. We use KeyTrig KeyTrigger(KeyInput.KEY_LSHIFT) - Keyboard: F1, F2, … KeyTrigger(KeyInput.KEY_F1) … + Keyboard: F1, F2, ??? KeyTrigger(KeyInput.KEY_F1) ??? Keyboard: Return, Enter KeyTrigger(KeyInput.KEY_RETURN),
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html index 08411f4e0..54842c328 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/j3m_material_files.html @@ -61,7 +61,7 @@ How to this file is structured:

          -

          In the jMonkeyEngine SDK, use File→New File→Material→Empty Material File to create .j3m files. You can edit .j3m files directly in the SDK. On the other hand, they are plain text files, so you can also create them in any plain text editor. +

          In the jMonkeyEngine SDK, use File???New File???Material???Empty Material File to create .j3m files. You can edit .j3m files directly in the SDK. On the other hand, they are plain text files, so you can also create them in any plain text editor.

          @@ -72,7 +72,7 @@ How to this file is structured:

          -This is how you use the prepared .j3m Material on a Spatial. Since you have saved the .j3m file to your project's Assets directory, the .j3m path is relative to MyGame/src/assets/…. +This is how you use the prepared .j3m Material on a Spatial. Since you have saved the .j3m file to your project's Assets directory, the .j3m path is relative to MyGame/src/assets/???.

          myGeometry.setMaterial(assetManager.loadMaterial("Materials/SimpleBump.j3m"));
          @@ -278,7 +278,7 @@ The file assets/Models/Sign Post/Sign Post.j3m contains: }

      -The JPG files are in the same directory, assets/Models/Sign Post/…. +The JPG files are in the same directory, assets/Models/Sign Post/???.

    @@ -337,7 +337,7 @@ The file assets/Models/Tree/Leaves.j3m contains: }

    -The PNG file is in the same directory, assets/Models/Tree/… +The PNG file is in the same directory, assets/Models/Tree/???

    diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/jme3_shaders.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/jme3_shaders.html index c19133b17..7a7c980e7 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/jme3_shaders.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/jme3_shaders.html @@ -16,7 +16,7 @@

    Shaders are sets of instructions that are executed on the GPU. They are used to take advantage of hardware acceleration available on the GPU for rendering purposes.
    -This paper only covers Vertex and Fragment shaders because they are the only ones supported by JME3 for the moment. But be aware that there are some other types of shaders (geometry, tessellation,…).
    +This paper only covers Vertex and Fragment shaders because they are the only ones supported by JME3 for the moment. But be aware that there are some other types of shaders (geometry, tessellation,???).
    There are multiple frequently used languages that you may encounter to code shaders but as JME3 is based on OpenGL, shaders in JME use GLSL and any example in this paper will be written in GLSL.
    @@ -143,13 +143,13 @@ For example applying this shader to a sphere would render a solid blue sphere on

    -You probably heard that JME3 is “shader oriented”, but what does that mean?
    +You probably heard that JME3 is ???shader oriented???, but what does that mean?
    Usually to use shaders you must create what is called a program. This program specify the vertex shader and the fragment shader to use.
    JME3 encloses this in the material system. Every material in JME3 uses shaders.
    -For example let’s have a look at the SolidColor.j3md file :
    +For example let???s have a look at the SolidColor.j3md file :

    @@ -191,7 +191,7 @@ For more information on JME3 material system, i suggest you read this JME3 can expose pre-computed global uniforms to your shaders. You must specify the one that are required for your shader in the WorldParameters section of the material definition file (.j3md).
    -Note that in the shader the uniform names will be prefixed by a “g_”.
    +Note that in the shader the uniform names will be prefixed by a ???g_???.
    In the example above, WorldViewProjectionMatrix is declared as uniform mat4 g_WorldViewProjectionMatrix in the shader.
    @@ -225,7 +225,7 @@ JME3 uses some global uniforms for lighting :
  • use for PointLight : x,y,z contain the world position of the light, the w component contains 1/lightRadius
  • -
  • use for DirectionalLight : strangely enough it's used for the direction of the light…this might change though. The fourth component contains -1 and it's used in the lighting shader to know if it's a directionalLight or not.
    +
  • use for DirectionalLight : strangely enough it's used for the direction of the light???this might change though. The fourth component contains -1 and it's used in the lighting shader to know if it's a directionalLight or not.
  • @@ -250,7 +250,7 @@ Those are different attributes that are always passed to your shader.
    You can find a complete list of those attribute in the Type enum of the VertexBuffer .
    -Note that in the shader the attributes names will be prefixed by an “in”.
    +Note that in the shader the attributes names will be prefixed by an ???in???.

    @@ -396,7 +396,7 @@ A result preview can be seen here:

    -GLSL 1.0 to 1.2 comes with built in attributes and uniforms (ie, gl_Vertex, gl_ModelViewMatrix, etc…).
    +GLSL 1.0 to 1.2 comes with built in attributes and uniforms (ie, gl_Vertex, gl_ModelViewMatrix, etc???).
    Those attributes are deprecated since GLSL 1.3 (opengl 3), hence JME3 global uniforms and attributes. Here is a list of deprecated attributes and their equivalent in JME3

    diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/light_and_shadow.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/light_and_shadow.html index 6de569383..f9898f915 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/light_and_shadow.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/light_and_shadow.html @@ -38,7 +38,7 @@ You can add several types of light sources to a scene using rootNode.addLi

    -The available light sources in com.​jme3.​light are: +The available light sources in com.???jme3.???light are:

    • SpotLight
      @@ -136,7 +136,7 @@ spot.setDirection(cam.getDirection()); // shine forw rootNode.addLight(spot);

      -If you want the spotlight to follow the flycam, repeat the setDirection(…) and setPosition(…) calls in the update loop, and kee syncing them with the camera position and direction. +If you want the spotlight to follow the flycam, repeat the setDirection(???) and setPosition(???) calls in the update loop, and kee syncing them with the camera position and direction.

      @@ -315,7 +315,7 @@ The constructor expects the following values:
      • Your assetManager object
      • -
      • The size of the rendered shadowmaps (512, 1024, 2048, etc…)
        +
      • The size of the rendered shadowmaps (512, 1024, 2048, etc???)
      • The number of shadow maps rendered (the more shadow maps, the more quality, the less FPS).
      • @@ -326,13 +326,13 @@ The constructor expects the following values: You can set the following properties on the pssmRenderer object:

          -
        • setDirection(Vector3f) – the direction of the light
          +
        • setDirection(Vector3f) ??? the direction of the light
        • -
        • setLambda(0.65f) – Factor to use to reduce the split size
          +
        • setLambda(0.65f) ??? Factor to use to reduce the split size
        • -
        • setShadowIntensity(0.7f) – shadow darkness (1 black, 0 invisible)
          +
        • setShadowIntensity(0.7f) ??? shadow darkness (1 black, 0 invisible)
        • -
        • setShadowZextend() – distance how far away from camera shadows will still be computed
          +
        • setShadowZextend() ??? distance how far away from camera shadows will still be computed
        @@ -353,9 +353,9 @@ terrain.setShadowMode(ShadowMode.Receive); Full sample code

          -
        • , – Screen-Space Ambient Occlusion shadows
          +
        • , ??? Screen-Space Ambient Occlusion shadows
        • -
        • – Screen-Space Ambient Occlusion shadows plus transparancy
          +
        • ??? Screen-Space Ambient Occlusion shadows plus transparancy
        • @@ -363,7 +363,7 @@ Full sample code

          -Ambient Occlusion refers to the shadows that nearby objects cast on each other under an ambient lighting. It‘s an approximation of how light radiates in a real life scene. To activate Ambient Occlusion shadows, add a jME SceneProcessor named com.jme3.post.SSAOFilter to the viewPort. SSAO stands for the Screen Space Ambient Occlusion technique. +Ambient Occlusion refers to the shadows that nearby objects cast on each other under an ambient lighting. It???s an approximation of how light radiates in a real life scene. To activate Ambient Occlusion shadows, add a jME SceneProcessor named com.jme3.post.SSAOFilter to the viewPort. SSAO stands for the Screen Space Ambient Occlusion technique.

          FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
           SSAOFilter ssaoFilter = new SSAOFilter(12.94f, 43.92f, 0.33f, 0.61f);
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html
          index f5c9c0828..f63248c7f 100644
          --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html
          +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html
          @@ -139,7 +139,7 @@ update_bar(100%);

          -If you do all of this in a single frame, then it is sent to the graphics card only after the whole code block has executed. By this time the bar has reached 100% and the game has already begun – for the user, the progressbar on the screen would not have visibly changed. +If you do all of this in a single frame, then it is sent to the graphics card only after the whole code block has executed. By this time the bar has reached 100% and the game has already begun ??? for the user, the progressbar on the screen would not have visibly changed.

          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/localization.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/localization.html index de4bb918f..66b9b2b7c 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/localization.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/localization.html @@ -151,15 +151,15 @@ Only localize messages and UI text! Typical problems include:

            -
          • Localized strings will be of vastly different lengths and will totally break your UI layout. ⇒ Test every localization.
            +
          • Localized strings will be of vastly different lengths and will totally break your UI layout. ??? Test every localization.
          • -
          • Strings with variable text or numbers don't work the same in different languages. ⇒ Either work in grammatical cases/numbers/gender for each language, or use or .
            +
          • Strings with variable text or numbers don't work the same in different languages. ??? Either work in grammatical cases/numbers/gender for each language, or use or .
          • -
          • The localizer only sees the strings, without any context. E.g. does "Search History" mean "display the history of searches", or "search through the history"? ⇒ Use clear key labels. Work closely with the localizers if they require extra info, and add that info as comments to the translation file.
            +
          • The localizer only sees the strings, without any context. E.g. does "Search History" mean "display the history of searches", or "search through the history"? ??? Use clear key labels. Work closely with the localizers if they require extra info, and add that info as comments to the translation file.
          • -
          • Broken international characters ⇒ Make sure the files are saved with the same character encoding as the font file(s) you're using. Nowadays, that usually means UTF-8 since font files tend to come for Unicode.
            +
          • Broken international characters ??? Make sure the files are saved with the same character encoding as the font file(s) you're using. Nowadays, that usually means UTF-8 since font files tend to come for Unicode.
          • -
          • Missing international characters ⇒ Make sure that there's a glyph for every needed character in your font, either by using more complete font files or by having the translation changed.
            +
          • Missing international characters ??? Make sure that there's a glyph for every needed character in your font, either by using more complete font files or by having the translation changed.
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/logging.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/logging.html index 4f5043046..2bec43b83 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/logging.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/logging.html @@ -9,57 +9,64 @@

          -Many developers just use System.out.println() to print diagnostic strings to the terminal. The problem with that is that before the release, you'd have to go through all your code and make certain you removed all these println() calls. You do not want your users to see them and worry about ominous strings babbling about old development diagnostics. +Many developers just use System.out.println() to print diagnostic strings to the terminal. The problem with that is that before the release, you have to go through all your code and make certain you removed all these println() calls. You do not want your customers to see them, and needlessly worry about ominous outdated debugging diagnostics.

          - +

          Logging Like a Pro

          -Instead of println(), you use the standard Java logger from java.util.logging. It has many advantages for professional game development: +Instead of println(), use the standard Java logger from java.util.logging. It has many advantages for professional game development:

            -
          • You "tag" each message with a log level: Severe error, informative warning, etc.
            +
          • You tag each message with its log level: Severe error, informative warning, etc.
          • -
          • You can switch off printing of all messages up to certain log level with just one line of code.
            +
          • You can switch off or on printing of log messages up to certain log level with just one line of code.
              -
            • During development, you would set the log level to fine, because you want all warnings printed.
              +
            • During development, you would set the log level to fine, because you want all warnings printed.
            • -
            • For the release, you set the log level to only report severe errors, and no informative diagnostics.
              +
            • For the release, you set the log level to only report severe errors, and never print informative diagnostics.
          • -
          • The logger string is localizable, since it contains variables. You may want to localize all errors.
            +
          • The logger message string is localizable and can use variables. Optimally, you localize all error messages.

          -So to print comments like a pro, you use the following logger syntax. The variables a, b, c, can be any printable Java object, e.g. Vector3f a = cam.getLocation(). They are numbered {0},{1},{2},etc for use in the string, in the order you put them in the Object array. +To print comments like a pro, you use the following logger syntax.

          -
          private static final Logger logger = Logger.getLogger(HelloWorld.class.getName());
          - -

          - -Replace HelloWorld by the name of the class where you are using this line. - -

          -
          logger.log(Level.WARNING, "ok seriously wtf somebody check why {0} is {1} again?!", 
          +
            +
          1. Declare the logger object once per file. In the following code, replace HelloWorld by the name of the class where you are using this line.
            private static final Logger logger = Logger.getLogger(HelloWorld.class.getName());
            +
            +
          2. +
          3. Declare the info that you want to include in the message. The variables (here a, b, c) can be any printable Java object.
            +Example: Vector3f a = cam.getLocation();
            +
          4. +
          5. Put the variables in a new Object array. Refer to the variables as {0},{1},{2} etc in the message string. Variables are numbered in the order you put them into the Object array.
            +
          6. +
          7. Add the logger line and specify the log level:
            +
              +
            • Usecase 1: During debugging, a developer uses a warning to remind himself of a bug:
              logger.log(Level.WARNING, "why is {0} set to {1} again?!", 
                                     new Object[]{a , b});
              - -

              - -or - -

              -
              logger.log(Level.SEVERE, "Game error: {0} must not be {1} after {2}! Please check your flux generator.", 
              +
              +
            • +
            • Usecase 2: For the release, you inform the customer of a problem and how to solve it.
              logger.log(Level.SEVERE, "MyGame error: {0} must not be {1} after {2}! Adjust flux generator settings.", 
                                     new Object[]{a , b , c});
              +
              +
            • +
            +
          8. +

          -As you see in the example, you should phrase potentially "customer facing" errors in a neutral way and offer a reason and a solution. If you use WARNINGs as replacement for casual printlns, make sure you deactivate them for the release. + +

          As you see in the examples, you should phrase potentially "customer facing" errors in a neutral way and offer a reason and a solution for the error (if you don't, it has no value to your customer). If your deveopment team uses WARNINGs as replacement for casual printlns, make sure you deactivate them for the release. +

          @@ -67,7 +74,7 @@ More details about +

          Switching the Logger on and off

          @@ -77,23 +84,37 @@ In the release version you will deactivate the logging output to the terminal.

          -To deactivate the default logger for a release, you set the log level to only report severe messages: +To deactivate the default logger for a release, you set the log level to only report severe messages: + +

          +
          Logger.getLogger(??????).setLevel(Level.SEVERE);
          + +

          +During development or a beta test, you can tune down the default logger, and set the log level to only report warnings:

          -
          Logger.getLogger(””).setLevel(Level.SEVERE);
          +
          Logger.getLogger(??????).setLevel(Level.WARNING);

          -During development, you can tune down the default logger, and set the log level to only report warnings: +To activate full logging, e.g. for debugging and testing, use the fine level:

          -
          Logger.getLogger(””).setLevel(Level.WARNING);
          +
          Logger.getLogger(??????).setLevel(Level.FINE);
          + +
          + +

          Advanced Error Handling

          +

          -To reactivate full logging, e.g. for debugging and testing: +When an uncaught exception reaches certain parts of the jME3 system then the default response is to log the error and then exit the application. This is because an error happening every frame will rapidly fill logs with repeated failings and potentially mask or over-write the original cause of the problem or even the application may continue for a while and then suffer other errors caused by the first and make the root cause hard to determine. +

          + +

          +This behaviour can be partially modified by overriding the method handleError in SimpleApplication, for example to display a custom message to users, or to provide users with information on how to report a bug or even to change the way that the error is logged.

          -
          Logger.getLogger(””).setLevel(Level.FINE);
          - +

          view online version

          \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/making_the_camera_follow_a_character.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/making_the_camera_follow_a_character.html index 8f1119c7a..51e94608d 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/making_the_camera_follow_a_character.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/making_the_camera_follow_a_character.html @@ -82,7 +82,7 @@ The camera's transformation is copied over the spatial's transformatio Code sample:

            -
          • – Press the WASD or arrow keys to move. Drag with the left mouse button to rotate.
            +
          • ??? Press the WASD or arrow keys to move. Drag with the left mouse button to rotate.
          @@ -143,7 +143,7 @@ new KeyTrigger(KeyInput.KEY_SPACE))Activate mutiple triggers for the ro Code sample:

            -
          • – Press the WASD or arrow keys to move. Drag with the left mouse button to rotate.
            +
          • ??? Press the WASD or arrow keys to move. Drag with the left mouse button to rotate.
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/material_definitions.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/material_definitions.html index 980a0206a..288bd8fe3 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/material_definitions.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/material_definitions.html @@ -46,13 +46,13 @@ In the M
        • Create and save the necessary Texture files to your assets/Textures directory.
            -
          • E.g. mytex_diffuse.png as ColorMap / DiffuseMap, mytex_normal.png as NormalMap, mytex_alpha.png as AlphaMap, etc…
            +
          • E.g. mytex_diffuse.png as ColorMap / DiffuseMap, mytex_normal.png as NormalMap, mytex_alpha.png as AlphaMap, etc???
        • Determine the required values to achieve the effect that you want.
            -
          • E.g. set colors, floats, booleans, etc…
            +
          • E.g. set colors, floats, booleans, etc???
        • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html index e452648a5..b9625ecdb 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html @@ -278,10 +278,10 @@ setBoolean("WardIso",true);
          Material OptionDescriptionExample - getAdditionalRenderState().setBlendMode(BlendMode.Off);This is the default, no transparency.Use for all opaque objects like walls, floors, people… + getAdditionalRenderState().setBlendMode(BlendMode.Off);This is the default, no transparency.Use for all opaque objects like walls, floors, people??? - getAdditionalRenderState().setBlendMode(BlendMode.Alpha);Interpolates the background pixel with the current pixel by using the current pixel's alpha.Use this for normal every-day translucency: Frosted window panes, ice, glass, alpha-blended vegetation textures… + getAdditionalRenderState().setBlendMode(BlendMode.Alpha);Interpolates the background pixel with the current pixel by using the current pixel's alpha.Use this for normal every-day translucency: Frosted window panes, ice, glass, alpha-blended vegetation textures??? getAdditionalRenderState().setDepthWrite(false);Disables writing of the pixel's depth value to the depth buffer.Use this on Materials if you have several transparent/translucent objects obscuring one another, but you want to see through both. @@ -346,7 +346,7 @@ Later, put the Geometry (not the Material!) in the appropriate render queue getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off); No meshes are culled. Both mesh faces are rendered, even if they face away from the camera. Slow.Sometimes used to debug custom meshes if you messed up some of the polygon sides, or for special shadow effects. - getAdditionalRenderState().setFaceCullMode(FaceCullMode.Front); Activates front-face culling. Mesh faces facing the camera are not rendered.No example – Typically not used because you wouldn't see anything meaningful. + getAdditionalRenderState().setFaceCullMode(FaceCullMode.Front); Activates front-face culling. Mesh faces facing the camera are not rendered.No example ??? Typically not used because you wouldn't see anything meaningful. getAdditionalRenderState().setFaceCullMode(FaceCullMode.FrontAndBack)Culls both backfaces and frontfaces.Use this as an efficient way to make an object temporarily invisible, while keeping all its other in-game properties (such as node attachment, collision shapes, interactions, etc) active. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html index bf0be94a9..d7ce6c612 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html @@ -13,7 +13,7 @@ All visible game elements in a scene, whether it is a Model or a Shape, are made

          - +

          Nifty Logging (Nifty 1.3.1)

          @@ -191,5 +191,5 @@ Logger.getLogger("NiftyInputEventHandlingLog").setLevel(Level.SEVERE);
          - +

          view online version

          \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_interaction.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_interaction.html index 6e06f3e38..7d62673ae 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_interaction.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_interaction.html @@ -139,7 +139,7 @@ Or this is how you respond to an GUI
        • Add visibleToMouse(true); to the parent element!
        • -
        • Embed one of the interact…() elements into the parent element
          +
        • Embed one of the interact???() elements into the parent element
        • Specify the Java method that you want to call after the interaction.
          Example: interactOnClick("startGame(hud)");
          @@ -206,7 +206,7 @@ Back in the MyStartScreen class, you specify what the startGame() a }

          -The startGame() example simply switches the GUI to the hud screen when the user clicks Start. Of course, in a real game, you would perform more steps here: Load the game level, switch to in-game input and navigation handling, set a custom running boolean to true, attach custom in-game AppStates – and lots more. +The startGame() example simply switches the GUI to the hud screen when the user clicks Start. Of course, in a real game, you would perform more steps here: Load the game level, switch to in-game input and navigation handling, set a custom running boolean to true, attach custom in-game AppStates ??? and lots more.

          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_layout.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_layout.html index ee5e3538c..ac4a72d7a 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_layout.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_java_layout.html @@ -16,7 +16,7 @@

          -Work in progress You can "draw" the GUI to the screen by writing Java code – alternatively to using XML. Typically you lay out the static base GUI in XML, and use Java commands if you need to change the GUI dynamically at runtime. In theory, you can also lay out the whole GUI in Java (but we don't cover that here). +Work in progress You can "draw" the GUI to the screen by writing Java code ??? alternatively to using XML. Typically you lay out the static base GUI in XML, and use Java commands if you need to change the GUI dynamically at runtime. In theory, you can also lay out the whole GUI in Java (but we don't cover that here).

          @@ -548,7 +548,7 @@ Our GUI plan asks for two bu }});

          -Note that these controls don't do anything yet – we'll get to that soon. +Note that these controls don't do anything yet ??? we'll get to that soon.

          @@ -558,7 +558,7 @@ Note that these controls don't do anything yet – we'll get to that s

          -Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, … See also on the Nifty GUI site. +Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, ??? See also on the Nifty GUI site.

          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_overlay.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_overlay.html index d2ba87cf6..378319a14 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_overlay.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_overlay.html @@ -59,7 +59,7 @@ guiViewPort.addProcessor(niftyDisplay); flyCam.setDragToRotate(true);

          -Currently you do not have a ScreenController – we will create one in the next exercise. As soon as you have a screen controller, you will use the commented variant of the XML loading method: +Currently you do not have a ScreenController ??? we will create one in the next exercise. As soon as you have a screen controller, you will use the commented variant of the XML loading method:

          nifty.fromXml("Interface/helloworld.xml", "start", new MySettingsScreen());
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_scenarios.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_scenarios.html index 92a097b0c..b49190e35 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_scenarios.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_scenarios.html @@ -42,7 +42,7 @@ In JME, game states are implemented as custom
        • 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 for ???nifty-style-black???. Copy it as a template and change it to create your own style.


          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_xml_layout.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_xml_layout.html index 14f4b6a6a..bdab44810 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_xml_layout.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/nifty_gui_xml_layout.html @@ -98,8 +98,9 @@ Create an empty screen.xml file in the assets/Interfaces/ directory The following minimal XML file contains a start screen and a HUD screen. (Neither has been defined yet.)

          <?xml version="1.0" encoding="UTF-8"?>
          -<nifty xmlns="http://nifty-gui.sourceforge.net/nifty.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          -       xsi:schemaLocation="http://nifty-gui.sourceforge.net/nifty.xsd http://nifty-gui.sourceforge.net/nifty.xsd">
          +<nifty xmlns="http://nifty-gui.sourceforge.net/nifty-1.3.xsd"
          +  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          +  xsi:schemaLocation="http://nifty-gui.sourceforge.net/nifty-1.3.xsd http://nifty-gui.sourceforge.net/nifty-1.3.xsd">
             <screen id="start">
               <!-- ... -->
             </screen>
          @@ -117,7 +118,7 @@ Every Nifty GUI must have a
           

          - +

          Make Layers

          @@ -149,7 +150,7 @@ In a layer, you can now add panels and arrange them. Panels are containers that

          - +

          Make Panels

          @@ -202,7 +203,7 @@ The result should look as follows:

          - +

          Adding Content to Panels

          @@ -212,7 +213,7 @@ See also <

          - +

          Add Images

          @@ -257,7 +258,7 @@ This image is scaled to use 50% of the height and 30% of the width of its contai

          - +

          Add Static Text

          @@ -284,7 +285,7 @@ The font used is jME3's default font "Interface/Fonts/Default.fnt"

          - +

          Add Controls

          @@ -332,7 +333,7 @@ Our GUI plan asks for two bu </panel>

          -Note that these controls don't do anything yet – we'll get to that soon. +Note that these controls don't do anything yet ??? we'll get to that soon.

          @@ -342,11 +343,11 @@ Note that these controls don't do anything yet – we'll get to that s

          -Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, … See also on the Nifty GUI site. +Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, ??? See also on the Nifty GUI site.

          - +

          Intermediate Result

          @@ -364,7 +365,7 @@ Compare this result with the layout draft above.

          - +

          Next Steps

          @@ -386,5 +387,5 @@ Integrate the GUI into the g
          - +

          view online version

          \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/particle_emitters.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/particle_emitters.html index fb12f109d..2412f7d27 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/particle_emitters.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/particle_emitters.html @@ -82,8 +82,8 @@ Set both to different colors for a gradient effect (e.g. fire). fanning out getParticleInfluencer(). setVelocityVariation(variation) 0.2f How much the direction (setInitialVelocity()) can vary among particles. Use a value between 1 and 0 to create a directed swarm-like cloud of particles.
          -1 = Maximum variation, particles emit in random 360° directions (e.g. explosion, butterflies).
          -0.5f = particles are emitted within 180° of the initial direction.
          +1 = Maximum variation, particles emit in random 360?? directions (e.g. explosion, butterflies).
          +0.5f = particles are emitted within 180?? of the initial direction.
          0 = No variation, particles fly in a straight line in direction of start velocity (e.g. lasergun blasts). @@ -131,7 +131,7 @@ Build up you effect by specifying one parameter after the other. If you change s

          -Use the common Particle.j3md Material Definition and a texture to specify the shape of the particles. The shape is defined by the texture you provide and can be anything – debris, flames, smoke, mosquitoes, leaves, butterflies… be creative. +Use the common Particle.j3md Material Definition and a texture to specify the shape of the particles. The shape is defined by the texture you provide and can be anything ??? debris, flames, smoke, mosquitoes, leaves, butterflies??? be creative.

              Material flash_mat = new Material(
                   assetManager, "Common/MatDefs/Misc/Particle.j3md");
          @@ -143,7 +143,7 @@ Use the common Particle.j3md Material Definition and a texture to specify the sh
               flash.setSelectRandomImage(true);

          -The effect texture can be one image, or contain a sprite animation – a series of slightly different pictures in equally spaced rows and columns. If you choose the sprite animation: +The effect texture can be one image, or contain a sprite animation ??? a series of slightly different pictures in equally spaced rows and columns. If you choose the sprite animation:

          • Specify the number of rows and columns using setImagesX(2) and setImagesY().
            diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics.html index d2056e8df..62a690cb4 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics.html @@ -203,6 +203,20 @@ All non-mesh CollisionShapes can be used for dynamic, kinematic, as well as stat

            +On a CollisionShape, you can apply a few properties +

            +
            + + + + + + +
            CollisionShape Method Property Examples
            setScale(new Vector3f(2f,2f,2f)) You can change the scale of collisionshapes (whether it be, Simple or Mesh). You cannot change the scale of a CompoundCollisionShape however. A sphere collision shape, will change its radius based on the X component of the vector passed in. You must scale a collision shape before attaching it to the physicsSpace, or you must readd it to the physicsSpace each time the scale changes. Scale a player in the Y axis by 2:
            +new Vector3f(1f,2f,1f)
            + +

            + The mesh-accurate shapes can use a CollisionShapeFactory as constructor (code samples see below).

            @@ -217,7 +231,7 @@ The mesh-accurate shapes can use a CollisionShapeFactory as constructor (code sa

            - +

            CollisionShape Code Samples

              @@ -248,7 +262,7 @@ The mesh-accurate shapes can use a CollisionShapeFactory as constructor (code sa
            - +

            Create PhysicsControl

            @@ -269,29 +283,29 @@ Solid immobile floors, walls, static obstacles. GhostControlUse for collision and intersection detection between physical objects. A GhostControl itself is non-solid and invisible. GhostControl moves with the Spatial it is attached to. Use GhostControls to implement custom game interactions by adding it to a visible Geometry. A monster's "aggro radius", CharacterControl collisions, motion detectors, photo-electric alarm sensors, poisonous or radioactive perimeters, life-draining ghosts, etc.
            -
            +
            +PhysicsVehicleWheel - +
            Special PhysicsControls Usage Examples
            VehicleControl
            -PhysicsVehicleWheel
            Special Control used for "terrestrial" vehicles with suspension and wheels. Cars, tanks, hover crafts, ships, motorcycles… Special Control used for "terrestrial" vehicles with suspension and wheels. Cars, tanks, hover crafts, ships, motorcycles???
            CharacterControlSpecial Control used for Walking Characters.Upright walking persons, animals, robots… CharacterControlSpecial Control used for Walking Characters.Upright walking persons, animals, robots???
            RagDollControlSpecial Control used for collapsing, flailing, or falling characters Falling persons, animals, robots, "Rag dolls"
            - +

            Click the links for details on the special PhysicsControls. This article is about RigidBodyControl.

            - +

            PhysicsControls Code Samples

            @@ -325,12 +339,12 @@ The following creates a MeshCollisionShape for a whole loaded (static) scene: gameLevel.addControl(new RigidBodyControl(0.0f)); // explicit zero mass, implicit MeshCollisionShape

            -

            Spheres and Boxes automatically fall back on the correct default CollisionShape if you do not specify a CollisionShape in the RigidBodyControl constructor. Complex static objects can fall back on MeshCollisionShapes. +

            Spheres and Boxes automatically fall back on the correct default CollisionShape if you do not specify a CollisionShape in the RigidBodyControl constructor. Complex static objects can fall back on MeshCollisionShapes, unless it is a Node, in which case it will become a CompoundCollisionShape containing a MeshCollisionShape

            - +

            Add PhysicsControl to Spatial

            @@ -347,7 +361,7 @@ For each physical Spatial in the scene:
            - +

            Add PhysicsControl to PhysicsSpace

            @@ -374,7 +388,46 @@ myThing_geo.removeFromParent();

            - + +

            Changing the Scale of a PhysicsControl

            +
            + +

            +To change the scale of a PhysicsControl you must change the scale of the collisionshape which belongs to it. +

            + +

            +MeshCollisionShapes can have a scale correctly set, but it only works when being constructed on a geometry (not a node). CompoundCollisionShapes cannot be scaled at this time(the type obtained when creating a CollisionShape from a Node i.e using imported models). +

            + +

            +When you import a model from blender, it often comes as a Node (even if it only contains 1 mesh), which is by de-facto automatically converted to a CompoundCollisionShape. So when you try to scale this it won't work! Below illustrates an example, of how to scale an imported model: +

            +
            // Doesn't scale
            +// This modified version contains Node -> Geometry (name = "MonkeyHeadGeom")
            +Spatial model = assetManager.loadModel("Models/MonkeyHead.j3o"); model.addControl(new RigidBodyControl(0));
            +// Won't work as this is now a CompoundCollisionShape containing a MeshCollisionShape
            +model.getControl(RigidBodyControl.class).getCollisionShape().setScale(new Vector3f(2, 2, 2)); 
            +bulletAppState.getPhysicsSpace().add(model);
            + 
            +// Works fine
            +Spatial model = assetManager.loadModel("Models/MonkeyHead.j3o"); // Same Model
            + // IMPORTANT : You must navigate to the Geometry for this to work
            +Geometry geom = ((Geometry) ((Node) model).getChild("MonkeyHeadGeom"));
            +geom.addControl(new RigidBodyControl(0));
            +// Works great (scaling of a MeshCollisionShape)	
            +geom.getControl(RigidBodyControl.class).getCollisionShape().setScale(new Vector3f(2, 2, 2));
            +bulletAppState.getPhysicsSpace().add(geom);
            + +

            +With the corresponding output below: + + + +

            + +
            +

            PhysicsSpace Code Samples

            @@ -404,9 +457,9 @@ setWorldMin(new Vector3f(-10000f, -10000f, -10000f));Specifies the size setCcdMotionThreshold()The amount of motion in 1 physics tick to trigger the continuous motion detection in moving objects that push one another. Rarely used, but necessary if your moving objects get stuck or roll through one another.
            - +
            - +

            Specify Physical Properties

            @@ -446,7 +499,7 @@ This setting has an impact on performance, so use it sparingly. Brick: Rubber ball: 1.0f
            - +

            On a RigidBodyControl, you can apply the following physical forces: @@ -467,15 +520,15 @@ On a RigidBodyControl, you can apply the following physical forces: (See detailed explanation below.) - + - +

            Kinematic vs Dynamic vs Static

            -All physical objects… +All physical objects???

            • must not overlap.
              @@ -490,7 +543,7 @@ All physical objects… Property Static Kinematic Dynamic - ExamplesImmobile obstacles: Floors, walls, buildings, …Remote-controlled solid objects: Airships, meteorites, elevators, doors; networked or remote-controlled NPCs; invisible "airhooks" for hinges and joints.Interactive objects: Rolling balls, movable crates, falling pillars, zero-g space ship… + ExamplesImmobile obstacles: Floors, walls, buildings, ???Remote-controlled solid objects: Airships, meteorites, elevators, doors; networked or remote-controlled NPCs; invisible "airhooks" for hinges and joints.Interactive objects: Rolling balls, movable crates, falling pillars, zero-g space ship??? Does it have a mass?no, 0.0fyes1), >0.0f yes, >0.0f @@ -519,7 +572,7 @@ setKinematic(true);setMass(1f);
              setKinematic(false);
            - +

            When Do I Use Kinematic Objects?

            @@ -529,7 +582,7 @@ setKinematic(false);
          • When they collide, Kinematics push dynamic objects, but a dynamic object never pushes a Kinematic.
          • -
          • You can hang kinematics up "in mid-air" and attach other PhysicsControls to them using hinges and joints. Picture them as "air hooks" for flying aircraft carriers, floating islands in the clouds, suspension bridges, swings, chains…
            +
          • You can hang kinematics up "in mid-air" and attach other PhysicsControls to them using hinges and joints. Picture them as "air hooks" for flying aircraft carriers, floating islands in the clouds, suspension bridges, swings, chains???
          • You can use Kinematics to create mobile remote-controlled physical objects, such as moving elevator platforms, flying blimps/airships. You have full control how Kinematics move, they never "fall" or "topple over".
          • @@ -542,7 +595,7 @@ setKinematic(false);

            - +

            Forces: Moving Dynamic Objects

            @@ -562,25 +615,25 @@ Use the following methods to move dynamic physical objects. setAngularVelocity(new Vector3f(0f,0f,1f)) Set the rotational speed of the object; the x, y and z component are the speed of rotation around that axis. - applyCentralForce(…) Move (push) the object once with a certain moment, expressed as a Vector3f. + applyCentralForce(???) Move (push) the object once with a certain moment, expressed as a Vector3f. - applyForce(…) Move (push) the object once with a certain moment, expressed as a Vector3f. Optionally, you can specify where on the object the pushing force hits. + applyForce(???) Move (push) the object once with a certain moment, expressed as a Vector3f. Optionally, you can specify where on the object the pushing force hits. - applyTorque(…) Rotate (twist) the object once around its axes, expressed as a Vector3f. + applyTorque(???) Rotate (twist) the object once around its axes, expressed as a Vector3f. - applyImpulse(…) An idealised change of momentum. This is the kind of push that you would use on a pool billiard ball. + applyImpulse(???) An idealised change of momentum. This is the kind of push that you would use on a pool billiard ball. - applyTorqueImpulse(…) An idealised change of momentum. This is the kind of push that you would use on a pool billiard ball. + applyTorqueImpulse(???) An idealised change of momentum. This is the kind of push that you would use on a pool billiard ball. clearForces()Cancels out all forces (force, torque) etc and stops the motion.
            - +

            It is technically possible to position PhysicsControls using setLocalTranslation(), e.g. to place them in their start position in the scene. However you must be very careful not to cause an "impossible state" where one physical object overlaps with another! Within the game, you typically use the setters shown here exclusively. @@ -602,7 +655,7 @@ PhysicsControls also support the following advanced features: setCollideWithGroups()
            setCollisionGroup()
            addCollideWithGroup(COLLISION_GROUP_01)
            -removeCollideWithGroup(COLLISION_GROUP_01)Collision Groups are integer bit masks – enums are available in the CollisionObject. All physics objects are by default in COLLISION_GROUP_01. Two objects collide when the collideWithGroups set of one contains the Collision Group of the other. Use this to improve performance by grouping objects that will never collide in different groups (the the engine saves times because it does not need to check on them). +removeCollideWithGroup(COLLISION_GROUP_01)Collision Groups are integer bit masks ??? enums are available in the CollisionObject. All physics objects are by default in COLLISION_GROUP_01. Two objects collide when the collideWithGroups set of one contains the Collision Group of the other. Use this to improve performance by grouping objects that will never collide in different groups (the the engine saves times because it does not need to check on them). setDamping(float, float)The first value is the linear threshold and the second the angular. This simulates dampening of forces, for example for underwater scenes. @@ -620,7 +673,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)Collision Groups are integer setCcdSweptSphereRadius(.5f)Bullet does not use the full collision shape for continuous collision detection, instead it uses a "swept sphere" shape to approximate a motion, which can be imprecise and cause strange behaviours such as objects passign through one another or getting stuck. Only relevant for fast moving dynamic bodies.
            - +

            You can setApplyPhysicsLocal(true) for an object to make it move relatively to its local physics space. You would do that if you need a physics space that moves with a node (e.g. a spaceship with artificial gravity surrounded by zero-g space). By default, it's set to false, and all movement is relative to the world. @@ -628,12 +681,12 @@ removeCollideWithGroup(COLLISION_GROUP_01)Collision Groups are integer

            - +

            Best Practices

              -
            • Multiple Objects Too Slow? Do not overuse PhysicsControls. Although PhysicsControls are put to “sleep” when they are not moving, creating a world solely out of dynamic physics objects will quickly bring you to the limits of your computer's capabilities.
              -Solution: Improve performance by replacing some physical Spatials with non-physical Spatials. Use the non-physical ones for non-solid things for which you do not need to detect collisions – foliage, plants, effects, ghosts, all remote or unreachable objects.
              +
            • Multiple Objects Too Slow? Do not overuse PhysicsControls. Although PhysicsControls are put to ???sleep??? when they are not moving, creating a world solely out of dynamic physics objects will quickly bring you to the limits of your computer's capabilities.
              +Solution: Improve performance by replacing some physical Spatials with non-physical Spatials. Use the non-physical ones for non-solid things for which you do not need to detect collisions ??? foliage, plants, effects, ghosts, all remote or unreachable objects.
              @@ -642,7 +695,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)Collision Groups are integer
              -
            • Eject? If you have physical nodes jittering wildy and being ejected "for no apparent reason", it means you have created an impossible state – solid objects overlapping. This can happen when you position solid spatials too close to other solid spatials, e.g. when moving them with setLocalTranslation().
              +
            • Eject? If you have physical nodes jittering wildy and being ejected "for no apparent reason", it means you have created an impossible state ??? solid objects overlapping. This can happen when you position solid spatials too close to other solid spatials, e.g. when moving them with setLocalTranslation().
              Solution: Use the debug mode to make CollisionShapes visible and verify that CollisionShapes do not overlap.
              bulletAppState.getPhysicsSpace().enableDebug(assetManager);
            • @@ -664,7 +717,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)Collision Groups are integer
            -
            +
            1) Inertia is calculated for kinematic objects, and you need mass to do that.
            diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics_listeners.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics_listeners.html index 5e11134f0..31bdbe1fb 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics_listeners.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/physics_listeners.html @@ -150,7 +150,7 @@ If however you want to respond to a collision event (com.jme3.bullet.collision.P
          • Playing a sound (e.g. explosion, ouch)
          • -
          • … and countless more, depending on your game
            +
          • ??? and countless more, depending on your game
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html index 4e2ebf6d6..306e4fcc0 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html @@ -4,7 +4,7 @@

          -The awesome SeaMonkey WaterFilter is highly configurable. It can render any type of water and also simulates the underwater part of the effect, including light effects called caustics. The effect is based on published on gamedev.net. Here's a video: +The awesome SeaMonkey WaterFilter is highly configurable. It can render any type of water and also simulates the underwater part of the effect, including light effects called caustics. The effect is based on published on gamedev.net. Here's a video:

          @@ -23,11 +23,11 @@ The awesome SeaMonkey WaterFilter is highly configurable. It can render any type

          -The effect is part of a deferred rendering process, taking advantage of the pre-computed position buffer and back buffer (a texture representing the screen’s pixels position in view space, and a texture of the rendered scene). +The effect is part of a deferred rendering process, taking advantage of the pre-computed position buffer and back buffer (a texture representing the screen???s pixels position in view space, and a texture of the rendered scene).

          -After some calculation, this allows to reconstruct the position in world space for each pixel on the screen. "If a pixel is under a given water height, let’s render it as a blue pixel!" Blue pixel? Not exactly, we want waves, we want ripples, we want foam, we want reflection and refraction. +After some calculation, this allows to reconstruct the position in world space for each pixel on the screen. "If a pixel is under a given water height, let???s render it as a blue pixel!" Blue pixel? Not exactly, we want waves, we want ripples, we want foam, we want reflection and refraction.

          @@ -49,11 +49,11 @@ There are several ways of reconstructing the world space position of a pixel fro

          -Now we have the rendered scene in a texture, and we can reconstruct the position in world space of each pixel. We’re good to go! +Now we have the rendered scene in a texture, and we can reconstruct the position in world space of each pixel. We???re good to go!

          -– Nehon +??? Nehon

          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ragdoll.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ragdoll.html index f0caa1a92..41518bcb7 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ragdoll.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/ragdoll.html @@ -18,7 +18,7 @@ The jMonkeyEngine3 has built-in support for (Tip: Click to pull the ragdoll up) -
        • – This ragdoll replaces a rigged model of a character in the moment it is "shot" to simulate a collapsing person. (Also note DoF of the limbs.)
          +
        • ??? This ragdoll replaces a rigged model of a character in the moment it is "shot" to simulate a collapsing person. (Also note DoF of the limbs.)
        • @@ -92,7 +92,7 @@ Node lLegL = createLimb(0.2f, 0.5f, new Vector3f(-0.25f,-2.2f, 0) Node lLegR = createLimb(0.2f, 0.5f, new Vector3f( 0.25f,-2.2f, 0), false);

          -You now have the outline of a person. But if you ran the application now, the individual limbs would fall down independently of one another – the ragdoll is still lacking joints. +You now have the outline of a person. But if you ran the application now, the individual limbs would fall down independently of one another ??? the ragdoll is still lacking joints.

          @@ -201,7 +201,7 @@ Read the documentation, diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/read_graphic_card_capabilites.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/read_graphic_card_capabilites.html index 31d88acb3..75115007e 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/read_graphic_card_capabilites.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/read_graphic_card_capabilites.html @@ -11,7 +11,7 @@ When different people test your new game, you may get feedback that the game doe You can read (and print) the capabilities of the user's graphic card using the com.jme3.renderer.Caps class:

          Collection<Caps> caps = renderer.getCaps();
          -Logger.getLogger(HelloWorld.class.getName()).log(Level.INFO, “Caps: {0}”, caps.toString());
          +Logger.getLogger(HelloWorld.class.getName()).log(Level.INFO, ???Caps: {0}???, caps.toString());

          Note: Replace HelloWorld by the name of the class where you are using this line. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html index 11a57b759..db3908ca3 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html @@ -77,7 +77,7 @@ The following example overrides simpleInitApp() in SimpleApplicatio  

          -

          Here you see why we save user data inside spatials – so it can be saved and loaded together with the .j3o file. If you have game data outside Spatials, you have to remember to save() and load(), and get() and set() it yourself. +

          Here you see why we save user data inside spatials ??? so it can be saved and loaded together with the .j3o file. If you have game data outside Spatials, you have to remember to save() and load(), and get() and set() it yourself.

          @@ -153,11 +153,11 @@ To make a custom class savable: -
        • Add one line that read…()s the data to the JmeImport input capsule.
          +
        • Add one line that read???()s the data to the JmeImport input capsule.
          • On the left side of the assignment, specify the class field that you are restoring
          • -
          • On the right side, use the appropriate capsule.read…() method for the data type. Specify the String name of the variable (must be the same as you used in the write() method), and again specify a default value.
            +
          • On the right side, use the appropriate capsule.read???() method for the data type. Specify the String name of the variable (must be the same as you used in the write() method), and again specify a default value.
        • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html index b97f88c63..382fd9846 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html @@ -17,15 +17,15 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w

            -
          • com.jme3.scene.shape.Box – A cube or cuboid. Single-sided Quad faces (outside only).
            +
          • com.jme3.scene.shape.Box ??? A cube or cuboid. Single-sided Quad faces (outside only).
          • -
          • com.jme3.scene.shape.StripBox – A cube or cuboid. Solid filled faces (inside and outside).
            +
          • com.jme3.scene.shape.StripBox ??? A cube or cuboid. Solid filled faces (inside and outside).
            -
          • com.jme3.scene.shape.Cylinder – A disk or pillar.
            +
          • com.jme3.scene.shape.Cylinder ??? A disk or pillar.
          • -
          • com.jme3.scene.shape.Sphere – A ball or elipsoid.
            +
          • com.jme3.scene.shape.Sphere ??? A ball or elipsoid.
          @@ -35,7 +35,7 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w

            -
          • com.jme3.scene.shape.Dome – A semi-sphere, e.g. SkyDome.
            +
          • com.jme3.scene.shape.Dome ??? A semi-sphere, e.g. SkyDome.
            • For a cone, set the Dome's radialSamples>4 and planes=2.
            • @@ -45,11 +45,11 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w
              -
            • com.jme3.scene.shape.Torus – An single-holed torus or "donut".
              +
            • com.jme3.scene.shape.Torus ??? An single-holed torus or "donut".
            • -
            • com.jme3.scene.shape.PQTorus – A parameterized torus. A PQ-Torus looks like a .
              +
            • com.jme3.scene.shape.PQTorus ??? A parameterized torus. A PQ-Torus looks like a .
            • -
            • com.jme3.scene.shape.Surface – A curved surface (called ) described by knots, weights and control points. Compare with shape.Curve.
              +
            • com.jme3.scene.shape.Surface ??? A curved surface (called ) described by knots, weights and control points. Compare with shape.Curve.
            @@ -58,11 +58,11 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w

            Non-3D shapes

              -
            • com.jme3.scene.shape.Quad – A flat 2D rectangle (single-sided, center is in bottom-left corner)
              +
            • com.jme3.scene.shape.Quad ??? A flat 2D rectangle (single-sided, center is in bottom-left corner)
            • -
            • com.jme3.scene.shape.Line – A straight 1D line defined by a start and end point.
              +
            • com.jme3.scene.shape.Line ??? A straight 1D line defined by a start and end point.
            • -
            • com.jme3.scene.shape.Curve – A curved 1D spline. Compare with shape.Surface.
              +
            • com.jme3.scene.shape.Curve ??? A curved 1D spline. Compare with shape.Surface.
            @@ -76,11 +76,11 @@ The simplest type of Meshes are the built-in JME Shapes. You can create Shapes w Do not mix up these visible com.jme3.shapes with similarly named classes from the com.jme3.math package. Choose the right package when letting your IDE fill in the import statements!

              -
            • com.jme3.math.Line – is invisible, has a direction, goes through a point, infinite length.
              +
            • com.jme3.math.Line ??? is invisible, has a direction, goes through a point, infinite length.
            • -
            • com.jme3.math.Ray – is invisible, has a direction and start point, but no end.
              +
            • com.jme3.math.Ray ??? is invisible, has a direction and start point, but no end.
            • -
            • com.jme3.math.Spline – is an invisible curve.
              +
            • com.jme3.math.Spline ??? is an invisible curve.
            • etc
            • @@ -131,7 +131,7 @@ To add a shape to the scene: You can compose more complex custom Geometries out of simple Shapes. Think of the buildings in games like Angry Birds, or the building blocks in Second Life ("prims") and in Tetris ("Tetrominos").

                -
              1. Create a Node. By default it is located at the origin (0/0/0) – leave the Node there for now.
                +
              2. Create a Node. By default it is located at the origin (0/0/0) ??? leave the Node there for now.
              3. Create your shapes and wrap each into a Geometry, as just described.
              4. @@ -144,7 +144,7 @@ You can compose more complex custom Geometries out of simple Shapes. Think of th

              -The order is important: First arrange around origin, then transform. Otherwise, transformations are applied around the wrong center (pivot). Of course, you can attach your constellation to other pivot Nodes to create even more complex shapes (a chair, a furnished room, a house, a city, …), but again, arrange them around the origin first before you transform them. Obviously, such composed Geometries are simpler than hand-sculpted meshes from a mesh editor. +The order is important: First arrange around origin, then transform. Otherwise, transformations are applied around the wrong center (pivot). Of course, you can attach your constellation to other pivot Nodes to create even more complex shapes (a chair, a furnished room, a house, a city, ???), but again, arrange them around the origin first before you transform them. Obviously, such composed Geometries are simpler than hand-sculpted meshes from a mesh editor.

            @@ -184,7 +184,7 @@ rootNode.attachChild(geom); // attach geometry to a n

            -* Optimization – The GeometryBatchFactory class combines several of your shapes with the same texture into one mesh with one texture. +* Optimization ??? The GeometryBatchFactory class combines several of your shapes with the same texture into one mesh with one texture.

            spatial, diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/sky.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/sky.html index 7f34dbf27..d968832ca 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/sky.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/sky.html @@ -89,7 +89,7 @@ Box or Sphere?
          -
        • If you have access to sphere map textures – specially projected sky images that fit inside a sphere – then you use a SkySphere or SkyDome.
          +
        • If you have access to sphere map textures ??? specially projected sky images that fit inside a sphere ??? then you use a SkySphere or SkyDome.
          • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html index 2eaec2e26..86d022c69 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html @@ -43,7 +43,7 @@ In your Java code, a Spatial is either an instance of com.jme3.scene.Node< Visibility: A Geometry represents a visible 3D object in the scene graph. A Node is an invisible "handle" for a group of Spatials in the scene graph. - Purpose: Use Geometries to represent an object's looks: Every Geometry contains a polygon mesh and a material, specifying its shape, color, texture, and opacity/transparency.
            + Purpose: Use Geometries to represent an object's look: Every Geometry contains a polygon mesh and a material, specifying its shape, color, texture, and opacity/transparency.
            You attach Geometries to Nodes. Use Nodes to structure and group Geometries and other Nodes. Every Node is attached to one parent node, and each node can have zero or more children (Nodes or Geometries) attached to itself.
            When you transform (move, rotate, etc) a parent node, all its children are transformed (moved, rotated, etc). @@ -53,10 +53,10 @@ mesh and material; Transformations; custom user data;
            no mesh, no material. - Examples: Box, sphere, player, building, terrain, vehicle, missiles, NPCs, etc… rootNode, guiNode, audioNode, a custom grouping node such as vehicleNode or shipNode with passengers attached, etc. + Examples: Box, sphere, player, building, terrain, vehicle, missiles, NPCs, etc??? rootNode, guiNode, audioNode, a custom grouping node such as vehicleNode or shipNode with passengers attached, etc.
        • - +

          You never create a Spatial with Spatial s = new Spatial();! A Spatial is an abstract concept, like a mammal (there is no actual creature called "mammal" walking around here). You create either a com.jme3.scene.Node or com.jme3.scene.Geometry instance. Some methods, however, require a Spatial type as argument: This is because they are able to accept both Nodes and Geometries as arguments. In this case, you simply cast a Node or Geometry to Spatial. @@ -64,7 +64,7 @@ no mesh, no material.

          - +

          Mesh

          @@ -83,7 +83,7 @@ The polygon Mesh i
          - +

          What is a Clone?

          @@ -112,13 +112,13 @@ Usually there is no need to manually use any of the clone() methods

          - +

          How to Add Fields and Methods to a Spatial

          -You can include custom user data –that is, custom Java objects and methods– in Nodes and Geometries. This is very useful for maintaining information about a game element, such as health, budget, ammunition, inventory, equipment, etc for players, or landmark locations for terrains, and much more. +You can include custom user data ???that is, custom Java objects and methods??? in Nodes and Geometries. This is very useful for maintaining information about a game element, such as health, budget, ammunition, inventory, equipment, etc for players, or landmark locations for terrains, and much more.

          @@ -171,7 +171,7 @@ This is how you list all data keys that are already defined for one Spatial: }

          - +

          How to Access a Named Sub-Mesh

          @@ -196,12 +196,12 @@ In the following example, the Node house is the loaded model. The s
          Geometry submesh = (Geometry) houseScene.getChild("door 12");
          - +

          What is Culling?

          -There are two types of colling: Face culling, and view frustrum culling. +There are two types of culling: Face culling, and view frustrum culling.

          @@ -212,13 +212,13 @@ There are two types of colling: Face culling, and view frustrum culling. You can switch the com.jme3.material.RenderState.FaceCullMode to

            -
          • FaceCullMode.Back (default) – only the frontsides of a mesh are drawn. This is the normal behaviour.
            +
          • FaceCullMode.Back (default) ??? only the frontsides of a mesh are drawn. This is the normal behaviour.
          • -
          • FaceCullMode.Front – 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.
            +
          • FaceCullMode.Front ??? 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.
          • -
          • FaceCullMode.FrontAndBack – The mesh becomes invisible.
            +
          • FaceCullMode.FrontAndBack ??? The mesh becomes invisible.
          • -
          • FaceCullMode.Off – Every side of the mesh is drawn. Looks normal, but slows down large scenes.
            +
          • FaceCullMode.Off ??? Every side of the mesh is drawn. Looks normal, but slows down large scenes.
          @@ -230,20 +230,20 @@ Example:
          material.getAdditionalRenderState().setFaceCullMode(FaceCullMode.FrontAndBack);

          -View frustum culling 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 "outside the view frustrum". +View frustum culling 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 "outside the view frustrum".

          The decision what is visible and what not, is done automatically by the engine (CullHint.Dynamic). Optionally, you can manually control whether the engine culls individual spatials (and children) from the scene graph:

            -
          • CullHint.Dynamic – Default, faster because it doesn't waste time with objects that are out of view.
            +
          • CullHint.Dynamic ??? Default, faster because it doesn't waste time with objects that are out of view.
          • -
          • CullHint.Never – Calculate and draw everything always (even if it does not end up on the user's screen because it's out of sight). Slower, but can be used while debugging custom meshes.
            +
          • CullHint.Never ??? Calculate and draw everything always (even if it does not end up on the user's screen because it's out of sight). Slower, but can be used while debugging custom meshes.
          • -
          • CullHint.Always – 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.
            +
          • CullHint.Always ??? 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.
          • -
          • CullHint.Inherit – Inherit culling behaviour from parent node.
            +
          • CullHint.Inherit ??? Inherit culling behaviour from parent node.
          @@ -255,13 +255,13 @@ Example:
          spatial.setCullHint(CullHint.Never); // always drawn
          - +

          See also

            -
          • Optimization – The GeometryBatchFactory class batches several Geometries into meshes with each their own texture.
            +
          • Optimization ??? The GeometryBatchFactory class batches several Geometries into meshes with each their own texture.
          • -
          • Traverse SceneGraph – Find any Node or Geometry in the scenegraph.
            +
          • Traverse SceneGraph ??? Find any Node or Geometry in the scenegraph.
          @@ -273,5 +273,5 @@ Example:
          - +

          view online version

          \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/swing_canvas.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/swing_canvas.html index a8a423336..46c7f135d 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/swing_canvas.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/swing_canvas.html @@ -15,7 +15,7 @@ This can be useful when you create some sort of interactive 3D viewer with a use
          • You can use Swing components (frame, panels, menus, controls) next to your jME3 game.
          • -
          • The NetBeans GUI builder is compatible with the jMonkeyEngine; you can use it it to lay out the Swing GUI frame, and then add() the jME canvas into it. Install the GUI builder via Tools → Plugins → Available Plugins.
            +
          • The NetBeans GUI builder is compatible with the jMonkeyEngine; you can use it it to lay out the Swing GUI frame, and then add() the jME canvas into it. Install the GUI builder via Tools ??? Plugins ??? Available Plugins.
          @@ -79,7 +79,7 @@ In the SwingCanvasTest's main() method, create a queued runnable(). It will

          -

          Note that you have to use app.enqueue() when modifying objects in the scene from the AWT Event Queue like you have to use java.awt.EventQueue.invokeLater() from other threads (e.g. the update loop) when changing swing elements. This can get hairy quickly if you don’t have a proper threading model planned so you might want to use NiftyGUI as it is embedded in the update loop thread and is also cross-platform compatible (e.g. android etc.). +

          Note that you have to use app.enqueue() when modifying objects in the scene from the AWT Event Queue like you have to use java.awt.EventQueue.invokeLater() from other threads (e.g. the update loop) when changing swing elements. This can get hairy quickly if you don???t have a proper threading model planned so you might want to use NiftyGUI as it is embedded in the update loop thread and is also cross-platform compatible (e.g. android etc.).

          @@ -134,7 +134,7 @@ window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          -We create a standard JPanel inside the JFrame. Give it any Layout you wish – here we use a simple Flow Layout. Where the code sample says "Some Swing Component", this is where you add your buttons and controls.
          +We create a standard JPanel inside the JFrame. Give it any Layout you wish ??? here we use a simple Flow Layout. Where the code sample says "Some Swing Component", this is where you add your buttons and controls.

          The important step is to add() the canvas component into the panel, like all the other Swing components. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html index 84487f420..2868d86aa 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html @@ -125,7 +125,7 @@ When you "slap" a texture on a mesh, the whole mesh looks the same. Fo

          -The default material for TerraMonkey is TerrainLighting.j3md. This material combines several texture maps to produce the final custom texture. Remember, Diffuse Maps are the main textures that define the look; optionally, each Diffuse Map can be enhanced with a Normal Map; Alpha Maps describe the opacity of each Diffuse Map used (one color –red, green, blue, or alpha– stands for one Diffuse Map's opacity); Glow and Specular Maps define optional effects. +The default material for TerraMonkey is TerrainLighting.j3md. This material combines several texture maps to produce the final custom texture. Remember, Diffuse Maps are the main textures that define the look; optionally, each Diffuse Map can be enhanced with a Normal Map; Alpha Maps describe the opacity of each Diffuse Map used (one color ???red, green, blue, or alpha??? stands for one Diffuse Map's opacity); Glow and Specular Maps define optional effects.

          @@ -163,7 +163,7 @@ Here are the names of TerrainLighting.j3md's material properties:

        • DiffuseMap_4, DiffuseMap_4_scale, NormalMap_4
        • -
        • +
        • ???
        • DiffuseMap_11, DiffuseMap_11_scale, NormalMap_11
        • @@ -243,7 +243,7 @@ You can hand-paint Alpha, Diffuse, Glow, and Specular maps in a drawing program,

          -This example shows the simpler material definition Terrain.j3md, which only supports 1 Alpha Map, 3 Diffuse Maps, 3 Normal Maps, and does not support Phong illumination. It makes the exmaple shorter – TerrainLighting.j3md works accordingly (The list of material properties see above. Links to extended sample code see above.) +This example shows the simpler material definition Terrain.j3md, which only supports 1 Alpha Map, 3 Diffuse Maps, 3 Normal Maps, and does not support Phong illumination. It makes the exmaple shorter ??? TerrainLighting.j3md works accordingly (The list of material properties see above. Links to extended sample code see above.)

          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain_collision.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain_collision.html index 96e65c45a..fbcc2f406 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain_collision.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain_collision.html @@ -205,7 +205,7 @@ public class HelloTerrainCollision extends SimpleApplication }

          -To try this code, create a New Project → JME3 → BasicGame using the default settings. Paste the sample code over the pregenerated Main.java class. Chnage the package to "mygame" if necessary. Open the Project Properties, Libraries, and add the jme3-test-data library to make certain you have all the files. +To try this code, create a New Project ??? JME3 ??? BasicGame using the default settings. Paste the sample code over the pregenerated Main.java class. Chnage the package to "mygame" if necessary. Open the Project Properties, Libraries, and add the jme3-test-data library to make certain you have all the files.

          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/update_loop.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/update_loop.html index bda54b91d..8a002ac6e 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/update_loop.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/update_loop.html @@ -15,19 +15,19 @@ Some usage examples: Here you remote-control NPCs (computer controlled character To let you see the main update loop in context, understand that the SimpleApplication does the following:

            -
          • Initialization – Execute simpleInitApp() method once.
            +
          • Initialization ??? Execute simpleInitApp() method once.
          • Main Update Loop
              -
            1. Input listeners respond to mouse clicks and keyboard presses – Input handling
              +
            2. Input listeners respond to mouse clicks and keyboard presses ??? Input handling
            3. Update game state:
                -
              1. Update overall game state – Execute Application States
                +
              2. Update overall game state ??? Execute Application States
              3. -
              4. User code update – Execute simpleUpdate() method
                +
              5. User code update ??? Execute simpleUpdate() method
              6. -
              7. Logical update of entities – Execute Custom Controls
                +
              8. Logical update of entities ??? Execute Custom Controls
            4. @@ -37,7 +37,7 @@ To let you see the main update loop in context, understand that the SimpleApplic
            5. Scene rendering.
            6. -
            7. User code rendering – Execute simpleRender() method.
              +
            8. User code rendering ??? Execute simpleRender() method.
          • @@ -45,7 +45,7 @@ To let you see the main update loop in context, understand that the SimpleApplic -
          • Quit – If user requests exit(), execute cleanup() and destroy().
            +
          • Quit ??? If user requests exit(), execute cleanup() and destroy().
            The jME window closes and the loop ends.
          @@ -57,7 +57,7 @@ The jME window closes and the loop ends.

          -In a trivial SimpleApplication (such as a Hello World tutorial), all code is either in the simpleInitApp() (initialization) or simpleUpdate() (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't need to load the whole scene at once, and you don't need to run all conditionals tests all the time. +In a trivial SimpleApplication (such as a Hello World tutorial), all code is either in the simpleInitApp() (initialization) or simpleUpdate() (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't need to load the whole scene at once, and you don't need to run all conditionals tests all the time.

          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/vehicles.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/vehicles.html index b70f7b472..3cc321bb0 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/vehicles.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/vehicles.html @@ -126,7 +126,7 @@ Finally we add the behaviour (VehicleControl) to the visible Geometry (node).

          vehicleNode.addControl(vehicle);

          -We configure the physical properties of the vehicle's suspension: Compresion, Damping, Stiffness, and MaxSuspenionForce. Picking workable values for the wheel suspension can be tricky – for background info have a look at these . For now, let's work with the following values: +We configure the physical properties of the vehicle's suspension: Compresion, Damping, Stiffness, and MaxSuspenionForce. Picking workable values for the wheel suspension can be tricky ??? for background info have a look at these . For now, let's work with the following values:

          float stiffness = 60.0f;//200=f1 car
           float compValue = .3f; //(should be lower than damp)
          @@ -154,17 +154,17 @@ We create four wheel Geometries and add them to the vehicle. Our wheel geometrie
           The addWheel() method sets following properties:
           

            -
          • Vector3f connectionPoint – Coordinate where the suspension connects to the chassis (internally, this is where the Ray is casted downwards).
            +
          • Vector3f connectionPoint ??? Coordinate where the suspension connects to the chassis (internally, this is where the Ray is casted downwards).
          • -
          • Vector3f direction – Wheel direction is typically a (0,-1,0) vector.
            +
          • Vector3f direction ??? Wheel direction is typically a (0,-1,0) vector.
          • -
          • Vector3f axle – Axle direction is typically a (-1,0,0) vector.
            +
          • Vector3f axle ??? Axle direction is typically a (-1,0,0) vector.
          • -
          • float suspensionRestLength – Suspension rest length in world units
            +
          • float suspensionRestLength ??? Suspension rest length in world units
          • -
          • float wheelRadius – Wheel radius in world units
            +
          • float wheelRadius ??? Wheel radius in world units
          • -
          • boolean isFrontWheel – Whether this wheel is one of the steering wheels.
            +
          • boolean isFrontWheel ??? Whether this wheel is one of the steering wheels.
            Front wheels are the ones that rotate visibly when the vehicle turns.
          @@ -187,7 +187,7 @@ We create a Cylinder mesh shape that we use to create the four visible wheel geo
          Cylinder wheelMesh = new Cylinder(16, 16, radius, radius * 0.6f, true);

          -For each wheel, we create a Node and a Geometry. We attach the Cylinder Geometry to the Node. We rotate the wheel by 90° around the Y axis. We set a material to make it visible. Finally we add the wheel (plus its properties) to the vehicle. +For each wheel, we create a Node and a Geometry. We attach the Cylinder Geometry to the Node. We rotate the wheel by 90?? around the Y axis. We set a material to make it visible. Finally we add the wheel (plus its properties) to the vehicle.

          Node node1 = new Node("wheel 1 node");
           Geometry wheels1 = new Geometry("wheel 1", wheelMesh);
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/walking_character.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/walking_character.html
          index c8f25ac78..5829390ba 100644
          --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/walking_character.html
          +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/walking_character.html
          @@ -21,11 +21,7 @@ Other games however require a third-person perspective of the character: In thes
           Several related code samples can be found here:
           

            -
          • (third-person view)
            -
              -
            • Uses also
              -
            • -
            +
          • (third-person view)
          • (third-person view)
              @@ -42,10 +38,11 @@ Several related code samples can be found here:

              The code in this tutorial is a combination of these samples. +

              - +

              CharacterControl

              @@ -101,19 +98,19 @@ Default: 1, because for characters and vehicles, up is typically along the Y axi Use setWalkDirection(Vector3f.ZERO) to stop a directional motion.
              - +

              For best practices on how to use setWalkDirection(), see the Navigation Inputs example below.

              - +

              Walking Character Demo

              - +

              Code Skeleton

              public class WalkingCharacterDemo extends SimpleApplication
              @@ -135,7 +132,7 @@ For best practices on how to use setWalkDirection(), see the Naviga
                 public void onAnimChange(AnimControl control, AnimChannel channel, String animName) { }
              - +

              Overview

              @@ -165,7 +162,7 @@ To create a walking character:
              - +

              Activate Physics

              private BulletAppState bulletAppState;
              @@ -178,7 +175,7 @@ public void simpleInitApp() {
               }
              - +

              Initialize the Scene

              @@ -221,7 +218,7 @@ Also, add a light source to be able to see the scene. rootNode.addLight(light);
          - +

          Create the Animated Character

          @@ -263,7 +260,7 @@ public void simpleInitApp() {

          - +

          Set Up AnimControl and AnimChannels

          @@ -291,7 +288,7 @@ The attackChannel only controls one arm, while the walking channels controls the

          - +

          Add ChaseCam / CameraNode

          private ChaseCamera chaseCam;
          @@ -305,7 +302,7 @@ public void simpleInitApp() {
             ...
          - +

          Handle Navigation

          @@ -428,5 +425,5 @@ public void onAnimChange(AnimControl control, AnimChannel channel, String an
          - +

          view online version

          \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/water.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/water.html index 11f064e5c..49d68d1cf 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/water.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/water.html @@ -59,7 +59,7 @@ To achieve a water effect, JME3 uses shaders and a special material, Commo -
        • (For the underwater caustics effect, we use splatted textures. – WIP/TODO)
          +
        • (For the underwater caustics effect, we use splatted textures. ??? WIP/TODO)
        • @@ -208,7 +208,7 @@ waterPlane.setLocalTranslation(-5, 0, 5); waterPlane.setMaterial(waterProcessor.getMaterial());

          -You can offer a switch to set the water Material to a static texture – for users with slow PCs. +You can offer a switch to set the water Material to a static texture ??? for users with slow PCs.

          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html index 4939f7679..5e73690f2 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html @@ -23,7 +23,7 @@ This is a draft of a feature that is work in progress. If you have questions or
        • (Optional) Install NBAndroid in the jMonkeyEngine SDK:
            -
          1. Go to Tools→Plugins→Available Plugins.
            +
          2. Go to Tools???Plugins???Available Plugins.
          3. Install the "Android" plugin.
          4. @@ -199,9 +199,9 @@ During build, the libraries and main jar file from the main project are copied t Activating the nbandroid plugin in the jMonkeyEngine SDK is optional, but recommended. You do not need the nbandroid plugin for Android support to work, however nbandroid will not interfere and will in fact allow you to edit the android source files and project more conveniently. To be able to edit, extend and code android-specific code in Android projects, install NBAndroid from the update center:

              -
            1. Open Tools→Plugins→Settings
              +
            2. Open Tools???Plugins???Settings
            3. -
            4. Go to Tools→Plugins→Available Plugins.
              +
            5. Go to Tools???Plugins???Available Plugins.
            6. Install the NbAndroid plugin. (Will show up as Android)
            7. @@ -220,7 +220,7 @@ Activating the nbandroid plugin in the jMonkeyEngine SDK
            8. Inputs: Devise an alternate control scheme that works for Android users (e.g. using com.jme3.input.controls.TouchListener). This mobile scheme is likely quite different from the desktop scheme.
            9. -
            10. Effects: Android devices do no support 3D features as well as PCs – or even not at all. This restriction includes post-processor filters (depth-of-field blur, bloom, light scattering, cartoon, etc), drop shadows, water effects, 3D Audio. Be prepared that these effects will (at best) slow down the application or (in the worst case) not work at all. Provide the option to switch to a low-fi equivalent!
              +
            11. Effects: Android devices do no support 3D features as well as PCs ??? or even not at all. This restriction includes post-processor filters (depth-of-field blur, bloom, light scattering, cartoon, etc), drop shadows, water effects, 3D Audio. Be prepared that these effects will (at best) slow down the application or (in the worst case) not work at all. Provide the option to switch to a low-fi equivalent!
            12. Nifty GUI: Use different base UI layout XML files for the mobile version of your app to account for a different screen resolution.
            13. @@ -280,11 +280,13 @@ Note that you have to build the whole project once to make (new) classes in the

              - +There be no proper guidanceof runing on androidf The SDK will later provide tools to adapt the material and other graphics settings of the Android deployment version automatically.

                +
              • +
              • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html index 7cf686bd2..05454e969 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_animation.html @@ -288,7 +288,7 @@ Make a mouse click trigger another animation sequence!

                -Open the skeleton.xml file in a text editor of your choice. You don't have to be able to read or write these xml files (Blender does that for you) – but it is good to know how skeletons work. "There's no magic to it!" +Open the skeleton.xml file in a text editor of your choice. You don't have to be able to read or write these xml files (Blender does that for you) ??? but it is good to know how skeletons work. "There's no magic to it!"

                • Note how the bones are numbered and named. All names of animated models follow a naming scheme.
                  diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_asset.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_asset.html index 76747cf04..d4660909a 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_asset.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_asset.html @@ -9,7 +9,7 @@ Next:

                  -In this tutorial we will learn to load 3-D models and text into the scene graph, using the jME asset manager. You also learn how to arrive at the correct paths, and which file formats to use. +In this tutorial we will learn to load 3D models and text into the scene graph, using the jME Asset Manager. You will also learn how to determine the correct paths, and which file formats to use.

                  @@ -17,12 +17,12 @@ In this tutorial we will learn to load 3-D models and text into the scene graph,

                  -

                  To use the example assets in a new jMonkeyEngine SDK project, right-click your project, select "Properties", go to "Libraries", press "Add Library" and add the "jme3-test-data" library. +

                  Trouble finding the files to run this sample? To get the assets (3D models) used in this example, add the included jme3-test-data.jar to your classpath. In project created with the jMonkeyEngine SDK (recommended), simply right-click your project, choose "Properties", go to "Libraries", press "Add Library" and add the preconfigured "jme3-test-data" library.

                  - +

                  Code Sample

                  package jme3test.helloworld;
                  @@ -93,27 +93,27 @@ Build and run the code sample. You should see a green Ninja with a colorful teap
                   

                  - +

                  The Asset Manager

                  -JME3 comes with a handy asset manager that helps you keep your assets organized. Project assets are media files such as models, materials, textures, scenes, shaders, sounds, and fonts. -The Asset manager can load files from: +By game assets we mean all multi-media files, such as models, materials, textures, whole scenes, custom shaders, music and sound files, and custom fonts. JME3 comes with a handy AssetManager object that helps you access your assets. +The AssetManager can load files from:

                  • the current classpath (the top level of your project directory),
                  • the assets directory of your project, and
                  • -
                  • optionally, custom paths.
                    +
                  • optionally, custom paths that you register.

                  -This is our recommended directory structure for storing assets: +The following is the recommended directory structure for storing assets in your project directoy:

                  MyGame/assets/Interface/
                   MyGame/assets/MatDefs/
                  @@ -123,16 +123,16 @@ MyGame/assets/Scenes/
                   MyGame/assets/Shaders/
                   MyGame/assets/Sounds/
                   MyGame/assets/Textures/
                  -MyGame/build.xml
                  -MyGame/src/...
                  +MyGame/build.xml            <-- Ant build script
                  +MyGame/src/...              <-- Java sources go here
                   MyGame/...

                  -This is just a suggested best practice, you can name the directories in the assets directory what ever you like. +This is just a suggested best practice, and it's what you get by default when creating a new Java project in the jMokeyEngine SDK. You can create an assets directory and technically name the subdirectories whatever you like.

                  - +

                  Loading Textures

                  @@ -156,13 +156,13 @@ In this case, you +

                  Loading Text and Fonts

                  -This example displays the text "Hello World" in the default font at the bottom edge of the window. You attach text to the guiNode – this is a special node for flat (orthogonal) display elements. You display text to show the game score, player health, etc. +This example displays the text "Hello World" in the default font at the bottom edge of the window. You attach text to the guiNode ??? this is a special node for flat (orthogonal) display elements. You display text to show the game score, player health, etc. The following code sample goes into the simpleInitApp() method.

                  // Display a line of text with a default font
                  @@ -179,7 +179,7 @@ guiNode.attachChild(helloText);

                  - +

                  Loading a Model

                  @@ -199,11 +199,11 @@ sun.setDirection(new Vector3f(-0.1f, -0.7f, -1.0f).normalizeLocal rootNode.addLight(sun);

                  -Note that you do no need to create a Material if you exported the model with a material. Remember to add a light source, as shown, otherwise the material (and the whole model) is not visible! +Note that you do not need to create a Material if you exported the model with a material. Remember to add a light source, as shown, otherwise the material (and the whole model) is not visible!

                  - +

                  Loading Assets From Custom Paths

                  @@ -233,7 +233,7 @@ JME3 offers ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, and UrlLo

                  - +

                  Creating Models and Scenes

                  @@ -272,7 +272,7 @@ If you use Blender, export your models as Ogre +

                  Model File Formats

                  @@ -317,7 +317,7 @@ If your executable gets a runtime exception, make sure you have converted all mo

                  - +

                  Loading Models and Scenes

                  @@ -346,9 +346,9 @@ rootNode.attachChild(scene);
                  - +
                  - +

                  Excercise - How to Load Assets

                  @@ -415,7 +415,7 @@ Earlier in this tutorial, you loaded scenes and models from the asset directory. rootNode.attachChild(gameLevel);

                  - Note that the path is relative to the assets/… directory. + Note that the path is relative to the assets/??? directory.

                • @@ -443,7 +443,7 @@ Here is a third method you must know, loading a scene/model from a .j3o file: rootNode.attachChild(gameLevel);

                  - Again, note that the path is relative to the assets/… directory. + Again, note that the path is relative to the assets/??? directory.

              @@ -453,7 +453,7 @@ Again, you should see the Ninja+wall+teapot standing in a town.
            - +

            Conclusion

            @@ -497,5 +497,5 @@ Let's add some action to the scene and continue with the +

            view online version

            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html index fd70259d3..2528d898a 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html @@ -116,7 +116,7 @@ When you run the sample, you should see a blue cube. You should hear a nature-li

            -In the initSimpleApp() method, you create a simple blue cube geometry called player and attach it to the scene – this just arbitrary sample content, so you see something when running the audio sample. +In the initSimpleApp() method, you create a simple blue cube geometry called player and attach it to the scene ??? this just arbitrary sample content, so you see something when running the audio sample.

            @@ -176,11 +176,15 @@ Here you make audio_nature a positional sound that comes from a certain place. F ...

            -Tip: Attach AudioNodes to the rootNode like all nodes, to make certain moving nodes stay up-to-date. If you don't attach them, they are still audible and you don't get an error message. But 3D sound will not work as expected if the nodes are not updated regularly. +Tip: Attach AudioNodes into the scene graph like all nodes, to make certain moving nodes stay up-to-date. If you don't attach them, they are still audible and you don't get an error message but 3D sound will not work as expected. AudioNodes can be attached directly to the root node or they can be attached inside a node that is moving through the scene and both the AudioNode and the 3d position of the sound it is generating will move accordingly. +

            + +

            +Tip: playInstance always plays the sound from the position of the AudioNode so multiple gunshots from one gun (for example) can be generated this way, however if multiple guns are firing at once then an AudioNode is needed for each one.

            - +

            Triggering Sound

            @@ -212,7 +216,7 @@ Since you want to be able to shoot fast repeatedly, so you do not want to wait f

            - +

            Ambient or Situational?

            @@ -261,7 +265,7 @@ Apart from the looping boolean, another difference is where play().playIns
            - +

            Buffered or Streaming?

            @@ -284,7 +288,7 @@ Note that streamed sounds can not loop (i.e. setLooping will not work as you exp

            - +

            Play() or PlayInstance()?

            @@ -301,9 +305,9 @@ Note that streamed sounds can not loop (i.e. setLooping will not work as you exp
            The same sound cannot play twice at the same time.The same sounds can play multiple times and overlap.
            - +
            - +

            Your Ear in the Scene

            @@ -325,7 +329,7 @@ If you don't do that, the results of 3D audio will be quite random.

            - +

            Global, Directional, Positional?

            @@ -352,7 +356,7 @@ In short, you must choose in every situation whether it makes sense for a sound

            - +

            Conclusion

            @@ -387,5 +391,5 @@ See also:
            - +

            view online version

            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html index 3df89f1e4..4909f341d 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_collision.html @@ -249,7 +249,7 @@ As usual, you initialize the game in the simpleInitApp() method.
          5. The auxiliary method setUpLights() adds your light sources.
          6. -
          7. The auxiliary method setUpKeys() configures input mappings–we will look at it later.
            +
          8. The auxiliary method setUpKeys() configures input mappings???we will look at it later.
          @@ -273,7 +273,7 @@ For the scene, you load the sceneModel from a zip file, and adjust sceneModel.setLocalScale(2f);

          -The file town.zip is included as a sample model in the JME3 sources – you can . (Optionally, use any OgreXML scene of your own.) For this sample, place the zip file in the application's top level directory (that is, next to src/, assets/, build.xml). +The file town.zip is included as a sample model in the JME3 sources ??? you can . (Optionally, use any OgreXML scene of your own.) For this sample, place the zip file in the application's top level directory (that is, next to src/, assets/, build.xml).

              CollisionShape sceneShape =
                 CollisionShapeFactory.createMeshShape((Node) sceneModel);
          @@ -307,7 +307,7 @@ To use collision detection, you add a RigidBodyControl to the sceneModel
           
          -A first-person player is typically invisible. When you use the default flyCam as first-person cam, it does not even test for collisons and runs through walls. This is because the flyCam control does not have any physical shape assigned. In this code sample, you represent the first-person player as an (invisible) physical shape. You use the WASD keys to steer this physical shape around, while the physics engine manages for you how it walks along solid walls and on solid floors and jumps over solid obstacles. Then you simply make the camera follow the walking shape's location – and you get the illusion of being a physical body in a solid environment seeing through the camera.
          +A first-person player is typically invisible. When you use the default flyCam as first-person cam, it does not even test for collisons and runs through walls. This is because the flyCam control does not have any physical shape assigned. In this code sample, you represent the first-person player as an (invisible) physical shape. You use the WASD keys to steer this physical shape around, while the physics engine manages for you how it walks along solid walls and on solid floors and jumps over solid obstacles. Then you simply make the camera follow the walking shape's location ??? and you get the illusion of being a physical body in a solid environment seeing through the camera.
           

          @@ -349,7 +349,7 @@ Apart from step height and character size, the CharacterControl let

              player.setPhysicsLocation(new Vector3f(0, 10, 0));

          -Finally we put the player in its starting position and update its state – remember to use setPhysicsLocation() instead of setLocalTranslation() now, since you are dealing with a physical object. +Finally we put the player in its starting position and update its state ??? remember to use setPhysicsLocation() instead of setLocalTranslation() now, since you are dealing with a physical object.

          @@ -365,7 +365,7 @@ Remember, in physical games, you must register all solid objects (usually the ch bulletAppState.getPhysicsSpace().add(player);

          -The invisible body of the character just sits there on the physical floor. It cannot walk yet – you will deal with that next. +The invisible body of the character just sits there on the physical floor. It cannot walk yet ??? you will deal with that next.

          @@ -379,7 +379,7 @@ The default camera controller cam is a third-person camera. JME3 al

          -However, you must redefine how walking (camera movement) is handled for physics-controlled objects: When you navigate a non-physical node (e.g. the default flyCam), you simply specify the target location. There are no tests that prevent the flyCam from getting stuck in a wall! When you move a PhysicsControl, you want to specify a walk direction instead. Then the PhysicsSpace can calculate for you how far the character can actually move in the desired direction – or whether an obstacle prevents it from going any further. +However, you must redefine how walking (camera movement) is handled for physics-controlled objects: When you navigate a non-physical node (e.g. the default flyCam), you simply specify the target location. There are no tests that prevent the flyCam from getting stuck in a wall! When you move a PhysicsControl, you want to specify a walk direction instead. Then the PhysicsSpace can calculate for you how far the character can actually move in the desired direction ??? or whether an obstacle prevents it from going any further.

          @@ -409,7 +409,7 @@ In the simpleInitApp() method, you re-configure the familiar WASD i }

          -You can move this block of code into an auxiliary method setupKeys() and call this method from simpleInitApp()– to keep the code more readable. +You can move this block of code into an auxiliary method setupKeys() and call this method from simpleInitApp()??? to keep the code more readable.

          @@ -521,7 +521,7 @@ Related info:
        • To learn more about complex physics scenes, where several mobile physical objects bump into each other, read Hello Physics.
        • -
        • FYI, there are simpler collision detection solutions without physics, too. Have a look at (and SphereMotionAllowedListener.java).
          +
        • FYI, there are simpler collision detection solutions without physics, too. Have a look at .
        • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html index d7d9ade58..d4f45fae6 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_effects.html @@ -247,7 +247,7 @@ For fire, is's a gradient from yellow to red.

          -Create a grayscale texture in a graphic editor, and save it to your assets/Effects directory. If you split up one image file into x*y animation steps, make sure each square is of equal size–just as you see in the examples here. +Create a grayscale texture in a graphic editor, and save it to your assets/Effects directory. If you split up one image file into x*y animation steps, make sure each square is of equal size???just as you see in the examples here.

          @@ -264,11 +264,11 @@ A particle system is always centered around an emitter. Use the setShape() method to change the EmitterShape:

            -
          • EmitterPointShape(Vector3f.ZERO) – particles emit from a point (default)
            +
          • EmitterPointShape(Vector3f.ZERO) ??? particles emit from a point (default)
          • -
          • EmitterSphereShape(Vector3f.ZERO,2f) – particles emit from a sphere-sized area
            +
          • EmitterSphereShape(Vector3f.ZERO,2f) ??? particles emit from a sphere-sized area
          • -
          • EmitterBoxShape(new Vector3f(-1f,-1f,-1f),new Vector3f(1f,1f,1f)) – particles emit from a box-sized area
            +
          • EmitterBoxShape(new Vector3f(-1f,-1f,-1f),new Vector3f(1f,1f,1f)) ??? particles emit from a box-sized area
          @@ -366,7 +366,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 . Let's shoot some cannon balls at a brick wall! +Now you move on to another exciting chapter ??? the simulation of . Let's shoot some cannon balls at a brick wall!


          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html index 65dc18e69..3d03393b5 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html @@ -168,7 +168,7 @@ Now you need to register your trigger mappings. inputManager.addListener(analogListener, new String[]{"Left", "Right", "Rotate"});

          -This code goes into the simpleInitApp() method. But since we will likely add many keybindings, we extract these lines and wrap them in an auxiliary method, initKeys(). The initKeys() method is not part of the Input Controls interface – you can name it whatever you like. Just don't forget to call your method from the initSimpleApp() method. +This code goes into the simpleInitApp() method. But since we will likely add many keybindings, we extract these lines and wrap them in an auxiliary method, initKeys(). The initKeys() method is not part of the Input Controls interface ??? you can name it whatever you like. Just don't forget to call your method from the initSimpleApp() method.

          @@ -301,7 +301,7 @@ In order to see the total time that a key has been pressed for then the incoming

          -Mappings registered to the ActionListener are digital either-or actions – "Pressed or released? On or off?" +Mappings registered to the ActionListener are digital either-or actions ??? "Pressed or released? On or off?"

          • Parameters:
            @@ -318,7 +318,7 @@ Mappings registered to the ActionListener are digital either-or

            -Tip: It's very common that you want an action to be only triggered once, in the moment when the key is released. For instance when opening a door, flipping a boolean state, or picking up an item. To achieve that, you use an ActionListener and test for … && !keyPressed. For an example, look at the Pause button code: +Tip: It's very common that you want an action to be only triggered once, in the moment when the key is released. For instance when opening a door, flipping a boolean state, or picking up an item. To achieve that, you use an ActionListener and test for ??? && !keyPressed. For an example, look at the Pause button code:

                  if (name.equals("Pause") && !keyPressed) {
                     isRunning = !isRunning;
            diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html
            index 61e73f22a..d764d91b2 100644
            --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html
            +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_main_event_loop.html
            @@ -71,7 +71,7 @@ Compared to our previous code samples you note that the player Geometry is now a
             

            -Now have a closer look at the simpleUpdate() method – this is the update loop. +Now have a closer look at the simpleUpdate() method ??? this is the update loop.

            • The player.rotate(0, 2*tpf, 0); line changes the rotation of the player object.
              diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_material.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_material.html index c7c926770..97a15a51e 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_material.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_material.html @@ -109,11 +109,11 @@ public class HelloMaterial extends SimpleApplication { You should see

                -
              • Left – A cube with a brown monkey texture.
                +
              • Left ??? A cube with a brown monkey texture.
              • -
              • Middle – A translucent monkey picture in front of a shiny rock.
                +
              • Middle ??? A translucent monkey picture in front of a shiny rock.
              • -
              • Right – A cube with a purple monkey texture.
                +
              • Right ??? A cube with a purple monkey texture.
              @@ -128,7 +128,7 @@ Move around with the WASD keys to have a closer look at the translucency, and th

              -Typically you want to give objects in your scene textures: It can be rock, grass, brick, wood, water, metal, paper… A texture is a normal image file in JPG or PNG format. In this example, you create a box with a simple unshaded Monkey texture as material. +Typically you want to give objects in your scene textures: It can be rock, grass, brick, wood, water, metal, paper??? A texture is a normal image file in JPG or PNG format. In this example, you create a box with a simple unshaded Monkey texture as material.

                  /** A simple textured cube. */
                   Box boxshape1 = new Box(new Vector3f(-3f,1.1f,0f), 1f,1f,1f);
              @@ -219,7 +219,7 @@ The ColorMap is the material layer where textures go. This 
              +
               

              Exercise 2: Bumpiness and Shininess

              @@ -400,7 +400,7 @@ Go back to the bumpy rock sample above:
              - +

              Conclusion

              @@ -450,5 +450,5 @@ See also
              - +

              view online version

              \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html index 8822a7ae0..3e8a482db 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html @@ -152,7 +152,7 @@ Every JME3 application has a rootNode: Your game automatically inherits the Purpose: A Geometry stores an object's looks. A Node groups Geometries and other Nodes together. - Examples: A box, a sphere, a player, a building, a piece of terrain, a vehicle, missiles, NPCs, etc… The rootNode, a floor node grouping several terrains, a custom vehicle-with-passengers node, a player-with-weapon node, an audio node, etc… + Examples: A box, a sphere, a player, a building, a piece of terrain, a vehicle, missiles, NPCs, etc??? The rootNode, a floor node grouping several terrains, a custom vehicle-with-passengers node, a player-with-weapon node, an audio node, etc??? @@ -169,7 +169,7 @@ What happens in the code snippet? You use the simpleInitApp() metho
              1. You create the first box Geometry.
                  -
                • Create a Box shape with a radius of (1,1,1), that makes the box 2x2x2 world units big.
                  +
                • Create a Box shape with extents of (1,1,1), that makes the box 2x2x2 world units big.
                • Position the box at (1,-1,1) using the move() method. (Don't change the Vector3f.ZERO unless you want to change the center of rotation)
                • @@ -238,14 +238,14 @@ If you run the app with only the code up to here, you see two cubes: A red cube
                • Rotate the pivot node.
                          pivot.rotate( 0.4f , 0.4f , 0.0f );

                  - If you run the app now, you see two boxes on top of each other – both tilted at the same angle. + If you run the app now, you see two boxes on top of each other ??? both tilted at the same angle.

              - +

              What is a Pivot Node?

              @@ -264,12 +264,12 @@ You can transform (e.g. rotate) Geometries around their own center, or around a
            - +

            How do I Populate the Scenegraph?

            - +
            Task…? Solution! Task???? Solution!
            Create a Spatial Create a Mesh shape, wrap it into a Geometry, and give it a Material. For example:
            Box mesh = new Box(Vector3f.ZERO, 1, 1, 1); // a cuboid default mesh
            @@ -298,9 +298,9 @@ thing.setMaterial(mat);
            Specify what should be loaded at the start Everything you initialize and attach to the rootNode in the simpleInitApp() method is part of the scene at the start of the game.
            - +
            - +

            How do I Transform Spatials?

            @@ -324,7 +324,7 @@ To move a Spatial to specific coordinates, such as (0,40.2f,-2), use: < +right -left+up -down+forward -backward
            -
            +
            @@ -336,13 +336,13 @@ To scale a Spatial 10 times longer, one tenth the height, and keep the same widt
            Scaling resizes Spatials X-axis Y-axis Z-axis
            lengthheightwidth
            -
            +
            Rotation turns Spatials X-axis Y-axis Z-axis
            3-D rotation is a bit tricky (learn details here). In short: You can rotate around three axes: Pitch, yaw, and roll. You can specify angles in degrees by multiplying the degrees value with FastMath.DEG_TO_RAD.
            -To roll an object 180° around the z axis:
            thing.rotate( 0f , 0f , 180*FastMath.DEG_TO_RAD );
            +To roll an object 180?? around the z axis:
            thing.rotate( 0f , 0f , 180*FastMath.DEG_TO_RAD );

            Tip: If your game idea calls for a serious amount of rotations, it is worth looking into quaternions, a data structure that can combine and store rotations efficiently. @@ -352,9 +352,9 @@ To roll an object 180° around the z axis:

            thing.rotate( 0f , 0f , 180*
             
            pitch = nodding your headyaw = shaking your headroll = cocking your head
            - + - +

            How do I Troubleshoot Spatials?

            @@ -384,9 +384,9 @@ Did you rotate around the right axis? A Geometry has an unexpected Color or Material. Did you reuse a Material from another Geometry and have inadvertently changed its properties? (If so, consider cloning it: mat2 = mat.clone(); )
            - + - +

            How do I Add Custom Data to Spatials?

            @@ -415,11 +415,11 @@ To read this Node's id number elsewhere, you would use:

            -By using different Strings keys (here the key is pivot id), you can get and set several values for whatever data the Spatial needs to carry. When you start writing your game, you might add a fuel value to a car node, speed value to an airplane node, or number of gold coins to a player node, and much more. +By using different Strings keys (here the key is pivot id), you can get and set several values for whatever data the Spatial needs to carry. When you start writing your game, you might add a fuel value to a car node, speed value to an airplane node, or number of gold coins to a player node, and much more. However, one should note that only custom objects that implements Savable can be passed.

            - +

            Conclusion

            @@ -445,5 +445,5 @@ Since standard shapes like spheres and boxes get old fast, continue with the nex
            - +

            view online version

            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_physics.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_physics.html index 1f506ffe3..081384713 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_physics.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_physics.html @@ -15,17 +15,17 @@ Do you remember the +

            RigidBodyControl: Floor

            @@ -493,7 +493,7 @@ This code sample does the following:
            - +

            Creating the Scene

            @@ -502,13 +502,13 @@ This code sample does the following: Let's have a quick look at the custom helper methods:

              -
            • initMaterial() – This method initializes all the materials we use in this demo.
              +
            • initMaterial() ??? This method initializes all the materials we use in this demo.
            • -
            • initWall() – A double loop that generates a wall by positioning brick objects: 15 rows high with 6 bricks per row. It's important to space the physical bricks so they do not overlap.
              +
            • initWall() ??? A double loop that generates a wall by positioning brick objects: 15 rows high with 6 bricks per row. It's important to space the physical bricks so they do not overlap.
            • -
            • initCrossHairs() – This method simply displays a plus sign that you use as crosshairs for aiming. Note that screen elements such as crosshairs are attached to the guiNode, not the rootNode!
              +
            • initCrossHairs() ??? This method simply displays a plus sign that you use as crosshairs for aiming. Note that screen elements such as crosshairs are attached to the guiNode, not the rootNode!
            • -
            • initInputs() – This method sets up the click-to-shoot action.
              +
            • initInputs() ??? This method sets up the click-to-shoot action.
            @@ -518,7 +518,7 @@ These methods are each called once from the simpleInitApp() method

            - +

            The Cannon Ball Shooting Action

            @@ -548,7 +548,7 @@ In the moment the cannonball appears in the scene, it flies off with the velocit

            - +

            Moving a Physical Spatial

            @@ -575,12 +575,12 @@ Learn more about static versus kinematic versus dynamic in the +

            Excercises

            - +

            Exercise 1: Debug Shapes

            @@ -597,7 +597,7 @@ Now you see the collisionShapes of the bricks and spheres, and the floor highlig

            - +

            Exercise 2: No Mo' Static

            @@ -607,7 +607,7 @@ What happens if you give a static node, such as the floor, a mass of more than 0

            - +

            Exercise 3: Behind the Curtain

            @@ -617,7 +617,7 @@ Fill your scene with walls, bricks, and cannon balls. When do you begin to see a

            -Popular AAA games use a clever mix of physics, animation and prerendered graphics to give you the illusion of a real, "physical" world. Think of your favorite video games and try to spot where and how the game designers trick you into believing that the whole scene is physical. For example, think of a building "breaking" into 4-8 parts after an explosion. The pieces most likely fly on predefined (so called kinematic) paths and are only replaced by dynamic Spatials after they touch the ground… Now that you start to implement game physics yourself, look behind the curtain! +Popular AAA games use a clever mix of physics, animation and prerendered graphics to give you the illusion of a real, "physical" world. Think of your favorite video games and try to spot where and how the game designers trick you into believing that the whole scene is physical. For example, think of a building "breaking" into 4-8 parts after an explosion. The pieces most likely fly on predefined (so called kinematic) paths and are only replaced by dynamic Spatials after they touch the ground??? Now that you start to implement game physics yourself, look behind the curtain!

            @@ -625,7 +625,7 @@ Using physics everywhere in a game sounds like a cool idea, but it is easily ove

            - +

            Conclusion

            @@ -635,7 +635,7 @@ You have learned how to activate the jBullet PhysicsSpace in an application by a

            -

            Congratulations! – You have completed the last beginner tutorial. Now you are ready to start combining what you have learned, to create a cool 3D game of your own. Show us what you can do, and feel free to share your demos, game videos, and screenshots on the ! +

            Congratulations! ??? You have completed the last beginner tutorial. Now you are ready to start combining what you have learned, to create a cool 3D game of your own. Show us what you can do, and feel free to share your demos, game videos, and screenshots on the !

            @@ -649,5 +649,5 @@ You have learned how to activate the jBullet PhysicsSpace in an application by a
            - +

            view online version

            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html index 9dbc42916..54032b8ed 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_picking.html @@ -13,7 +13,7 @@ Typical interactions in games include shooting, picking up objects, and opening

            -You can pick something by either pressing a key on the keyboard, or by clicking with the mouse. In either case, you identify the target by aiming a ray –a straight line– into the scene. This method to implement picking is called ray casting (which is not the same as ray tracing). +You can pick something by either pressing a key on the keyboard, or by clicking with the mouse. In either case, you identify the target by aiming a ray ???a straight line??? into the scene. This method to implement picking is called ray casting (which is not the same as ray tracing).

            @@ -438,7 +438,7 @@ Here are some tips:

            -Shooting boxes isn't very exciting – can you add code that loads and positions a model in the scene, and shoot at it? +Shooting boxes isn't very exciting ??? can you add code that loads and positions a model in the scene, and shoot at it?

            • Tip: You can use Spatial golem = assetManager.loadModel("Models/Oto/Oto.mesh.xml"); from the engine's jme3-test-data.jar.
              @@ -465,7 +465,7 @@ Change the code as follows to simulate the player picking up objects into the in
              • If your nodes use a lit Material (not "Unshaded.j3md"), also add a light to the guiNode.
              • -
              • Size units are pixels in the HUD, therefor a 2-wu cube is displayed only 2 pixels wide in the HUD. – Scale it bigger!
                +
              • Size units are pixels in the HUD, therefor a 2-wu cube is displayed only 2 pixels wide in the HUD. ??? Scale it bigger!
              • Position the nodes: The bottom left corner of the HUD is (0f,0f), and the top right corner is at (settings.getWidth(),settings.getHeight()).
              • @@ -495,9 +495,9 @@ You have learned how to use ray casting to solve the task of determining what ob Use your imagination from here:

                  -
                • In your game, the click can trigger any action on the identified Geometry: Detach it and put it into the inventory, attach something to it, trigger an animation or effect, open a door or crate, – etc.
                  +
                • In your game, the click can trigger any action on the identified Geometry: Detach it and put it into the inventory, attach something to it, trigger an animation or effect, open a door or crate, ??? etc.
                • -
                • In your game, you could replace the red mark with a particle emitter, add an explosion effect, play a sound, calculate the new score after each hit depending on what was hit – etc.
                  +
                • In your game, you could replace the red mark with a particle emitter, add an explosion effect, play a sound, calculate the new score after each hit depending on what was hit ??? etc.
                diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_simpleapplication.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_simpleapplication.html index 267e051fe..48d9ef7d7 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_simpleapplication.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_simpleapplication.html @@ -30,9 +30,9 @@ OK, let's get ready to create our first jMonkeyEngine3 application. In the jMonkeyEngine SDK:

                  -
                1. Choose File→New Project… from the main menu.
                  +
                2. Choose File???New Project??? from the main menu.
                3. -
                4. In the New Project wizard, select the template JME3→Basic Game. Click Next.
                  +
                5. In the New Project wizard, select the template JME3???Basic Game. Click Next.
                  1. Specify a project name, e.g. "HelloWorldTutorial"
                  2. @@ -70,7 +70,7 @@ In the jMonkeyEngine SDK:
                    1. Right-click the Source Packages node of your project.
                    2. -
                    3. Choose New…→Java Class to create a new file.
                      +
                    4. Choose New??????Java Class to create a new file.
                    5. Enter the class name: HelloJME3
                    6. @@ -166,7 +166,7 @@ Look at the first line. The HelloJME3.java class extends com.jme3.app.Simp }

            -Every JME3 game is an instance of com.jme3.app.SimpleApplication. The SimpleApplication class manages your 3D scene graph and automatically draws it to the screen – that is, in short, what a game engine does for you! +Every JME3 game is an instance of com.jme3.app.SimpleApplication. The SimpleApplication class manages your 3D scene graph and automatically draws it to the screen ??? that is, in short, what a game engine does for you!

            @@ -234,7 +234,7 @@ Look at rest of the code sample. The simpleInitApp() method is auto The initialization code of a blue cube looks as follows:

                public void simpleInitApp() {
            -        Box b = new Box(Vector3f.ZERO, 1, 1, 1); // create a 1x1x1 box shape at the origin
            +        Box b = new Box(Vector3f.ZERO, 1, 1, 1); // create a 2x2x2 box shape at the origin
                     Geometry geom = new Geometry("Box", b);  // create a cube geometry from the box shape
                     Material mat = new Material(assetManager,
                       "Common/MatDefs/Misc/Unshaded.j3md");  // create a simple material
            @@ -253,7 +253,7 @@ A typical JME3 game has the following initialization process:
             
          • You make objects appear in the scene by attaching them to the rootNode.
          • -
          • Examples: Load player, terrain, sky, enemies, obstacles, …, and place them in their start positions.
            +
          • Examples: Load player, terrain, sky, enemies, obstacles, ???, and place them in their start positions.
          @@ -263,7 +263,7 @@ A typical JME3 game has the following initialization process:
        • You set variables to their start values.
        • -
        • Examples: Set the score to 0, set health to 100%, …
          +
        • Examples: Set the score to 0, set health to 100%, ???
        • @@ -271,17 +271,17 @@ A typical JME3 game has the following initialization process:
          • The following input bindings are pre-configured:
              -
            • W,A,S,D keys – Move around in the scene
              +
            • W,A,S,D keys ??? Move around in the scene
            • -
            • Mouse movement and arrow keys – Turn the camera
              +
            • Mouse movement and arrow keys ??? Turn the camera
            • -
            • Escape key – Quit the game
              +
            • Escape key ??? Quit the game
          • Define your own additional keys and mouse click actions.
          • -
          • Examples: Click to shoot, press Space to jump, …
            +
          • Examples: Click to shoot, press Space to jump, ???
          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html index c46bbd652..c7a7aaee7 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html @@ -8,7 +8,7 @@ Next: Hello Aud

          -One way to create a 3D landscape is to sculpt a huge terrain model. This gives you a lot of artistic freedom – but rendering such a huge model can be quite slow. This tutorial explains how to create fast-rendering terrains from heightmaps, and how to use texture splatting to make the terrain look good. +One way to create a 3D landscape is to sculpt a huge terrain model. This gives you a lot of artistic freedom ??? but rendering such a huge model can be quite slow. This tutorial explains how to create fast-rendering terrains from heightmaps, and how to use texture splatting to make the terrain look good.

          @@ -158,9 +158,9 @@ Important things to note: When looking at Java data types to hold an array of floats between 0 and 255, the Image class comes to mind. Storing a terrain's height values as a grayscale image has one big advantage: The outcome is a very userfriendly, like a topographical map:

            -
          • Low values (e.g. 0 or 50) are dark gray – these are valleys.
            +
          • Low values (e.g. 0 or 50) are dark gray ??? these are valleys.
          • -
          • High values (e.g. 200, 255) are light grays – these are hills.
            +
          • High values (e.g. 200, 255) are light grays ??? these are hills.
          @@ -261,13 +261,13 @@ Before you can start painting, you have to make a few decisions:
          1. Choose three textures. For example grass.jpg, dirt.jpg, and road.jpg.
          2. -
          3. You "paint" three texture layers by using three colors: Red, blue and, green. You arbitrarily decide that…
            +
          4. You "paint" three texture layers by using three colors: Red, blue and, green. You arbitrarily decide that???
              -
            1. Red is grass – red is layer Tex1, so put the grass texture into Tex1.
              +
            2. Red is grass ??? red is layer Tex1, so put the grass texture into Tex1.
            3. -
            4. Green is dirt – green is layer Tex2, so put the dirt texture into Tex2.
              +
            5. Green is dirt ??? green is layer Tex2, so put the dirt texture into Tex2.
            6. -
            7. Blue is roads – blue is layer Tex3, so put the roads texture into Tex3.
              +
            8. Blue is roads ??? blue is layer Tex3, so put the roads texture into Tex3.
          5. @@ -284,9 +284,9 @@ Now you start painting the texture:
          6. Open alphamap.png in a graphic editor and switch the image mode to color image.
              -
            1. Paint the black valleys red – this will be the grass.
              +
            2. Paint the black valleys red ??? this will be the grass.
            3. -
            4. Paint the white hills green – this will be the dirt of the mountains.
              +
            5. Paint the white hills green ??? this will be the dirt of the mountains.
            6. Paint blue lines where you want roads to criss-cross the landscape.
            7. @@ -297,7 +297,7 @@ Now you start painting the texture:

            - + ???

            @@ -363,7 +363,7 @@ Use setWrap(WrapMode.Repeat) to make the small texture fill the wid

            -Internally, the generated terrain mesh is broken down into tiles and blocks. This is an optimization to make culling easier. You do not need to worry about "tiles and blocks" too much, just use recommended values for now – 64 is a good start. +Internally, the generated terrain mesh is broken down into tiles and blocks. This is an optimization to make culling easier. You do not need to worry about "tiles and blocks" too much, just use recommended values for now ??? 64 is a good start.

            diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/1.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/1.png new file mode 100644 index 000000000..8462c8d08 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/1.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-0.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-0.png new file mode 100644 index 000000000..d8d81cfa0 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-0.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-1.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-1.png new file mode 100644 index 000000000..a0469023d Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-1.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-10.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-10.png new file mode 100644 index 000000000..db952ffcc Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-10.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-11.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-11.png new file mode 100644 index 000000000..7393cd2da Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-11.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-12.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-12.png new file mode 100644 index 000000000..0b12f9feb Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-12.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-2.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-2.png new file mode 100644 index 000000000..9e224edb1 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-2.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-3.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-3.png new file mode 100644 index 000000000..5edecb993 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-3.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-4.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-4.png new file mode 100644 index 000000000..1d5f5b772 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-4.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-5.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-5.png new file mode 100644 index 000000000..61eefd4a9 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-5.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-6.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-6.png new file mode 100644 index 000000000..f8515db0f Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-6.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-7.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-7.png new file mode 100644 index 000000000..0cf9e310f Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-7.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-8.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-8.png new file mode 100644 index 000000000..d5bd508da Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-8.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-9.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-9.png new file mode 100644 index 000000000..32d0400a7 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax-9.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax.html new file mode 100644 index 000000000..e76f0e792 --- /dev/null +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax.html @@ -0,0 +1,616 @@ + +

            3ds Max Bone Animation to JME3 using OgreMax plugin

            +
            + +
            + +

            Asset Management

            +
            + +

            +For the managing of assets in general, be sure to read the Asset Pipeline Documentation. It contains vital information on how to manage your asset files. +

            + +
            + +

            Creating models in 3dsMax

            +
            + +

            +For this tutorial I used 3D Studio Max 2012 and OgreMax 2.4.3 free edition +

            + +
            + +

            Create Model and Bones

            +
            +
              +
            • Create a new file
              +
            • +
            • Select the ???Create??? tab > ???Geometry??? > ???Cylinder???
              +
            • +
            + +

            + +

            +
              +
            • Draw a cylinder, lets say with 8 height segments (must be enough for a smooth deformation)
              +
            • +
            • Also check ???Generate Mapping Coords.???
              +
            • +
            + +

            + +

            +
              +
            • Click ???Create??? tab > ???Systems??? > ???Bones???
              +
            • +
            + +

            + +

            +
              +
            • Add some bones in the center of the cylinder
              +
            • +
            + +

            + +

            +
              +
            • Select the cylinder, right click it and click ???Convert To:??? > ???Convert to Editable Mesh??? to prevent issues with OgreMax
              +
            • +
            • Click the ???Modify??? tab > ???Modifier List??? and add the ???Skin??? modifier
              +
            • +
            + +

            + +

            +
              +
            • Beneath ???Bones:??? click ???Add??? and select all of your bones
              +
            • +
            + +

            + +

            +
              +
            • You may also edit the envelopes, but for a small test the default settings are ok
              +
            • +
            + +
            + +

            Create the animation

            +
            +
              +
            • Select the cylinder, and click ???Display??? tab > ???Freeze Selected??? so it is easier to select the bones during animation
              +
            • +
            • Select the two top bones and enable the ???Auto Key??? mode
              +
            • +
            + +

            + +

            +
              +
            • The first key frame will be created automatically. Move the animation track slider to frame 5
              +
            • +
            • Move the selected bones a bit. The cylinder mesh will be deformed. Because you are in the ???Auto Key??? mode, a key frame will be created
              +
            • +
            + +

            + +

            +
              +
            • Create some additional key frames. You may also select more bones and move or rotate them. I???ve created 25 frames and the last key frame equals the first, so the animation is loopable
              +
            • +
            • After creating the animation, disable the ???Auto Key??? mode
              +
            • +
            + +
            + +

            OgreMax settings

            +
            +
              +
            • Open the ???OgreMax Scene Settings??? dialog from the menu
              +
            • +
            • In the ???Meshes??? tab, enable ???Export XML Files??? and disable ???Export Binary Files??? as well as ???Export Vertex Colors???
              +
            • +
            + +

            + +

            +
              +
            • Click the ???Environment??? tab and uncheck ???Export Environment Settings???. Otherwise the JME importer will throw a NullPointerException
              +
            • +
            + +

            + +

            +
              +
            • If you have textured your model, you may also check ???Copy Bitmaps to Export Directory??? in the ???Bitmaps??? tab
              +
            • +
            • Unfreeze the cylinder by clicking ???Display??? tab > ???Unfreeze All??? and select it
              +
            • +
            • While having the cylinder selected, open the ???OgreMax Object Settings??? dialog from the menu
              +
            • +
            • Open the ???Mesh Animations??? tab and select type ???Skeleton???, ???Export Skeleton??? : ???Yes???
              +
            • +
            • Below ???Mesh Animations??? hit the ???Add?????? button
              +
            • +
            • Assign a name to the track, maybe ???wobble???. The track type must be ???Skin. Set the right ???Start/End Frames??? for your animation
              +
            • +
            + +

            + +

            +
              +
            • Hit ok and you will see the animation in the table. You may add additional animations by selecting other frame ranges, if desired
              +
            • +
            + +

            + +

            + +
            + +

            Export and Import

            +
            +
              +
            • When all animations are in the list, select ???OgreMax??? > ???Export??? > ???Export Scene??? and name the file ???worm.scene???
              +
            • +
            • Create a JME test class that imports the file, get the animation controller and start the ???wobble??? animation
              +
            • +
            +
            import com.jme3.animation.AnimChannel;
            +import com.jme3.animation.AnimControl;
            +import com.jme3.animation.Skeleton;
            +import com.jme3.app.SimpleApplication;
            +import com.jme3.asset.plugins.FileLocator;
            +import com.jme3.light.AmbientLight;
            +import com.jme3.light.PointLight;
            +import com.jme3.material.Material;
            +import com.jme3.math.ColorRGBA;
            +import com.jme3.scene.Geometry;
            +import com.jme3.scene.Node;
            +import com.jme3.scene.Spatial;
            +import com.jme3.scene.control.LodControl;
            +import com.jme3.scene.debug.SkeletonDebugger;
            + 
            +/**
            + * This is a test class for loading a Ogre XML scene exported by OgreMax.
            + * 
            + * @author Stephan Dreyer
            + * 
            + */
            +public class TestOgreMaxImport extends SimpleApplication {
            + 
            +  @Override
            +  public void simpleInitApp() {
            +    assetManager.registerLocator("Assets/model/ogre/test/", FileLocator.class);
            + 
            +    // create the geometry and attach it
            +    final Node model = (Node) assetManager.loadModel("worm.scene");
            +    // resize it, because of the large 3dsmax scales
            +    model.setLocalScale(.001f);
            + 
            +    // attach to root node
            +    rootNode.attachChild(model);
            +    addLodControl(model);
            + 
            +    final AnimControl ac = findAnimControl(model);
            + 
            +    try {
            +      // add a skeleton debugger to make bones visible
            +      final Skeleton skel = ac.getSkeleton();
            +      final SkeletonDebugger skeletonDebug = new SkeletonDebugger("skeleton",
            +          skel);
            +      final Material mat = new Material(assetManager,
            +          "Common/MatDefs/Misc/Unshaded.j3md");
            +      mat.setColor("Color", ColorRGBA.Green);
            +      mat.getAdditionalRenderState().setDepthTest(false);
            +      skeletonDebug.setMaterial(mat);
            +      model.attachChild(skeletonDebug);
            + 
            +      // create a channel and start the wobble animation
            +      final AnimChannel channel = ac.createChannel();
            +      channel.setAnim("wobble");
            +    } catch (final Exception e) {
            +      e.printStackTrace();
            +    }
            + 
            +    // add some lights
            +    rootNode.addLight(new AmbientLight());
            +    rootNode.addLight(new PointLight());
            +  }
            + 
            +  public void addLodControl(final Spatial parent) {
            +    if (parent instanceof Node) {
            +      for (final Spatial s : ((Node) parent).getChildren()) {
            +        addLodControl(s);
            +      }
            +    } else if (parent instanceof Geometry) {
            +      final LodControl lc = new LodControl();
            +      lc.setDistTolerance(1f);
            +      parent.addControl(lc);
            +    }
            +  }
            + 
            +  /**
            +   * Method to find the animation control, because it is not on the models root
            +   * node.
            +   * 
            +   * @param parent
            +   *          The spatial to search.
            +   * @return The {@link AnimControl} or null if it does not exist.
            +   */
            +  public AnimControl findAnimControl(final Spatial parent) {
            +    final AnimControl animControl = parent.getControl(AnimControl.class);
            +    if (animControl != null) {
            +      return animControl;
            +    }
            + 
            +    if (parent instanceof Node) {
            +      for (final Spatial s : ((Node) parent).getChildren()) {
            +        final AnimControl animControl2 = findAnimControl(s);
            +        if (animControl2 != null) {
            +          return animControl2;
            +        }
            +      }
            +    }
            + 
            +    return null;
            +  }
            + 
            +  public static void main(final String[] args) {
            +    new TestOgreMaxImport().start();
            +  }
            +}
            + +

            +You will see your worms strange movements. Have fun! +

            + +

            + +

            + +
            + +

            3ds Max Biped Animation to JME3

            +
            + +

            + +You can also use the biped operator to animate models, but you have to consider a lot of things. +

            + +
            + +

            Creating a character in 3dsMax

            +
            + +

            + +I will not tell you in detail how to model a character. There I many good tutorials on the web, I used . + +

            +
              +
            • You may create a biped before you start modeling, so it is quite easier to fit the proportions of the biped.
              +
            • +
            • After creating a model and a biped I got something like that:
              +
            • +
            + +

            + + + +

            +
              +
            • I added the "Meshmooth" modifier with 2 iterations and got this result:
              +
            • +
            + +

            + + + +

            +
              +
            • After smoothing your mesh you could correct vertices with the "Edit Mesh" modifier. Finally you add the "Physique" modifier.
              +
            • +
            • Now you can edit your envelopes to fit your model.
              +
            • +
            + +
            + +

            Creating a simple walk animation

            +
            +
              +
            • Select the chest of your biped, choose "Motion" (1) tab > "Foot Step Mode" (2) > "Create Multiple Footsteps" (3)
              +
            • +
            • You need to select the "In Place Mode" (4), so the character moves in place without changing its location.
              +
            • +
            + +

            + + + +

            +
              +
            • You can now play a bit with the settings, I adjusted "Actual Stride Length" and "Actual Stride Height".
              +
            • +
            • For the "Number of Footsteps" 6 will be sufficient because the animation is cycled later.
              +
            • +
            • Note: You can also create or edit footsteps by hand and move or rotate them.
              +
            • +
            • After all footsteps are created, hit the "Create Keys for Inactive Footsteps" button in the "Footstep Operations" panel
              +
            • +
            • You can now check your animation by pressing the "Play" button in the timeline.
              +
            • +
            + +
            + +

            Preparing the export and setting up OgreMax

            +
            +
              +
            • The "OgreMax Scene Settings" should be the same as shown above.
              +
            • +
            • Because you want your animation to be looped, you've got to find two key frames where the legs are nearly in the same position. For my settings I've chosen the frames 48-78 for the walk animation.
              +
            • +
            • Select the character mesh and open the "OgreMax Scene Settings" dialog.
              +
            • +
            • Open the ???Mesh Animations??? tab and select type ???Skeleton???, ???Export Skeleton??? : ???Yes???
              +
            • +
            • Below ???Mesh Animations??? hit the ???Add?????? button
              +
            • +
            + +

            + + + +

            +
              +
            • Enter a name for the track, e.g. "walk".
              +
            • +
            • Assure the track type is set to "Physique".
              +
            • +
            • Set the start and end frames, for me it is 48-78.
              +
            • +
            • Close the dialog by pushing "Ok".
              +
            • +
            • Note: It could be useful to create also a track "start_run", that blends between the stand and walk animation. I would use frame 0-47 for that.
              +
            • +
            • Because you have a smooth model with a lot of polygons, it may be useful to create levels of detail (LOD). When the camera is farther away, a low-poly mesh of your character will be rendered.
              +
            • +
            + +

            + + + +

            +
              +
            • Open the "Mesh LOD" tab in object settings.
              +
            • +
            • It will suffice to select the "Automatic" setting, but if your animation starts to look weird, you can create them by hand.
              +
            • +
            • I used 4 levels of LOD with a distance of 1. Don't worry about the distance setting, you can change it later in JME.
              +
            • +
            • For the level reduction, I used 20 percent, which produce good results. You may adjust all the settings depending on your needs.
              +
            • +
            • Close the dialoque by clicking "Ok".
              +
            • +
            + +
            + +

            Fixing the location

            +
            +
              +
            • Before you export you need to do a little fix, because your model is not really located where you see it. JME will get into a lot of trouble, if you don't change that.
              +
            • +
            • Assure to save the max file. Sometimes OgreMax crashes the whole application during export. If you want to change the animation after export, you should reload this file because fixing the location changes something I can't really figure out.
              +
            • +
            + +

            + + + +

            +
              +
            • Right click the "Select and Move" tool in the upper toolbar. A dialog will pop up.
              +
            • +
            • Set the X and Y location to 0 and close the dialog.
              +
            • +
            • There is another way to achieve this. If you have scaled, moved or rotated your model, just open the "Hierarchy" tab and click "Transform" and "Scale" on the "Reset" panel.
              +
            • +
            + +
            + +

            Export and Import

            +
            +
              +
            • Now you can export your scene. Select only the mesh and use "Export selected objects". You will not need the whole scene including the biped object, but the bones are created automatically during export.
              +
            • +
            • Create a JME test class for the scene import.
              +
            • +
            + +

            + +For that, I extended the first class: +

            +
            import com.jme3.animation.AnimChannel;
            +import com.jme3.animation.AnimControl;
            +import com.jme3.animation.Skeleton;
            +import com.jme3.app.SimpleApplication;
            +import com.jme3.asset.plugins.FileLocator;
            +import com.jme3.light.AmbientLight;
            +import com.jme3.light.PointLight;
            +import com.jme3.material.Material;
            +import com.jme3.math.ColorRGBA;
            +import com.jme3.math.Vector3f;
            +import com.jme3.scene.Geometry;
            +import com.jme3.scene.Node;
            +import com.jme3.scene.Spatial;
            +import com.jme3.scene.control.LodControl;
            +import com.jme3.scene.debug.SkeletonDebugger;
            +import com.jme3.scene.shape.Box;
            + 
            +/**
            + * This is a test class for loading a Ogre XML scene exported by OgreMax.
            + * 
            + * @author Stephan Dreyer
            + * 
            + */
            +public class TestOgreMaxImport extends SimpleApplication {
            + 
            +  @Override
            +  public void simpleInitApp() {
            +    assetManager.registerLocator("Assets/model/ogre/test/", FileLocator.class);
            + 
            +    // create the geometry and attach it
            +    final Node model = (Node) assetManager.loadModel("guy.scene");
            +    // resize it, because of the large 3dsmax scales
            +    model.setLocalScale(.02f);
            + 
            +    // attach to root node
            +    rootNode.attachChild(model);
            +    addLodControl(model);
            + 
            +    final AnimControl ac = findAnimControl(model);
            + 
            +    try {
            +      // add a skeleton debugger to make bones visible
            +      final Skeleton skel = ac.getSkeleton();
            +      final SkeletonDebugger skeletonDebug = new SkeletonDebugger("skeleton",
            +          skel);
            +      final Material mat = new Material(assetManager,
            +          "Common/MatDefs/Misc/Unshaded.j3md");
            +      mat.setColor("Color", ColorRGBA.Green);
            +      mat.getAdditionalRenderState().setDepthTest(false);
            +      skeletonDebug.setMaterial(mat);
            +      // model.attachChild(skeletonDebug);
            + 
            +      // create a channel and start the walk animation
            +      final AnimChannel channel = ac.createChannel();
            +      channel.setAnim("walk");
            +    } catch (final Exception e) {
            +      e.printStackTrace();
            +    }
            + 
            +    flyCam.setMoveSpeed(40f);
            +    cam.setLocation(new Vector3f(15, 10, 15));
            +    cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
            +    cam.setFrustumNear(1f);
            + 
            +    // add some lights
            +    rootNode.addLight(new AmbientLight());
            + 
            +    final PointLight pl = new PointLight();
            +    pl.setPosition(new Vector3f(-3f, 3f, 1f));
            +    rootNode.addLight(pl);
            + 
            +    // add a box as floor
            +    final Box b = new Box(100f, 0.1f, 100f);
            +    final Geometry geo = new Geometry("floor", b);
            + 
            +    final Material mat = new Material(assetManager,
            +        "Common/MatDefs/Misc/Unshaded.j3md");
            +    mat.setColor("Color", ColorRGBA.LightGray);
            +    geo.setMaterial(mat);
            + 
            +    rootNode.attachChild(geo);
            +  }
            + 
            +  /**
            +   * Method to traverse through the scene graph and add a {@link LodControl} to
            +   * the mesh.
            +   * 
            +   * @param parent
            +   *          The Node to add the control to.
            +   */
            +  public void addLodControl(final Spatial parent) {
            +    if (parent instanceof Node) {
            +      for (final Spatial s : ((Node) parent).getChildren()) {
            +        addLodControl(s);
            +      }
            +    } else if (parent instanceof Geometry) {
            +      final LodControl lc = new LodControl();
            + 
            +      // the distance for LOD changes is set here, you may adjust this
            +      lc.setDistTolerance(1f);
            +      parent.addControl(lc);
            +    }
            +  }
            + 
            +  /**
            +   * Method to find the animation control, because it is not on the models root
            +   * node.
            +   * 
            +   * @param parent
            +   *          The spatial to search.
            +   * @return The {@link AnimControl} or null if it does not exist.
            +   */
            +  public AnimControl findAnimControl(final Spatial parent) {
            +    final AnimControl animControl = parent.getControl(AnimControl.class);
            +    if (animControl != null) {
            +      return animControl;
            +    }
            + 
            +    if (parent instanceof Node) {
            +      for (final Spatial s : ((Node) parent).getChildren()) {
            +        final AnimControl animControl2 = findAnimControl(s);
            +        if (animControl2 != null) {
            +          return animControl2;
            +        }
            +      }
            +    }
            + 
            +    return null;
            +  }
            + 
            +  public static void main(final String[] args) {
            +    new TestOgreMaxImport().start();
            +  }
            +}
            + +

            +After starting the class, you can see a nice smooth walk animation (if it's not smooth, you need to adjust your track frames): +

            + +

            + +

            + +

            +As you can see, the LOD is working: +

            + +

            + + +

            + +
            + +

            view online version

            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_2.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_2.png new file mode 100644 index 000000000..4e7718ac5 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_2.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_3_1.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_3_1.png new file mode 100644 index 000000000..81953ea32 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_3_1.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_4.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_4.png new file mode 100644 index 000000000..3f9c31842 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_4.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_5.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_5.png new file mode 100644 index 000000000..f0b9524ac Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_5.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_6.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_6.png new file mode 100644 index 000000000..ef5c62f93 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_6.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_7.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_7.png new file mode 100644 index 000000000..0b23612b5 Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_7.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_8.png b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_8.png new file mode 100644 index 000000000..0f104550c Binary files /dev/null and b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/3dsmax_biped_8.png differ diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html index c0470b547..513e9a791 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html @@ -61,21 +61,21 @@ To export an animated model in Blender make sure the following conditions are me
            1. The animation has to be a bone animation
            2. -
            3. Apply Location, Rotation and Scate to the mesh on Blender: On 3D View editor on Blender, select the mesh in Object Mode and go to the 3D View Editor’s header → Object Menu → Apply → Location / Rotation / Scale.
              +
            4. Apply Location, Rotation and Scale to the mesh on Blender: On 3D View editor on Blender, select the mesh in Object Mode and go to the 3D View Editor???s header ??? Object Menu ??? Apply ??? Location / Rotation / Scale.
            5. -
            6. Apply Location, Rotation and Scate to the armature on Blender: On 3D View editor on Blender, select the armature in Object Mode and go to the 3D View Editor’s header → Object Menu → Apply → Location / Rotation / Scale.
              +
            7. Apply Location, Rotation and Scale to the armature on Blender: On 3D View editor on Blender, select the armature in Object Mode and go to the 3D View Editor???s header ??? Object Menu ??? Apply ??? Location / Rotation / Scale.
            8. -
            9. Set the mesh’s origin point in the bottom of the mesh (see the images below).
              +
            10. Set the mesh???s origin point in the bottom of the mesh (see the images below).
            11. -
            12. Set the armature’s origin point in the bottom of the armature (see the images below).
              +
            13. Set the armature???s origin point in the bottom of the armature (see the images below).
            14. -
            15. Armature’s origin point and mesh’s origin point must be in the same location(see the images below).
              +
            16. Armature???s origin point and mesh???s origin point must be in the same location(see the images below).
            17. -
            18. Use a root bone located in the armature’s origin. This root bone must be in vertical position (see the images below) and it is the root bone of the armature. If you rotate the root bone, the the entire armature might be rotate when you import the model into jMonkey (I’m just mentioning the result, I don’t know where is the problem (jmonkey importer or blender’s ogre exporter plugin)).
              +
            19. Use a root bone located in the armature???s origin. This root bone must be in vertical position (see the images below) and it is the root bone of the armature. If you rotate the root bone, the the entire armature might be rotate when you import the model into jMonkey (I???m just mentioning the result, I don???t know where is the problem (jMonkey importer or blender???s ogre exporter plugin)).
            20. -
            21. Uncheck “Bone Envelopes” checkbox on the Armature modifier for the mesh (see the images below).
              +
            22. Uncheck ???Bone Envelopes??? checkbox on the Armature modifier for the mesh (see the images below).
            23. -
            24. Uncheck “Envelopes” checkbox on the armature (see the images below).
              +
            25. Uncheck ???Envelopes??? checkbox on the armature (see the images below).
            @@ -417,7 +417,7 @@ Select the texture of the cube and select save environment map. That is it for Blender. Open the saved image in some image editor (I use the Gimp from here).

            The SDK also contains an image editor, right-click the image and select "edit image" to open it.

            -You will notice that Blender has taken the 6 sides of the cube and pasted together into one image (3x2). So now we need to cut it up again into 6 separate images. In gimp I usually set the guides to where I want to cut and then go into Filters→Web→Slice and let gimp cut it up for me. +You will notice that Blender has taken the 6 sides of the cube and pasted together into one image (3x2). So now we need to cut it up again into 6 separate images. In gimp I usually set the guides to where I want to cut and then go into Filters???Web???Slice and let gimp cut it up for me.

            diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html index c278cfdad..99e020ac0 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html @@ -9,36 +9,36 @@ -

            How do I start with a preconfigured game?

            +

            How do I start writing a preconfigured jME game?

            -Extend com.jme3.app.SimpleApplication. +Write a Java class that extends .
            Learn more: Hello SimpleApplication, .

            - +

            How do I change the background color?

            viewPort.setBackgroundColor(ColorRGBA.Blue);
            - +

            Can I customize the SimpleApplication class?

            -Yes! Actually, you MUST customize it! For your own games, you always create a custom base class that extends class. From now on it's no longer a "simple application" – it's now your game. Configure your application settings, implement methods, and customize away! +Yes! Actually, you MUST customize it! For your own games, you always create a custom base class that extends class. From now on it's no longer a "simple application" ??? it's now your game. Configure your application settings, implement methods, and customize away!
            Learn more: SimpleApplication, AppSettings.

            - +

            How can I switch between screens or states?

            @@ -50,7 +50,7 @@ You should break app your application logic into components by spreading it out

            - +

            How do I pause/unpause a game?

            @@ -62,7 +62,7 @@ You split up your application into several AppStates and implement the setEnable

            - +

            How do I disable logger output to the console?

            @@ -86,7 +86,7 @@ For the release, switch the severity level of the default logger to print only S

            - +

            Why does the executable crash with "Cannot locate resource"?

            @@ -98,7 +98,7 @@ Make sure to only load() models converted to .j3o binary format, not the origina

            - +

            What is java.lang.LinkageError: Version mismatch?

            @@ -110,12 +110,12 @@ To fix this, search for .dll (Windows), .jnilib (Mac), and .so (Linux) files for

            - +

            I want to load my scene

            - +

            How do I make objects appear / disappear in the 3D scene?

            @@ -132,7 +132,7 @@ To make a spatial appear in the scene, you attach it to the rootNode (or to a no

            - +

            Why do I get AssetNotFoundException when loading X ?

            @@ -158,7 +158,7 @@ this.assetManager.registerLocator("town.zip", ZipLocator.class)

            - +

            How do I Create 3-D models, textures, sounds?

            @@ -174,7 +174,7 @@ You create sounds in an audio editor, for example, Audacity, and export them as

            - +

            How do I load a 3-D model into the scene?

            @@ -194,7 +194,7 @@ Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.j3o"

            - +

            How do initialize the scene?

            @@ -205,12 +205,12 @@ Use the simpleInitApp() method in SimpleApplication (or initApp() in Application

            - +

            I want to transform objects in the scene

            - +

            How do I move or turn or resize a spatial?

            @@ -226,7 +226,7 @@ To move or turn or resize a spatial you use transformations. You can concatenate

            - +

            How do I make a spatial move by itself?

            @@ -239,7 +239,7 @@ Change the geometry's translation (position) live in the update loop using

            - +

            How do I access a named sub-mesh in Model?

            Geometry result = spatial.getName().startsWith(name);
            @@ -250,7 +250,7 @@ Change the geometry's translation (position) live in the update loop using

            - +

            How do I make procedural or custom shapes?

            @@ -261,12 +261,12 @@ You can programmatically create com.jme3.scene.Mesh'es.

            - +

            I want to change the surface of objects in the scene

            - +

            Why is my UV wrapping / texture appearance all wrong?

            @@ -284,7 +284,7 @@ You can set the boolean value in the constructor of TextureKey to flipped or not
              material.setTexture("ColorMap", this.assetManager.loadTexture(new TextureKey("myTexture.jpg", false)));
            - +

            How do I scale, mirror, or wrap a texture?

            @@ -302,7 +302,7 @@ You can choose among various com.jme3.texture.Texture.WrapModes for
            material.getTextureParam("DiffuseMap").getTextureValue().setWrap(WrapMode.Repeat);
            - +

            How do I change color or shininess of an material?

            @@ -315,7 +315,7 @@ Use the AssetManager to load Materials, and change material settings.

            - +

            How do I make a surface wood, stone, metal, etc?

            @@ -328,7 +328,7 @@ Create Textures as image files. Use the AssetManager to load a Material and use

            - +

            Why are materials too bright, too dark, or flickering?

            @@ -337,7 +337,7 @@ If you use a lit material (based on Lighting.j3md) then you must attach a light

            - +

            How do I make geometries cast a shadow?

            @@ -350,7 +350,7 @@ Use com.jme3.shadow.BasicShadowRenderer together with com.jme3.light.Directional

            - +

            How do I make materials transparent?

            @@ -366,7 +366,7 @@ Assign a texture with an alpha channel to a Material and set the Material's

            - +

            How do I force or disable culling?

            @@ -390,7 +390,7 @@ You can also deactivate the com.jme3.scene.Spatial.CullHint of a wh

            - +

            Can I draw only an outline of the scene?

            @@ -406,12 +406,12 @@ Add a renders state to the material's and activate Wireframe.

            - +

            I want to control the camera

            - +

            How do I switch between third-person and first-person view ?

            @@ -433,18 +433,18 @@ chaseCam = new ChaseCamera(cam, spatial, inputManager);
            - +

            How do I increase camera speed?

            flyCam.setMoveSpeed(50f);
            - +

            Actions, Interactions, Physics

            - +

            How do I implement game logic / game mechanics?

            @@ -455,7 +455,7 @@ Use Controls to define the behaviour of types of Spatials. Use Application State

            - +

            How do I let players interact via keyboard?

            @@ -466,7 +466,7 @@ Use com.jme3.input.KeyInput and a Input Listener.

            - +

            How do I let players interact by clicking?

            @@ -479,7 +479,7 @@ Players typically click the mouse to pick up objects, to open doors, to shoot a

            - +

            How do I animate characters?

            @@ -492,7 +492,7 @@ Create an animated OgreMesh model with bones in a 3-D mesh editor (e.g. Blender)

            - +

            How do I keep players from falling through walls and floors?

            @@ -503,7 +503,7 @@ Use collision detection. The most common solution is to use jme's physics i

            - +

            How do I make balls/wheels/etc bounce and roll?

            @@ -516,17 +516,17 @@ Add physics controls to Spatials and give them spherical or cylindrical bounding

            - +

            How do I debug weird Physics behaviour?

            -Maybe your collision shapes overlap – or they are not where you think they are. Make the collision shapes visible by adding the following line after the bulletAppState initialization: +Maybe your collision shapes overlap ??? or they are not where you think they are. Make the collision shapes visible by adding the following line after the bulletAppState initialization:

            bulletAppState.getPhysicsSpace().enableDebug(assetManager);
            - +

            How do I make a walking character?

            @@ -539,7 +539,7 @@ Code samples: +

            How do I steer vehicles?

            @@ -552,7 +552,7 @@ Code samples: +

            Can objects swing like a pendulums, chains, ropebridges?

            @@ -564,12 +564,12 @@ Use a PhysicsControl's hinges and joints.

            - +

            Default GUI Display

            - +

            What are these FPS/Objects/Vertices/Triangles statistics?

            @@ -581,7 +581,7 @@ At the bottom left of every default SimpleGame, you see the +

            How do I get rid of the FPS/Objects statistics?

            @@ -600,7 +600,7 @@ setDisplayStatView(false); // to hide the statistics

            - +

            How do I display score, health, mini-maps, status icons?

            @@ -613,7 +613,7 @@ Attach text and pictures to the orthogonal guiNode to create a head

            - +

            How do I display buttons and UI controls?

            @@ -626,7 +626,7 @@ Sample Code: +

            How do i display a loading screen?

            @@ -637,12 +637,12 @@ Instead of having a frozen frame while your games loads, you can have a loading

            - +

            Nifty GUI

            - +

            I get NoSuchElementException when adding controls (buttons etc)!

            @@ -653,7 +653,7 @@ Verify that you include a controls definition file link in your +

            Where can I find example code of Nifty GUI's XML and Java classes?

            @@ -662,7 +662,7 @@ Verify that you include a controls definition file link in your +

            Is there Java Doc for Nifty GUI?

            @@ -671,12 +671,12 @@ Verify that you include a controls definition file link in your +

            I want to create an environment with sounds, effects, and landscapes

            - +

            How do I play sounds and noises?

            @@ -689,7 +689,7 @@ Use AudioRenderer, Listener, and AudioNode from com.jme3.audio.*.

            - +

            How do I make fire, smoke, explosions, swarms, magic spells?

            @@ -702,7 +702,7 @@ For swarm like effects you use particle emitters.

            - +

            How do I make water, waves, reflections?

            @@ -715,8 +715,8 @@ Use a special post-processor renderer from com.jme3.water.*.

            - -

            How do I make fog, bloom, blur, light scrattering?

            + +

            How do I make fog, bloom, blur, light scattering?

            @@ -726,7 +726,7 @@ Use special post-processor renderers from com.jme3.post.*.

            - +

            How do I generate a terrain?

            @@ -739,7 +739,7 @@ Use com.jme3.terrain.*. The JMonkeyEngine also provides you with a Terrain Edito

            - +

            How do I make a sky?

            @@ -757,12 +757,12 @@ skyGeo.setQueueBucket(Bucket.Sky)

            - +

            I want to access to back-end properties

            - +

            How do I read out graphic card capabilities?

            @@ -774,7 +774,7 @@ If your game is heavily using features that older cards do not support, you can Logger.getLogger(HelloJME3.class.getName()).log(Level.INFO, "Capabilities: {0}", caps.toString());
            - +

            How do I Run jMonkeyEngine 3 with OpenGL1?

            @@ -791,7 +791,7 @@ For the jMonkeyEngine SDK it

            - +

            How do I optimize the heck out of the Scene Graph?

            @@ -808,7 +808,7 @@ Batching means that all Geometries with the same Material are combined into one

            - +

            How do I prevent users from unzipping my JAR?

            @@ -818,12 +818,12 @@ Add an - +

            I want to do maths

            - +

            What does addLocal() / multLocal() etc mean?

            @@ -876,7 +876,7 @@ Many maths functions (mult(), add(), subtract(), etc) come as local and a non-lo
            - +

            What is the difference between World and Local coordinates?

            @@ -886,7 +886,7 @@ World coordinates of a Spatial are its absolute coordinates in the 3D scene (thi

            - +

            How do I convert Degrees to Radians?

            @@ -900,5 +900,5 @@ Multiply degree value by FastMath.DEG_TO_RAD to convert it to radians.
            - +

            view online version

            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html index f86f2e4e6..4902ab7e9 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/appsettings.html @@ -131,7 +131,7 @@ Set VSync to false to deactivate vertical syncing (faster, but possible page tea setIcons(new BufferedImage[]{
            -ImageIO.read(new File("")), …});This specifies the little application icon in the titlebar of the application (unused in MacOS?). You should specify the icon in various sizes (256,128,32,16) to look good on various operating systems. Note: This is not the application icon on the desktop.null +ImageIO.read(new File("")), ???});This specifies the little application icon in the titlebar of the application (unused in MacOS?). You should specify the icon in various sizes (256,128,32,16) to look good on various operating systems. Note: This is not the application icon on the desktop.null setSettingsDialogImage("Interface/mysplashscreen.png")A custom splashscreen image in the assets/Interface directory which is displayed when the settings dialog is shown."/com/jme3/app/Monkey.png" diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html index 81b3996cb..369cefc51 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html @@ -126,7 +126,7 @@ E.g. if the game is a "Jump'n'Run", jumping and running must -
          7. Gamma Release, Delta Release… = Release Candidates
            +
          8. Gamma Release, Delta Release??? = Release Candidates
            • Think you're done? Make test runs incl. packaging and distribution. (Order form? download?)
            • @@ -158,7 +158,7 @@ Whether you work in a team or alone, keeping a version controlled repository of
            • The jMonkeyEngine SDK supports Subversion, Mercurial, and CVS.
              If you don't know which to choose, Subversion is a good choice for starters.
            • -
            • Set up your own local server, or get free remote hosting space from various open-source dev portals like , , (supports private projects), ,
              +
            • Set up your own local server, or get free remote hosting space from various open-source dev portals like , , (supports private projects), , ???
            @@ -203,7 +203,7 @@ Learn details about the +

            Where to Start?

            @@ -238,9 +244,9 @@ You have a list of features that you want in game, but which one do you implemen
            1. Make sure the game's high-level frame (screen switching, network sync, loading/saving) is sound and solid.
            2. -
            3. Start with implementing the most complex game feature first – the one that imposes most constraints on the structure of your project (for example: multi-player networking, or physics.)
              +
            4. Start with implementing the most complex game feature first ??? the one that imposes most constraints on the structure of your project (for example: multi-player networking, or physics.)
            5. -
            6. Add only one larger feature at a time. If there are complex interactions (such as "networking + physics"), start with a small test case ("one shared cube") and work your way up. Starting with a whole scene introduces too many extra soruces of error.
              +
            7. Add only one larger feature at a time. If there are complex interactions (such as "networking + physics"), start with a small test case ("one shared cube") and work your way up. Starting with a whole scene introduces too many extra sources of error.
            8. Implement low-complexity decorations (audio and visual effects) last.
            9. @@ -255,31 +261,66 @@ You have a list of features that you want in game, but which one do you implemen

            - +

            The Smart Way to Add Custom Methods and Fields

            -Game entities (Nodes and Geometrys) often carry custom fields and custom methods with them. For example, players and NPCs have fields such as health, gold coins, inventory, equipment, etc. We call these fields user data. Game entities also have methods that modify user data. Examples include attack(), addGold(), getHealth(), pickUpItem(), dropItem(), useItem(), walk(), etc. +

            Avoid the Anti-Pattern: Don't design complex role-based classes using Java inheritance, it will result in an unmaintainable mess.
            +Example: You start extending Node ???> MyMobileNode ???> MyNPC. Then you extend MyFighterNPC (defends, attacks) and MyShopKeeperNPC (trades) from MyNPC. What if you need an NPC that trades and defends itself, but doesn't attack? Do you extend MyShopKeeperNPC and copy and paste the defensive methods from MyFighterNPC? Or do you extend MyFighterNPC and override the attacking methods of its parent? Neither is a clean solution.
            +Wouldn't it be better if behaviours were a separate "system", and attributes were separate "components" that you add to the "entity" that needs them? +

            +

            + +

            +You write Java classes named Controls to implement your Game Entities, and define an Entity's visuals, attributes, and behaviours. In jME, Spatials (Nodes or Geometrys) are the visual representation of the game entity in the scene graph. +

            +
              +
            • Game entities have attributes ??? All Entities are neutral things, only their attributes define what an entity actually is (a person or a brick). In jME, we call these class fields of Spatials "user data".
              +Example: Players have class fields for id, health, coins, inventory, equipment, profession.
              +
            • +
            • Game entities have behaviours ??? Behaviour systems communicate about the game state and modify attributes. In jME, these game mechanics are implemented in modular update() methods that all hook into the main update loop.
              +Example: Players have methods such as walk(), addGold(), getHealth(), pickUpItem(), dropItem(), useItem(), attack().
              +
            • +
            + +

            + +

            Follow the Best Practice: In general, use composition over inheritance and keep "what an entity does" (behaviour system) separate from "what this entity is" (attributes).

            +

            -Avoid the Anti-Pattern: You might be tempted to create character classes using Java inheritance: For example, MyMobileNode extends Node and then MyNPC extends MyMobileNode. Then you might create subclasses such as MyFighterNPC extends MyNPC and MyShopKeeperNPC extends MyNPC. But what if you need a group of MyShopKeeperNPCs that fight back? Do you write a MyFightingShopKeeperNPC class, and copy and paste fighting methods from MyFighterNPC? The inheritance approach will soon turn out to be an unmaintainable mess – this is not what you want. + +

            -Follow the Best Practice: You can add user data, accessors, and methods directly to each Spatial. +If your game is even more complex, you may want to learn about "real" Entity Systems, which form a quite different programming paradigm from object oriented coding but are scalable to very large proportions. Note however that this topic is very unintuitive to handle for an OOP programmer and you should really decide on a case basis if you really need this or not and gather some experiences before diving head first into a MMO project :-)

              -
            • Use ''setUserData()'' to add custom fields with user data to Spatials.
              +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • -
            • Use Controls to add custom methods (including getters and setters) to Spatials.
              +
            - +

            The Smart Way to Access Game Features

            @@ -297,7 +338,7 @@ An AppState has access to all game features in the SimpleApplication via the
            - +

            The Smart Way to Implement Game Logic

            @@ -359,20 +400,20 @@ Read all about +

            Optimize Application Performance

              -
            • Optimization – How to avoid wasting cycles
              +
            • Optimization ??? How to avoid wasting cycles
            • -
            • Multithreading – Use concurrency for long-running backgroudn tasks, but don't manipulate the scene graph from outside the main thread (update loop)!
              +
            • Multithreading ??? Use concurrency for long-running background tasks, but don't manipulate the scene graph from outside the main thread (update loop)!
            • -
            • You can add a Java Profiler to the jMonkeyEngine SDK via Tools → Plugins → Available. The profiler presents statistics on the lifecycle of methods and objects. Performance problems may be caused by just a few methods that take long, or are called too often (try to cache values to avoid this). If object creation and garbage collection counts keep increasing, you are looking at a memory leak.
              +
            • You can add a Java Profiler to the jMonkeyEngine SDK via Tools ??? Plugins ??? Available. The profiler presents statistics on the lifecycle of methods and objects. Performance problems may be caused by just a few methods that take long, or are called too often (try to cache values to avoid this). If object creation and garbage collection counts keep increasing, you are looking at a memory leak.
            - +

            Don't Mess With Geometric State

            @@ -390,7 +431,7 @@ Read all about +

            Maintain Internal Documentation

            @@ -413,7 +454,7 @@ Treat javadoc as messages to your future self. "genNextVal() generates the

            - +

            Debugging and Test Phase

            @@ -427,24 +468,24 @@ Treat javadoc as messages to your future self. "genNextVal() generates the

            -Unit Testing () has a different status in 3D graphics development than in other types of software. You cannot write assertions that automatically test whether the rendered image looks correct, or whether interactions are intuitive. Still you should create simple test cases for individual game features such as loaders, content generators, effects. Run the test cases now and then to see whether they still work as intended – or whether they are suffering from regressions or side-effects. Keep the test classes in the test directory of your project, don't include them in the distribution. +Unit Testing () has a different status in 3D graphics development than in other types of software. You cannot write assertions that automatically test whether the rendered image looks correct, or whether interactions are intuitive. Still you should create simple test cases for individual game features such as loaders, content generators, effects. Run the test cases now and then to see whether they still work as intended ??? or whether they are suffering from regressions or side-effects. Keep the test classes in the test directory of your project, don't include them in the distribution.

            -Quality Assurance (QA) means repeatedly checking a certain set of features that must work, but that might be unexpectedly broken as a side-effect. Every game has some crazy bugs somewhere – but basic tasks must work, no excuse. This includes installing and de-installing; saving and loading; changing options; starting, pausing, quitting; basic actions such as walking, fighting, etc. After every milestone, you go through your QA list again and systematically look for regressions or newly introduced bugs. Check the application on every supported operating system and hardware (!) because not all graphic cards support the same features. If you don't find the obvious bugs, your users will, and carelessness will put them off. +Quality Assurance (QA) means repeatedly checking a certain set of features that must work, but that might be unexpectedly broken as a side-effect. Every game has some crazy bugs somewhere ??? but basic tasks must work, no excuse. This includes installing and de-installing; saving and loading; changing options; starting, pausing, quitting; basic actions such as walking, fighting, etc. After every milestone, you go through your QA list again and systematically look for regressions or newly introduced bugs. Check the application on every supported operating system and hardware (!) because not all graphic cards support the same features. If you don't find the obvious bugs, your users will, and carelessness will put them off.

            -Alpha and Beta Testing means that you ask someone to try to install and run your game. It should be a real user situation, where they are left to figure out the installation and gameplay by themselves–you only can include the usual read-me and help docs. Provide the testers with an easy method to report back what problems they encountered, what they liked best, or why they gave up. Evaluate whether reported problems are one-off glitches, or whether they must be fixed for the game to be playable for everyone. +Alpha and Beta Testing means that you ask someone to try to install and run your game. It should be a real user situation, where they are left to figure out the installation and gameplay by themselves???you only can include the usual read-me and help docs. Provide the testers with an easy method to report back what problems they encountered, what they liked best, or why they gave up. Evaluate whether reported problems are one-off glitches, or whether they must be fixed for the game to be playable for everyone.

            - +

            Release Phase

            - +

            Pre-Release To-Do List

              @@ -454,13 +495,13 @@ Treat javadoc as messages to your future self. "genNextVal() generates the
            • Verify that your code loads the optimized .j3o files, and not the original model formats.
            • -
            • Prepare licenses of assets that you use for inclusion. (You did obtain permission to use them, right…?)
              +
            • Prepare licenses of assets that you use for inclusion. (You did obtain permission to use them, right????)
            • Switch off fine logging output.
            • Prepare promotional art: The most awesome screenshots (in thumbnail, square, vertical, horizontal, and fullscreen formats) and video clips. Include name, contact info, slogan, etc., so future customers can find you.
            • -
            • Prepare a readme.txt file, or installation guide, or handbook – if applicable.
              +
            • Prepare a readme.txt file, or installation guide, or handbook ??? if applicable.
            • Get a certificate if one is required for your distribution method (see below).
            • @@ -469,7 +510,7 @@ Treat javadoc as messages to your future self. "genNextVal() generates the
            - +

            Distributing the Executables

            - +

            view online version

            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html index d67a1f069..06a8687a5 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html @@ -312,10 +312,10 @@ Objects in the translucent bucket (e.g. particles) are not affected by SceneProc Standard Material TransparencyDescriptionExample - getAdditionalRenderState().setBlendMode(BlendMode.Off);This is the default, no transparency.Use for all opaque objects like walls, floors, people… + getAdditionalRenderState().setBlendMode(BlendMode.Off);This is the default, no transparency.Use for all opaque objects like walls, floors, people??? - getAdditionalRenderState().setBlendMode(BlendMode.Alpha);Interpolates the background pixel with the current pixel by using the current pixel's alpha.This is the most commonly used BlendMode for transparency and translucency: Frosted window panes, ice, glass, alpha-blended vegetation textures… + getAdditionalRenderState().setBlendMode(BlendMode.Alpha);Interpolates the background pixel with the current pixel by using the current pixel's alpha.This is the most commonly used BlendMode for transparency and translucency: Frosted window panes, ice, glass, alpha-blended vegetation textures??? getAdditionalRenderState().setDepthWrite(false);Disables writing of the pixel's depth value to the depth buffer.Deactivate this on Materials if you expect two or more transparent/translucent objects to be obscuring one another, but you want to see through both. @@ -334,7 +334,7 @@ Deactivate Alpha Testing for gradually translucent objects, suc
            mat.setBoolean("UseAlpha",true);

            - The Material Color bleeds through the transparent areas of the top-layer DiffuseMap texture. In this case you do not need BlendMode Alpha – because it's not the whole Material that is transparent, but only one of the texture layers. You use this bleed-through effect, for example, to generate differently colored uniforms, animals, or plants, where each Material uses the same "template" DiffuseMap texture but combines it with a different color. + The Material Color bleeds through the transparent areas of the top-layer DiffuseMap texture. In this case you do not need BlendMode Alpha ??? because it's not the whole Material that is transparent, but only one of the texture layers. You use this bleed-through effect, for example, to generate differently colored uniforms, animals, or plants, where each Material uses the same "template" DiffuseMap texture but combines it with a different color.

            diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html index c2c4a9666..91afc1e1e 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html @@ -12,7 +12,7 @@ Note: Typically you have to string these formulas together. Look in the table fo

            - + + + +
            I have…I want…FormulaI have???I want???Formula
            normalized direction and length
            @@ -23,6 +23,13 @@ new direction vector v0
            v0 = n1.mult(d1) point and direction vector
            p1,v1
            to move the point
            new point p0
            p0 = p1.add(v1)
            direction, position and distance
            +v1,p1,dist
            Position at distance
            +p2
            v1.normalzeLocal()
            +scaledDir = v1.mult(dist)
            +p2 = p1.add(scaledDir)
            two direction vectors or normals
            @@ -52,9 +59,9 @@ new Quaternion q
            Quaternion q = new Quaternion();
            q.lookAt(v,up)
            -
            +
            - +
            I have…I want…FormulaI have???I want???Formula
            angle in degrees
            @@ -100,9 +107,9 @@ x and z coordinates
            float x = FastMath.cos(phi)*r;
            float z = FastMath.sin(phi)*r;
            - +
            - +

            Local vs Non-local methods?

              @@ -115,5 +122,5 @@ float z = FastMath.sin(phi)*r;
            - +

            view online version

            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html index fec41c259..5e14641a7 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html @@ -128,19 +128,26 @@ Install a graphic editor such as Gimp or Photoshop. Consult the graphic

            -

            Storing the textures inside your project directory is necessary for the paths in JME's binary model files (.j3o) to work. Treat the paths of your assets like class names of java classes, they define a specific asset. When you later generate .j3o files, compile class files, and distribute the project, paths and files need to be available in their final absolute form. It is imperative to keep the same directory structure from beginning to end.
            +Storing the textures inside your project directory is necessary for the paths in JME's binary model files (.j3o) to work. Treat the paths of your assets like class names of java classes, they define a specific asset. When you later generate .j3o files, compile class files, and distribute the project, paths and files need to be available in their final absolute form. It is imperative to keep the same directory structure from beginning to end. +

            + +

            If you ever change the assets directory structure, you will have to do manual refactoring (just as for Java package name changes): You will need to re-export all affected models, regenerate all affected .j3o files, and manually update all affected paths in your code. -

            - +

            Create 3D Models

            Install a mesh editor such as Blender or 3D Studio MAX. Reuse textures and materials as much as possible. Consult the mesh editor's documentation for specific details how to do the following tasks. +

            + +

            +

            Note that UV coords are part of the mesh and not part of the material, so if you import your mesh successfully you can later apply the texture again and it will map correctly. +

              @@ -175,10 +182,11 @@ See also:

              When I load the model in JME, why does it look different than in the 3D editor?
              3D models will never look identical in a game engine and in a mesh editor. Mesh editors are optimized for high-quality offline rendering, and many of the material and texture options simply do not work in a live rendering context. Also, the shaders that render the materials in JME are different than in your mesh editor's renderer. Remind your graphic designers to only focus on features that game engines support.

              +

              - +

              Convert 3D Models to .j3o Format

              @@ -191,7 +199,7 @@ Convert all models and scenes to jME3's binary .j3o format to load() them.
            1. Confirm that you exported the model into the assets/Textures directory (or subdirectories) together with all its textures.
            2. In the SDK, right-click the model and choose "Convert to j3o Binary".
              -The paths in the j3o now reference files with an absolute assets/Textures/… path.
              +The paths in the j3o now reference files with an absolute assets/Textures/??? path.
            3. Now, move the .j3o into the corresponding assets/Models/ or assets/Scenes/ directory.
            4. @@ -205,7 +213,7 @@ This process ensures that the texture paths are correct, and it also keeps your

              -Must I convert to .j3o? – Yes! +Must I convert to .j3o? ??? Yes!

              • .j3o is an optimized format to store parts of a jME3 scene graph. A .j3o file can contain one shape, one model, or a whole scene.
                @@ -228,7 +236,7 @@ Use the jMonkeyEngine SceneComposer to add these properties.

                - +

                See Also

                  @@ -247,5 +255,5 @@ Use the jMonkeyEngine SceneComposer to add these properties.
                - +

                view online version

                \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/optimization.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/optimization.html index 82207e01a..050fde0cf 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/optimization.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/optimization.html @@ -71,11 +71,11 @@ SimpleApplication displays a HUD with statistics. Use app.setDisplayStatVi The StatsView counts Objects,Uniforms,Triangles,Vertices are in the scene, and it counts how many FrameBuffers, Textures, or Shaders:

                  -
                • … were switched in the last frame (S)
                  +
                • ??? were switched in the last frame (S)
                • -
                • … were used during the last frame (F)
                  +
                • ??? were used during the last frame (F)
                • -
                • … exist in OpenGL memory (M)
                  +
                • ??? exist in OpenGL memory (M)
                diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html index ff700bffe..fd4ad46c1 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/simpleapplication.html @@ -72,7 +72,7 @@ setSettings()Use this camera provides perspective projection, 45° field of view, near plane = 1 wu, far plane = 1000 wu. +getCamera()The default camera provides perspective projection, 45?? field of view, near plane = 1 wu, far plane = 1000 wu. assetManager
                @@ -112,11 +112,11 @@ getStateManager()You use the Application's state manager to activa stop()Stops the running jME3 game and closes the jME3 window. - start(Type.Headless) etcSwitch Context com.​jme3.​system.​JmeContext.Type when starting the application:
                -Type.Display – jME application runs in a window of its own. (This is the default.)
                -Type.Canvas – jME application is embedded in a Swing Canvas.
                -Type.Headless – jME application runs its event loop without calculating any view and without opening any window. Can be used for a Headless Server application.
                -Type.OffscreenSurface – jME application view is not shown and no window opens, but everything calculated and cached as bitmap (back buffer) for use by other applications. + start(Type.Headless) etcSwitch Context com.???jme3.???system.???JmeContext.Type when starting the application:
                +Type.Display ??? jME application runs in a window of its own. (This is the default.)
                +Type.Canvas ??? jME application is embedded in a Swing Canvas.
                +Type.Headless ??? jME application runs its event loop without calculating any view and without opening any window. Can be used for a Headless Server application.
                +Type.OffscreenSurface ??? jME application view is not shown and no window opens, but everything calculated and cached as bitmap (back buffer) for use by other applications.
                diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/ios.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/ios.html index 0d2598a25..dc032b1ce 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/ios.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/ios.html @@ -21,7 +21,7 @@ iOS deployment works via cross-compilation to native iOS ARM code, there is no v

                -To enable iOS deployment, go to the project settings and under "Application→iOS" select the "Enable iOS deployment" checkbox, adapt the application ID and then press OK. +To enable iOS deployment, go to the project settings and under "Application???iOS" select the "Enable iOS deployment" checkbox, adapt the application ID and then press OK.

                @@ -78,8 +78,15 @@ Effectively native code can reside in both the Xcode project and in the io

                Java code for iOS should be in the ios/src 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 notes in the android deployment documentation. -

                +
                diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/math.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/math.html index e6dd3e7fd..1647dbcd8 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/math.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/math.html @@ -179,7 +179,7 @@ The transpose of a matrix M = [mij] is MT< - + @@ -283,7 +283,7 @@ where M is the 3x3 matrix (containing any rotation/scale information), T is the

                -Both Matrix3f and Matrix4f store their values as floats and are publicly available as (m00, m01, m02, …, mNN) where N is either 2 or 3. +Both Matrix3f and Matrix4f store their values as floats and are publicly available as (m00, m01, m02, ???, mNN) where N is either 2 or 3.

                @@ -313,7 +313,7 @@ Vectors are used to represent a multitude of things in jME, points in space, ver

                -A Vector is defined by an n-tuple of real numbers. V = <V1, V2,…, Vn>. +A Vector is defined by an n-tuple of real numbers. V = <V1, V2,???, Vn>.

                @@ -332,7 +332,7 @@ We have two Vectors (2f and 3f) meaning we have tuples of 2 float values or 3 fl

                -A Vector can be multiplied by a scalar value to produce a second Vector with the same proportions as the first. aV = Va = <aV1, aV2,…,aVn> +A Vector can be multiplied by a scalar value to produce a second Vector with the same proportions as the first. aV = Va = <aV1, aV2,???,aVn>

                @@ -346,7 +346,7 @@ Adding or subtracting two Vectors occurs component-wise. That is the first compo

                -P + Q = <P1+Q1, P2+Q2, …, Pn+Qn> +P + Q = <P1+Q1, P2+Q2, ???, Pn+Qn>

                diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/simpleapplication_from_the_commandline.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/simpleapplication_from_the_commandline.html index f37c44e8b..437e0288f 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/simpleapplication_from_the_commandline.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/simpleapplication_from_the_commandline.html @@ -127,13 +127,13 @@ public class HelloJME3 extends SimpleApplication {

                -We build the sample application into the build directory… +We build the sample application into the build directory???

                cd HelloJME3
                 javac -d build -cp "lib/eventbus-1.4.jar:lib/j-ogg-oggd.jar:lib/j-ogg-vorbisd.jar:lib/jME3-lwjgl-natives.jar:lib/jbullet.jar:lib/jinput.jar:lib/lwjgl.jar:lib/stack-alloc.jar:lib/vecmath.jar:lib/xmlpull-xpp3-1.1.4c.jar:lib/jME3-blender.jar:lib/jME3-core.jar:lib/jME3-desktop.jar:lib/jME3-jogg.jar:lib/jME3-plugins.jar:lib/jME3-terrain.jar:lib/jME3-testdata.jar:lib/jME3-niftygui.jar:lib/nifty-default-controls.jar:lib/nifty-examples.jar:lib/nifty-style-black.jar:lib/nifty.jar:." src/hello/HelloJME3.java 

                -… and run it. +??? and run it.

                cd build
                 java -cp "../lib/eventbus-1.4.jar:../lib/j-ogg-oggd.jar:../lib/j-ogg-vorbisd.jar:../lib/jME3-lwjgl-natives.jar:../lib/jbullet.jar:../lib/jinput.jar:../lib/lwjgl.jar:../lib/stack-alloc.jar:../lib/vecmath.jar:../lib/xmlpull-xpp3-1.1.4c.jar:../lib/jME3-blender.jar:../lib/jME3-core.jar:../lib/jME3-desktop.jar:../lib/jME3-jogg.jar:../lib/jME3-plugins.jar:../lib/jME3-terrain.jar:../lib/jME3-testdata.jar:../lib/jME3-niftygui.jar:../lib/nifty-default-controls.jar:../lib/nifty-examples.jar:../lib/nifty-style-black.jar:../lib/nifty.jar:." hello/HelloJME3
                diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/terminology.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/terminology.html index 045312021..a40edc784 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/terminology.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/terminology.html @@ -17,7 +17,7 @@ Before you start, make certain you are familiar with the following concepts and OpenGL is the Open Graphics Library, a platform-independent specification for rendering 2D/3D computer graphics. For Java, there are two implementations of OpenGL-based renderers:

                  -
                1. Lightweight Java Game Library (LWJGL) – jme3 uses lwjgl.
                  +
                2. Lightweight Java Game Library (LWJGL) ??? jme3 uses lwjgl.
                3. Java OpenGL (JOGL)
                4. @@ -65,7 +65,7 @@ The jME Context makes settings, renderer, timer, input and even

                  -Most visible objects in a 3D scene are made up of polygon meshes – characters, terrains, buildings, etc. A mesh is a grid-like structure that represents a complex shape. The advantage of a mesh is that it is mathematically simple enough to render in real time, and detailed enough to be recognizable. +Most visible objects in a 3D scene are made up of polygon meshes ??? characters, terrains, buildings, etc. A mesh is a grid-like structure that represents a complex shape. The advantage of a mesh is that it is mathematically simple enough to render in real time, and detailed enough to be recognizable.

                  @@ -96,7 +96,7 @@ What we call "color" is merely part of an object's light reflecti

                  Ambient color

                    -
                  • The uniform base color of the mesh – what it looks like when not influenced by any light source.
                    +
                  • The uniform base color of the mesh ??? what it looks like when not influenced by any light source.
                  • Usually similar to the Diffuse color.
                  • @@ -260,7 +260,7 @@ Bump maps are used to describe detailed shapes that would be too hard or simply

                      -
                    • A well-done Normal Map makes a shape more detailed – without the need to add costly polygons to the mesh. It contains shading information that makes the object appear smoother and more fine-grained.
                      +
                    • A well-done Normal Map makes a shape more detailed ??? without the need to add costly polygons to the mesh. It contains shading information that makes the object appear smoother and more fine-grained.
                    • When you open a Normal Map in an image editor, it looks like a false-color version of the Color Map. Normal maps however are never used for coloring, instead, each the color values encode displacement data of bumps and cracks on the surface. Displacement data is represented by the Surface Normals of the slopes, hence the name.
                    • @@ -294,7 +294,7 @@ Bump maps are used to describe detailed shapes that would be too hard or simply

                      -Tiles are a very simple, commonly used type of texture. When texturing a wide area (e.g. walls, floors), you don't create one huge texture – instead you tile a small texture repeatedly to fill the area. +Tiles are a very simple, commonly used type of texture. When texturing a wide area (e.g. walls, floors), you don't create one huge texture ??? instead you tile a small texture repeatedly to fill the area.

                      @@ -316,7 +316,7 @@ See also this tutorial on

                  -
                5. +
                6. ???
                7. @@ -634,8 +634,8 @@ You calculate the Surface Normal by calculating the cross product.

                  -The cross product is a calculation that you use to find a perpendicular vector (an orthogonal, a "right angle" at 90°). -In 3D space, speaking of an orthogonal only makes sense with respect to a plane. You need two vectors to uniquely define a plane. The cross product of the two vectors, v1 × v2, is a new vector that is perpendicular to this plane. A vector perpendicular to a plane is a called Surface Normal. +The cross product is a calculation that you use to find a perpendicular vector (an orthogonal, a "right angle" at 90??). +In 3D space, speaking of an orthogonal only makes sense with respect to a plane. You need two vectors to uniquely define a plane. The cross product of the two vectors, v1 ?? v2, is a new vector that is perpendicular to this plane. A vector perpendicular to a plane is a called Surface Normal.

                  diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html index bca8c13b3..ab4542002 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html @@ -109,7 +109,7 @@ A Spatial can be transformed, loaded and saved. There are two types of Spatials,

                - +
                111 123
                222123222 ??? 123
                333 123 Content: Transformations, mesh, material. Transformations. No mesh, no material.
                Examples: A box, a sphere, player, a building, a piece of terrain, a vehicle, missiles, NPCs, etc… The rootNode, the guiNode, an audio node, a custom grouping node, etc. Examples: A box, a sphere, player, a building, a piece of terrain, a vehicle, missiles, NPCs, etc??? The rootNode, the guiNode, an audio node, a custom grouping node, etc.
                @@ -132,9 +132,9 @@ The intermediate and advanced docume

                See also

                  -
                • Spatial – More details about working with Nodes and Geometries
                  +
                • Spatial ??? More details about working with Nodes and Geometries
                • -
                • Traverse SceneGraph – Find any Node or Geometry in the scenegraph.
                  +
                • Traverse SceneGraph ??? Find any Node or Geometry in the scenegraph.
                diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/3ds_to_blender_to_jmp.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/3ds_to_blender_to_jmp.html index 6666452c4..2cfbc4498 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/3ds_to_blender_to_jmp.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/3ds_to_blender_to_jmp.html @@ -16,7 +16,7 @@ The jMonkeyEngine SDK suppor I'm using the blender 2.59 at this tutorial, but if you blender 2.49b, no problem ;). After you saved your .3ds file in 3dmax, open the blender, delete the default cube, -and import your .3ds file via File—→Import—–>3D Studio. +and import your .3ds file via File??????Import??????>3D Studio.

                diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/application_deployment.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/application_deployment.html index 6d4c08314..eade58953 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/application_deployment.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/application_deployment.html @@ -42,7 +42,7 @@ Make your game unique and recognizable:

              • Right-click the project and open the Properties
              • -
              • Open the Properties → Application section. Here you configure your branding:
                +
              • Open the Properties ??? Application section. Here you configure your branding:
                1. Title: Enter the game's name
                2. @@ -119,7 +119,7 @@ Most operating systems execute a JAR when users double-click on it, but you can -

                  Desktop Executables

                  +

                  Desktop Executables (.EXE, .APP, .JAR)

                  @@ -144,8 +144,8 @@ When you build your project, zip files for each selected platform will be create

                  - -

                  Web Start (JNLP)

                  + +

                  Web Start (.JNLP)

                  @@ -181,7 +181,7 @@ Also, see this +

                  Browser Applet

                  @@ -246,17 +246,35 @@ The dist/Applet directory now contains all the files necessary for
                  - +

                  Android Mobile Device

                  -You can set the jMonkeyEngine SDK to build an executable for Android mobile platforms. Learn more about Android Support here. +You can set the jMonkeyEngine SDK to build an executable for Android mobile platforms. +

                  + +

                  +Learn more about Android Support here. +

                  + +
                  + +

                  iOS Device

                  +
                  + +

                  + +You can set the jMonkeyEngine SDK to build an executable for iOS platforms. Mac support is work in progress. +

                  + +

                  +Learn more about iOS Support here.

                  - +

                  Tip: Switching Build Configurations

                  @@ -281,7 +299,7 @@ Now you can use the Set Project Configuration popup menu to switch

                  - +

                  Tip: Reduce Distribution File Size

                  @@ -324,5 +342,5 @@ jme3-libraries-gui, jme3-libraries-physics, jme3-libraries-video, etc.
                  - +

                  view online version

                  \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/asset_packs.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/asset_packs.html index 338746687..9d0fb2ab6 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/asset_packs.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/asset_packs.html @@ -32,7 +32,7 @@ The AssetPack browser in jMonkeyEngine

                  -The AssetPack browser uses a predefined directory to store the AssetPacks which is also used for new AssetPack projects. You can see and change the folder path in the AssetPack preferences (jMonkeyEngine SDK→Settings). +The AssetPack browser uses a predefined directory to store the AssetPacks which is also used for new AssetPack projects. You can see and change the folder path in the AssetPack preferences (jMonkeyEngine SDK???Settings).

                  @@ -75,7 +75,7 @@ Editing of asset and project info, adding of new assets and setting their proper

                    -
                  1. Choose "File → New Project" from the menu
                    +
                  2. Choose "File ??? New Project" from the menu
                  3. Choose "AssetPack Project"
                  4. @@ -150,7 +150,7 @@ If the material file is an Ogre material file (.material) it will be used for lo

                    -You can change the single assets properties in the properties window after you have added them. Just select an asset and open the properties window (Windows→Properties). +You can change the single assets properties in the properties window after you have added them. Just select an asset and open the properties window (Windows???Properties).

                    @@ -181,12 +181,12 @@ You can publish your AssetPacks either as a zip file or directly to jmonkeyengin

                    -

                    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 SDK→Options→Asset Packs first. +

                    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 SDK???Options???Asset Packs first.

                      -
                    1. Right-Click your AssetPack project in the SDK and select "Publish AssetPack…"
                      +
                    2. Right-Click your AssetPack project in the SDK and select "Publish AssetPack???"
                    3. Check the description etc. settings, and press "Next".
                    4. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/blender.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/blender.html index d6d2cd0dc..7d4a77494 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/blender.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/blender.html @@ -88,7 +88,7 @@ By default a BlenderModelLoader is registered with your assetManager to load ble
                      • Materials are loaded and attached to geometries.
                      • -
                      • Because jMonkeyEngine supports only one material for each Mesh, if you apply several materials to one object – it will be split into several meshes (but still in one node).
                        +
                      • Because jMonkeyEngine supports only one material for each Mesh, if you apply several materials to one object ??? it will be split into several meshes (but still in one node).
                      • Several kinds of input mapping is supported: UV maps, Orco and Nor; all projection types for 2D textures, XYZ coordinates mapping.
                      • @@ -313,7 +313,7 @@ Probably versions before 2.49 will work pretty well too, but I never checked tha

                        -I know that the current version of loader is not yet fully functional, but belive me – Blender is a very large issue ;) +I know that the current version of loader is not yet fully functional, but belive me ??? Blender is a very large issue ;) Hope I will meet your expectations.

                        diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/code_editor.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/code_editor.html index 62cf3ae2a..a7e4491b6 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/code_editor.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/code_editor.html @@ -92,7 +92,7 @@ Examples:
                      • Place the caret in a method's return type to highlight all exit points
                      • -
                      • and many more…
                        +
                      • and many more???
                      @@ -185,7 +185,7 @@ Choose Windows > Palette to open the context-sensitive Palette. The jMonkeyEn

                      -Tip: Choose Tools > Add to Palette… from the menu to add your own code snippets to the Palette. (not available yet in beta build) +Tip: Choose Tools > Add to Palette??? from the menu to add your own code snippets to the Palette. (not available yet in beta build)

                    diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html index 5df3fb480..331b8cb4b 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/debugging_profiling_testing.html @@ -35,7 +35,7 @@ The jMonkeyEngine SDK suppor
                  5. You can use tests such as assertTrue(), assertFalse(), assertEquals(), or assert().
                      -
                    • The following example assertions test an addition method: assert( add(1, 1) == 2); assertTrue( add(7,-5) == add(-5,7) )…
                      +
                    • The following example assertions test an addition method: assert( add(1, 1) == 2); assertTrue( add(7,-5) == add(-5,7) )???
                  6. @@ -121,7 +121,7 @@ In the jMonkeyEngine SDK, yo
                  7. Inspect the classes loaded on the heap and the percentage and number of object instances. Right-click a class in the Loaded Classes window and choose Show in Instances view (JDK 6 only).
                  8. -
                  9. And more…
                    +
                  10. And more???
                  11. @@ -168,11 +168,11 @@ If you do not see a Profiler menu in the jMonkeyEngine SDK (recommended) then you benefit from the provided build script. Every new project comes with a default Ant script. The toolbar buttons and clean/build/run actions in the jMonkeyEngine SDK are already pre-configured. +If you use jMonkeyEngine libraries together with the jMonkeyEngine SDK (recommended) then you benefit from the provided build script. Every new project comes with a default Ant script. The toolbar buttons and clean/build/run actions in the jMonkeyEngine SDK are already pre-configured.

                    - +

                    Default Targets

                    @@ -18,23 +18,23 @@ The build script includes targets for the following tasks:

                      -
                    • clean – deletes the built classes and executables in the dist directory.
                      +
                    • clean ??? deletes the built classes and executables in the dist directory.
                    • -
                    • jar – compiles the classes, builds the executable JAR in the dist directory, copies libraries.
                      +
                    • jar ??? compiles the classes, bundles the assets, builds the executable JAR in the dist directory, copies libraries.
                    • -
                    • run – runs the executable JAR.
                      +
                    • run ??? builds and runs the executable JAR (e.g. for the developers to test it).
                    • -
                    • javadoc – compiles javadoc from your java files into html files.
                      +
                    • javadoc ??? compiles javadoc from your java files into html files.
                    • -
                    • debug – used by the jMonkeyEngine SDK Debugger plugin.
                      +
                    • debug ??? used by the jMonkeyEngine SDK Debugger plugin.
                    • -
                    • test – Used by the jMonkeyEngine SDK JUnit Test plugin.
                      +
                    • test ??? Used by the jMonkeyEngine SDK JUnit Test plugin.

                    -Usage on the command line: +You can call these targets on the command line using default Ant commands:

                    ant clean
                    @@ -42,11 +42,12 @@ ant jar
                     ant run

                    -Recommended Usage: Use the menu items or toolbar buttons in the jMonkeyEngine SDK to trigger clean, build, and run actions. +

                    We recommended to use the user-friendly menu items, F-keys, or toolbar buttons in the jMonkeyEngine SDK to trigger clean, build, and run actions. +

                    - +

                    Browsing the Build Script

                    - +

                    Adding Custom Targets

                    @@ -89,11 +90,25 @@ Read the comments in build.xml, they explain how to override target

                    -Additionally, you can manually override the targets in the *-impl.xml files that are created when you change the deployment settings: linuxlauncher-impl.xml, macapp-impl.xml, mobile-impl.xml, jnlp-impl.xml, etc. Simply copy&paste a target from these files into the main build.xml and that will be run instead with all modifications. +Additionally, you can manually override the targets in the *-impl.xml files that are created when you change the deployment settings: +

                    +
                      +
                    • linuxlauncher-impl.xml,
                      +
                    • +
                    • macapp-impl.xml,
                      +
                    • +
                    • mobile-impl.xml,
                      +
                    • +
                    • jnlp-impl.xml, etc.
                      +
                    • +
                    + +

                    +Simply copy&paste a target from these files into the main build.xml and that will be run instead with all modifications.

                    -Don't edit the base *-impl.xml files directly, if you deactivate and reactivate a deployment setting, these files are reset, so you have to copy the whole target and its dependencies, else your build script will become invalid when you disable the deployment option. +Don't edit the base *-impl.xml files directly, if you deactivate and reactivate a deployment setting, the SDK resets these files, so you have to copy the whole target and its dependencies, else your build script will become invalid when you disable the deployment option.

                    documentation, @@ -104,5 +119,5 @@ Don't edit the base *-impl.xml files directly, if you deactiva
                    - +

                    view online version

                    \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development.html index ee4be262f..c738634a6 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development.html @@ -81,21 +81,21 @@ If you feel like you want to make an addition to jMonkeyEngine SDK set up for plugin development as described here. +

                    +

                    Creating the plugin project (in jMonkeyEngine SDK):

                      @@ -35,7 +37,7 @@ Creating the plugin project (in jMonkeyEngine

                      -When you add a new file type for a model format or other asset file that can be loaded in jME3 you can start by using new file type template (New File→Module Development→File Type). Change the DataObject to extend AssetDataObject (general), SpatialAssetDataObject (some type of model) or BinaryModelDataObject (basically a j3o savable file). And possibly override the loadAsset and saveAsset methods which are used by the AssetData object. +When you add a new file type for a model format or other asset file that can be loaded in jME3 you can start by using new file type template (New File???Module Development???File Type). Change the DataObject to extend AssetDataObject (general), SpatialAssetDataObject (some type of model) or BinaryModelDataObject (basically a j3o savable file). And possibly override the loadAsset and saveAsset methods which are used by the AssetData object.

                      public class BlenderDataObject extends SpatialAssetDataObject {
                      diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/sceneexplorer.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/sceneexplorer.html
                      index 83a6f9910..5f7699fde 100644
                      --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/sceneexplorer.html
                      +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/sceneexplorer.html
                      @@ -300,7 +300,7 @@ public class NewRigidBodyAction extends AbstractNewControlAction {
                       

                      -You can create a new wizard using the wizard template in the SDK (New File→Module Development→Wizard). The Action that the template creates can easily be changed to one for adding a Control or Spatial or for applying a Tool. Note that we extend AbstractNewSpatialWizardAction here. +You can create a new wizard using the wizard template in the SDK (New File???Module Development???Wizard). The Action that the template creates can easily be changed to one for adding a Control or Spatial or for applying a Tool. Note that we extend AbstractNewSpatialWizardAction here.

                      diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/setup.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/setup.html index 1f6aa26a8..8a6e7464b 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/setup.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/setup.html @@ -12,7 +12,7 @@ Note that the creation of a Module Suite is only necessary if you want to upload

                      Using jMonkeyEngine SDK for development

                        -
                      • Install the "Netbeans Plugin Development" and "NetBeans API Documentation" plugins via Tools→Plugins
                        +
                      • Install the "Netbeans Plugin Development" and "NetBeans API Documentation" plugins via Tools???Plugins
                      • Create a new "Module Suite" project (can be any name, this will be your local "collection" of plugins that you create)
                      • @@ -34,14 +34,14 @@ Note that the creation of a Module Suite is only necessary if you want to upload
                      • Press Finish
                      • -
                      • To use core SDK or jME3 functions, add "SDK Core" and "SDK Core Libraries" via "Module Properties→Library→Add Dependency"
                        +
                      • To use core SDK or jME3 functions, add "SDK Core" and "SDK Engine" via "Module Properties???Library???Add Dependency"
                      • Write your plugin
                      - +

                      jMonkeyEngine SDK Contributions Update Center

                      @@ -64,13 +64,13 @@ To add your plugin to the repository, do the following:
                      • Make sure the plugin is part of a "Module Suite" 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)
                      • -
                      • In "Module Properties→Sources"
                        +
                      • In "Module Properties???Sources"
                        • Set the "Source Level" to 1.5 if possible (jMonkeyEngine SDK is compatible to Java 1.5)
                      • -
                      • In "Module Properties→API Versioning"
                        +
                      • In "Module Properties???API Versioning"
                        • Set a specification version for your plugin (like 0.8.1)
                        • @@ -78,7 +78,7 @@ To add your plugin to the repository, do the following:
                      • -
                      • In "Module Properties→Display"
                        +
                      • In "Module Properties???Display"
                        • Enter a purposeful description of your plugin and one of the following categories:
                            @@ -92,7 +92,7 @@ To add your plugin to the repository, do the following:
                        • -
                        • In "Module Properties→Build→Packaging"
                          +
                        • In "Module Properties???Build???Packaging"
                          • Add your name
                          • @@ -106,7 +106,7 @@ To add your plugin to the repository, do the following:
                          • Commit only the module project to trunk:
                              -
                            • Right click the Module Project and select "Versioning → Import into Subversion Repository"
                              +
                            • Right click the Module Project and select "Versioning ??? Import into Subversion Repository"
                            • Enter in the URL field
                            • @@ -147,5 +147,5 @@ As only the module project is being built on the server, any projects that creat

                      - +

                      view online version

                      \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/filters.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/filters.html index bef981daa..55193d0f9 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/filters.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/filters.html @@ -17,12 +17,12 @@ Filters are used for scene-wide effects such as glow, fog, blur. The
                        -
                      • In the Projects window, right-click Assets→Effects.
                        +
                      • In the Projects window, right-click Assets???Effects.
                      • -
                      • Select File→New File…
                        +
                      • Select File???New File???
                      • -
                      • Select Filter→Empty FilterPostProcessor File in the New File Wizard.
                        -An empty filter file appears in the Assets→Effects directory.
                        +
                      • Select Filter???Empty FilterPostProcessor File in the New File Wizard.
                        +An empty filter file appears in the Assets???Effects directory.
                      • Double-click the created file.
                        The file opens in the FilterExplorer window.
                        diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/log_files.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/log_files.html index 802147032..f791fd927 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/log_files.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/log_files.html @@ -4,7 +4,7 @@

                        -You find the jMonkeyEngine SDK log file in /dev/var/log/messages.log in the jMonkeyEngine SDK preferences folder. You can learn the location of the preferences folder in the “About” screen of the jMonkeyEngine SDK under the label Userdir. +You find the jMonkeyEngine SDK log file in /dev/var/log/messages.log in the jMonkeyEngine SDK preferences folder. You can learn the location of the preferences folder in the ???About??? screen of the jMonkeyEngine SDK under the label Userdir.

                          diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/material_editing.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/material_editing.html index b106755a4..1f81c291f 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/material_editing.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/material_editing.html @@ -32,7 +32,7 @@ The jMonkeyEngine uses a special Material format, which comes in .j3m files. You To create new .j3m files in the jMonkeyEngine SDK,

                            -
                          1. Right-click the assets/Materials directory and choose New… > Other.
                            +
                          2. Right-click the assets/Materials directory and choose New??? > Other.
                          3. In the New File Wizard, choose Material > Empty Material File, and click Next.
                          4. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/model_loader_and_viewer.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/model_loader_and_viewer.html index 7bcfb6d55..fec67eace 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/model_loader_and_viewer.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/model_loader_and_viewer.html @@ -8,7 +8,7 @@ The jMonkeyEngine SDK import

                            -Presently, is the preferred modelling tool for jME3 as it is also Open-Source Software and an exporter for OgreXML files exists. Note that the OgreXML exporter is not compatible with Blender 2.49 or before! +Presently, is the preferred modelling tool for jME3 as it is also Open-Source Software and an exporter for OgreXML files exists. There is a direct .blend file importer available in the SDK and you can directly import or store blend files in your project to convert them. If for some reason your version of blender is not compatible, you can use the default OgreXML format. Note that the OgreXML exporter is not compatible with Blender 2.49 or before!

                            @@ -16,7 +16,7 @@ Also, see this +

                            Installing the OgreXML Exporter in Blender

                            @@ -26,7 +26,7 @@ The jMonkeyEngine SDK includ

                              -
                            1. Select "Tools"→"OgreXML"→"Install Blender OgreXML" in the jMonkeyEngine SDK Menu
                              +
                            2. Select "Tools"???"OgreXML"???"Install Blender OgreXML" in the jMonkeyEngine SDK Menu
                            3. If you are presented a filechooser, select the folder where your blender scripts reside
                            4. @@ -41,12 +41,12 @@ Also check out how

                            - +

                            Importing and Viewing a Model

                            - +

                            Using the Model Importer Tool

                            @@ -82,7 +82,7 @@ The model is converted to j3o and all necessary files are copied to the project

                            - +

                            Using the model files directly

                            @@ -93,9 +93,11 @@ The model is converted to j3o and all necessary files are copied to the project
                            1. Create a separate folder for each model in the assets folder of your project.
                            2. -
                            3. Export the model from Blender as OgreXML into its subfolder in the asset folder of your project,
                              +
                            4. Save the model created in Blender (.blend) in the asset folder of your project,
                            5. -
                            6. Make sure that the OgreXML material file has the same name as the exported mesh or scene file!
                              +
                            7. Make sure that no textures are packed in the .blend file.
                              +
                            8. +
                            9. Make sure all textures used in the .blend file are in the assets folder of the project.
                            10. In the Projects Explorer Assets node, select the model that you want to import.
                            11. @@ -105,7 +107,7 @@ The model is converted to j3o and all necessary files are copied to the project
                            12. Double-click it to view it in the SceneViewer.
                            13. -
                            14. Click on the lightbulb to turn on the light if you cannot see your model
                              +
                            15. Click on the lightbulb to turn on the light if you cannot see your model.
                            @@ -116,10 +118,11 @@ Note: It is important that you copy the model file and its textures to the corre

                            Note: If the SceneViewer doesn't work refer to Troubleshooting jMonkeyEngine3 SDK. +

                            - +

                            Working With a Model

                            - +

                            view online version

                            \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/project_creation.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/project_creation.html index c3ad71cd9..3936c45a4 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/project_creation.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/project_creation.html @@ -62,7 +62,7 @@ Now let's have a look at the project's file structure in the File Expl

                              -
                            • assets – This directory corresponds to the Project Assets node. It is needed for the assetManager. This is the recommended internal structure:
                              +
                            • assets ??? This directory corresponds to the Project Assets node. It is needed for the assetManager. This is the recommended internal structure:
                              • assets/Interface
                              • @@ -82,17 +82,17 @@ Now let's have a look at the project's file structure in the File Expl
                            • -
                            • src – This directory corresponds to the Source Packages node. Your sources code goes here.
                              +
                            • src ??? This directory corresponds to the Source Packages node. Your sources code goes here.
                            • -
                            • nbproject – This is meta data used by the jMonkeyEngine SDK (don't edit).
                              +
                            • nbproject ??? This is meta data used by the jMonkeyEngine SDK (don't edit).
                            • -
                            • build.xml – This is an Ant build script that is hooked up to the clean/build/run/test actions in the jMonkeyEngine SDK. It loads a default build script, and allows you to further customize the build process. The Ant script also assures that you are able to clean/build/run/test your application outside of the jMonkeyEngine SDK – e.g. from the command line.
                              +
                            • build.xml ??? This is an Ant build script that is hooked up to the clean/build/run/test actions in the jMonkeyEngine SDK. It loads a default build script, and allows you to further customize the build process. The Ant script also assures that you are able to clean/build/run/test your application outside of the jMonkeyEngine SDK ??? e.g. from the command line.
                            • -
                            • build – This directory contains the compiled classes. (Will be generated by the jMonkeyEngine SDK when you build the project.)
                              +
                            • build ??? This directory contains the compiled classes. (Will be generated by the jMonkeyEngine SDK when you build the project.)
                            • -
                            • dist – This directory contains the executable JAR files. (Will be generated by the jMonkeyEngine SDK when you build the project.)
                              +
                            • dist ??? This directory contains the executable JAR files. (Will be generated by the jMonkeyEngine SDK when you build the project.)
                            • -
                            • test – The jMonkeyEngine SDK will store JUnit tests here if you create any. (Optional.)
                              +
                            • test ??? The jMonkeyEngine SDK will store JUnit tests here if you create any. (Optional.)
                            @@ -173,7 +173,7 @@ To build and run the main() of any file that is open in the editor, pre

                            Development Process

                              -
                            • Creating new files and packages: Select the Source Packages node (or any of its subnodes), and press ctrl-N (File→New File): Use the New File wizard to create new Java classes, Java packages, Java beans, Swing forms, JUnit files, j3m Materials, j3o scenes, j3f filters, and many more.
                              +
                            • Creating new files and packages: Select the Source Packages node (or any of its subnodes), and press ctrl-N (File???New File): Use the New File wizard to create new Java classes, Java packages, Java beans, Swing forms, JUnit files, j3m Materials, j3o scenes, j3f filters, and many more.
                            • Editing files: Open the Projects Explorer and double-click a Java file from the Source Packages to open it in the Editor. The jMonkeyEngine SDK Code Editor assists you in many ways, including syntactic and semantic code coloring, code completion, and javadoc. (More...)
                            • @@ -205,7 +205,7 @@ You may want to use external Java libraries in your jME project, for example con Add the library to the global library list:

                                -
                              • Select Tools→Libraries in the main menu.
                                +
                              • Select Tools???Libraries in the main menu.
                              • Click "New Library", enter a name for the library, and press OK
                              • diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/scene_composer.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/scene_composer.html index 7e0504764..ff8a9c5b8 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/scene_composer.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/scene_composer.html @@ -47,7 +47,7 @@ The jMonkeyEngine SDK stores To create a blank scene file do the following:

                                  -
                                1. Right click the "Scenes" folder in your Project Assets and select "New→Other"
                                  +
                                2. Right click the "Scenes" folder in your Project Assets and select "New???Other"
                                3. Select "Scene" to the left then select "Empty jME3 Scene" and press "Next"
                                4. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/scene_explorer.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/scene_explorer.html index 376719f0e..04b890568 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/scene_explorer.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/scene_explorer.html @@ -38,9 +38,9 @@ You open the SceneExplorer by viewing a model (j3o file or other) in the jMonkey

                                  Editing Objects in the scene

                                    -
                                  1. Select a node in the SceneExplorer window (Open via Window→SceneExplorer if not open)
                                    +
                                  2. Select a node in the SceneExplorer window (Open via Window???SceneExplorer if not open)
                                  3. -
                                  4. Edit the node in the Properties window (Open via Window→Properties if not open)
                                    +
                                  5. Edit the node in the Properties window (Open via Window???Properties if not open)
                                  6. You can rename a Spatial by right clicking it or by slowly double-clicking the node
                                  7. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/terrain_editor.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/terrain_editor.html index 8c28a0f49..dd6f98e2c 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/terrain_editor.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/terrain_editor.html @@ -34,7 +34,7 @@ This will pop up the Create Terrain wizard that will walk you through the steps

                                    -In order to see the terrain, you will need to add light to your scene. To do this, right-click the root node in the SceneExplorer window and select "Add Light→Directional Light" +In order to see the terrain, you will need to add light to your scene. To do this, right-click the root node in the SceneExplorer window and select "Add Light???Directional Light"

                                  diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/troubleshooting.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/troubleshooting.html index 246da1a75..81d2efc7e 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/troubleshooting.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/troubleshooting.html @@ -69,7 +69,7 @@ On Windows and Linux make sure you have the latest driver installed. Make sure i

                                  -First of all theres the new “OpenGL” settings page in the SDK global settings where you can enable the "heavyweight" canvas, which solved some issues for some people. The settings panel can be found under Tools→Options on Windows and Linux and in the main menu (or by pressing Apple-Comma) for MacOSX. +First of all theres the new ???OpenGL??? settings page in the SDK global settings where you can enable the "heavyweight" canvas, which solved some issues for some people. The settings panel can be found under Tools???Options on Windows and Linux and in the main menu (or by pressing Apple-Comma) for MacOSX.

                                  @@ -94,7 +94,7 @@ The OS-built-in look and feel might

                                  Compiz on Linux might cause issues, if you set its rendering quality to "medium" these should go away. -* Appearance→Set Special effects to → “Medium” +* Appearance???Set Special effects to ??? ???Medium???

                                  diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/use_own_jme.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/use_own_jme.html index 4e9a9a370..534edf8d0 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/use_own_jme.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/use_own_jme.html @@ -8,7 +8,7 @@
                                5. Compile jme3 project
                                6. -
                                7. Go to Tools → Libraries
                                  +
                                8. Go to Tools ??? Libraries
                                9. Press "New Library"
                                10. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/vehicle_creator.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/vehicle_creator.html index 29f946eaf..a72bf0d72 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/vehicle_creator.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/vehicle_creator.html @@ -12,7 +12,7 @@ Best results when car is facing in z direction (towards you).

                                  Usage

                                    -
                                  1. Select a j3o that contains a vehicle model and press the vehicle button (or right-click → edit vehicle)
                                    +
                                  2. Select a j3o that contains a vehicle model and press the vehicle button (or right-click ??? edit vehicle)
                                  3. The VehicleCreator automatically adds a PhysicsVehicleControl to the rootNode of the model if there is none
                                  4. @@ -57,7 +57,7 @@ Spatial car=assetManager.loadModel("Models/MyCar.j3o"); VehicleControl control=car.getControl(VehicleControl.class); rootNode.attachChild(car); physicsSpace.add(control); -  +?? //then use the control to control the vehicle: control.setPhysicsLocation(new Vector3f(10,2,10)); control.accelerate(100); diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/version_control.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/version_control.html index fdc710e0b..5212944da 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/version_control.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/version_control.html @@ -139,7 +139,7 @@ Receiving the latest changes from the team's repository is referred to as <
                                  5. Look at the red/green/blue marks in the editor to review what you have deleted/added/changed. Click the marks to review all differences in a file.
                                  6. -
                                  7. Choose Subversion > Show Changes to see all files that were recently changed – by you and other team members.
                                    +
                                  8. Choose Subversion > Show Changes to see all files that were recently changed ??? by you and other team members.
                                  9. Update again in case your team mates made changes while you were reviewing.
                                  10. diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/welcome/3_0rc3.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/welcome/3_0rc3.html index 8ce9ffb8d..344fdd63a 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/welcome/3_0rc3.html +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/welcome/3_0rc3.html @@ -2,8 +2,17 @@

                                    Welcome to the jMonkeyEngine SDK

                                    +

                                    +You are running the latest version of the SDK Application (jMonkeyEngine SDK 3.0RC3), see below how you can check for incremental updates. +

                                    + +

                                    +This place will be updated with the latest news about your SDK. + +

                                    +
                                    - +

                                    Getting Started

                                    @@ -16,7 +25,7 @@ Press the "New Project" button to create a new Project. Press the &quo

                                    - +

                                    Tutorials / Manual

                                    @@ -29,7 +38,7 @@ By pressing "F1" you can open the manual which contains up to date tut

                                    - +

                                    Updates

                                    @@ -43,5 +52,5 @@ You can check for incremental updates to the application via the Help menu:

                                    - +

                                    view online version

                                    \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/wiki-map.xml b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/wiki-map.xml index 45cde4a36..25fc4058d 100644 --- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/wiki-map.xml +++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/wiki-map.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/sdk/jme3-core/javahelp/wiki_help.properties b/sdk/jme3-core/javahelp/wiki_help.properties index 1ca19d4a5..4bda6168f 100644 --- a/sdk/jme3-core/javahelp/wiki_help.properties +++ b/sdk/jme3-core/javahelp/wiki_help.properties @@ -40,6 +40,7 @@ jme3:terminology,\ jme3:the_scene_graph,\ jme3:webstart,\ jme3:external:blender,\ +jme3:external:3dsmax,\ jme3:intermediate:appsettings,\ jme3:intermediate:best_practices,\ jme3:intermediate:file_types,\