\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/4.jpg b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/4.jpg
index 913e1c5a0..bec6cde94 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/4.jpg and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/4.jpg differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/5.jpg b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/5.jpg
index 3fe9f2499..f46cb4e58 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/5.jpg and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/5.jpg differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/6.jpg b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/6.jpg
index c2fc1a6cc..3955f21be 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/6.jpg and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/6.jpg differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/animation.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/animation.html
index bfc4d21b6..59074ae89 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/animation.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/animation.html
@@ -21,11 +21,11 @@ JME3 only loads and plays animated models, it does not create them.
What is required for an animated model? (See also: Animation terminology)
-
For each model, you have to segment the model into a skeleton (bone rigging).
+
For each model, you have to segment the model into a skeleton (bone rigging).
-
For each motion, you have to specify how the animation distorts parts of the model (skinning).
+
For each motion, you have to specify how the animation distorts parts of the model (skinning).
-
For each animation, you have to specify a series of snapshots of how the bones are positioned (keyframes).
+
For each animation, you have to specify a series of snapshots of how the bones are positioned (keyframes).
One model can contain several animations. You give every animation a name when you save it in the mesh editor.
@@ -62,7 +62,7 @@ What is required in your JME3-based Java class?
-
+
@@ -218,7 +218,7 @@ The following properties are set per AnimChannel.
setTime(1.3f);
Fast-forward or rewind to a certain moment in time of this animation.
-
+
The following information is available for a channel.
@@ -244,7 +244,7 @@ The following information is available for a channel.
getControl()
The AnimControl that belongs to this AnimChannel.
-
+
Use the following methods to add or remove individual bones to an AnimChannel. This is useful when you play two animations in parallel on two channels, and each controls a subset of the bones (e.g. one the arms, and the other the legs).
@@ -270,9 +270,9 @@ addToRootBone(bone1)
Add a series of bones to be influenced by this ani
addFromRootBone(bone1)
Add a series of bones to be influenced by this animation channel: Add all bones, starting from the given root bone, going towards the children bones.
@@ -290,14 +290,14 @@ Animations are played by channel. Note: Whether the animation c
The float value specifies the time how long the animation should overlap with the previous one on this channel. If set to 0f, then no blending will occur and the new animation will be applied instantly.
-
+
Tip: Use the AnimEventLister below to react at the end or start of an animation cycle.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/application_states.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/application_states.html
index 7b1f61053..3f693ff1e 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/application_states.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/application_states.html
@@ -62,20 +62,20 @@ You can! This is what AppStates are there for. An AppState class is subset of (o
-Each AppState lets you define what happens in the following situations:
+Each AppState lets you define what happens to it in the following situations:
The AppState is initialized: You load and initialize game data, InputHandlers, AppStates and Controls and attach nodes.
-The AppState has its own simpleInitApp() method, so to speak.
+The AppState executes its own simpleInitApp() method when it is attached, so to speak.
The AppState has been enabled (unpaused): This toggles a boolean isEnabled() to true. Here you attach nodes and listeners that should become active while it's running.
-
While the AppState is running/paused: You can poll isEnabled() to define paused and unpaused game behaviour in the update() loop that. Polls and modify the game state, modify the scene graph, and triggers events. If !isEnabled(), write code that skips the running sections of this AppState's update() loop.
+
While the AppState is running/paused: You can poll isEnabled() to define paused and unpaused game behaviour in the update() loop. In update(), you poll and modify the game state, modify the scene graph, and trigger events. Test if !isEnabled(), and write code that skips the running sections of this AppState's update() loop.
Each AppState has its own update loop, which hooks into the main simpleUpdate() loop (callback).
-
The AppState has been disabled (paused): This toggles a boolean isEnabled() to false. Switch to your specific "paused" state.
+
The AppState has been disabled (paused): This toggles a boolean isEnabled() to false. Here you switch all objects to their specific "paused" behaviour.
-
The AppState is cleaned up: Here you decide whether to save this AppState's game state, unregister Controls and InputHandlers, detach related AppStates, and detach nodes from the rootNode.
+
The AppState is cleaned up: Here you decide what happens when the AppState is detached. Save this AppState's game state, unregister Controls and InputHandlers, detach related AppStates, detach nodes from the rootNode, etc.
@@ -86,7 +86,7 @@ Each AppState has its own update loop, which hooks into the main simpleUpdate()
@@ -277,7 +279,7 @@ 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.
@@ -297,12 +299,12 @@ The AppStateManager's render(), postRender(), cleanup() method
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/appstatesdemo.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/appstatesdemo.html
index 234742140..2ba7692cd 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/appstatesdemo.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/appstatesdemo.html
@@ -4,15 +4,37 @@
+
+THIS DEMO IS OUT OF DATE AND NEEDS CORRECTING
+
+
+Note: this tutorial needs to be fixed and is currently not correct. One should almost never override stateDetached and stateAttached??? and should certainly never do anything scene related in them.
+
+
+
This demo is a simple example of how you use AppStates to toggle between a StartScreen and a SettingsScreen (press RETURN) while the game is paused, and start the game by switching to a GameRunning state (press BACKSPACE).
There are four files, Main.java, GameRunningState.java, StartScreenState.java, SettingsScreenState.java.
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/asset_manager.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/asset_manager.html
index aee4d2691..2f5b04d82 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/asset_manager.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/asset_manager.html
@@ -13,7 +13,7 @@ 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.
+
The AssetManager automatically caches and 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.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/audio.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/audio.html
index 2ba08092f..cff5fee85 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/audio.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/audio.html
@@ -267,4 +267,4 @@ Advanced users find more info about OpenAL and its features here:
Create one CinematicEvent for each line of your movie script.
-
track is one motion of a moving object. You can add several tracks. More details below.
+
event is one motion of a moving object. You can add several events. More details below.
starttime is the time when this particular cinematic event starts on the timeline. Specify the start time in seconds since the beginning of the cinematic.
-Just like a movie script consists of lines with instructions to the actors, each Cinematic consists of a series of tracks.
+Just like a movie script consists of lines with instructions to the actors, each Cinematic consists of a series of events.
-Here is the list of available CinematicEvents that you use as tracks. Each track remote-controls scene objects in a different way:
+Here is the list of available CinematicEvents that you use as events. Each track remote-controls scene objects in a different way:
-
Tracks (CinematicEvents)
Description
+
Events(CinematicEvents)
Description
-
MotionTrack
Use a MotionTrack to move a Spatial non-linearly over time. A MotionTrack is based on a list of waypoints in a MotionPath. The curve goes through each waypoint, and you can adjust the tension of the curve to modify the roundedness of the path. This is the motion interpolation you are going to use in most cases.
+
MotionEvent
Use a MotionEvent to move a Spatial non-linearly over time. A MotionEvent is based on a list of waypoints in a MotionPath. The curve goes through each waypoint, and you can adjust the tension of the curve to modify the roundedness of the path. This is the motion interpolation you are going to use in most cases.
-
PositionTrack
Use a PositionTrack to move a Spatial linearly over time. This linear interpolation results in straight motion segments between the way points. Use this to make the remote-controlled objects zig-zag from one way point to the other in a straight line.
+
SoundEvent
Use a SoundEvent to play a sound at a given time for the given duration.
-
RotationTrack
Use a RotationTrack to change the rotation of a Spatial over time. It spins the Spatial to the given angle in the given amount of time by linearly interpolating the rotation.
+
GuiEvent
Displays a Nifty GUI at a given time for the given duration. Use it to display subtitles or HUD elements. Bind the Nifty GUI XML to the cinematic using cinematic.bindUi("path/to/nifty/file.xml");
-
ScaleTrack
Use a ScaleTrack to change the size of a Spatial over time. It resizes the Spatial in the given amount of time by linearly interpolating the scale.
-
-
-
SoundTrack
Use a SoundTrack to play a sound at a given time for the given duration.
-
-
-
GuiTrack
Displays a Nifty GUI at a given time for the given duration. Use it to display subtitles or HUD elements. Bind the Nifty GUI XML to the cinematic using cinematic.bindUi("path/to/nifty/file.xml");
-
-
-
AnimationTrack
Use this to start playing a model animation at a given time (a character walking animation for example)
+
AnimationEvent
Use this to start playing a model animation at a given time (a character walking animation for example)
-
+
-The jMonkey team can add more types of tracks, just ask in the forum.
+Of course one can make is own event implementation, by extending the AbstractCinematicEvent.
+
Sets the direction behavior type of the controled node. Direction.None deactivates this feature. You can choose from the following options: LookAt, Path, PathAndRotation, Rotation.
Sets the direction behavior type of the controlled node. Direction.None deactivates this feature. You can choose from the following options: LookAt, Path, PathAndRotation, Rotation.
The spatial always faces towards this location. Use together with MotionEvent.Direction.LookAt.
-
track.setRotation(quaternion)
Sets the rotation. Use together with MotionTrack.Direction.Rotation or MotionTrack.Direction.PathAndRotation.
+
event.setRotation(quaternion)
Sets the rotation. Use together with MotionEvent.Direction.Rotation or MotionEvent.Direction.PathAndRotation.
-
+
-Tip: Most likely you remote-control more than one object in your scene. Give the tracks and paths useful names such as dragon_track, dragon_path, hero_track, hero_path, etc.
+Tip: Most likely you remote-control more than one object in your scene. Give the events and paths useful names such as dragonEvent, dragonPath, heroEvent, heroPath, etc.
-A PositionTrack moves a Spatial in a straight line from its current position to the end position.
+A SoundEventplays a sound as part of the cinematic.
-
PositionTrack track = new PositionTrack(
- thingNode, endPosition, duration, loopMode);
+You must use this together with bindUI() to specify the Nifty GUI XML file that you want to load:
-A ScaleTrack remote-controls whether a spatial grows or shrinks.
-
ScaleTrack thingScaleControl = new ScaleTrack(
- thingNode, endScale, duration, loopMode);
+
cinematic.bindUi("Interface/subtitle.xml");
Details of the constructor:
-
thingNode is the Spatial to be resized.
-
-
endScale is the target Scale in Vector3f format.
+
screen is the name of the Nifty GUI screen to load, as String.
-
duration is the time that it should take from start to target scale.
+
duration is the time that it should take to play.
loopMode can be LoopMode.Loop, LoopMode.DontLoop, LoopMode.Cycle.
-A GuiTrack shows or hide a NiftyGUI as part of a cinematic.
-
+There is a built in system for camera switching in Cinematics. It based on CameraNode, and the cinematic just enable the given CameraNode control at a given time.
-
GuiTrack( screen, duration, loopMode )
+First you have to bind a camera to the cinematic with a unique name. You'll be provided with a CameraNode
-You must use this together with bindUI() to specify the Nifty GUI XML file that you want to load:
-
-
-
cinematic.bindUi("Interface/subtitle.xml");
-
-
-Details of the constructor:
-
-
screen is the name of the Nifty GUI screen to load, as String.
-
-
duration is the time that it should take to play.
-
-
loopMode can be LoopMode.Loop, LoopMode.DontLoop, LoopMode.Cycle.
-An AnimationTrack triggers an animation as part of a cinematic.
+then you can do whatever you want with this camera node : place it so that you have a the camera angle you'd like, attach it to a motion event to have some camera scrolling, attach control of your own that give it whatever behavior you'd like.
+In the above example, I want it to be a top view of the scene looking at the world origin.
//set its position
+ camNode.setLocalTranslation(new Vector3f(0, 50, 0));
+ // set it to look at the world origin
+ camNode.lookAt(Vector3F.ZERO, Vector3f.UNIT_Y);
+Then i just have to schedule its activation in the cinematic. I want it to get activated 3 seconds after the start of the cinematic so I just have to do
-Details of the constructor:
-
-
thingNode is the Spatial whose animation you want to play.
-
-
animationName the name of the animation stored in the animated model that you want to trigger, as a String.
-
-
duration is the time that it should take to play.
-
-
loopMode can be LoopMode.Loop, LoopMode.DontLoop, LoopMode.Cycle.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/collision_and_intersection.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/collision_and_intersection.html
index 91cbb0e04..a9f78fa65 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/collision_and_intersection.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/collision_and_intersection.html
@@ -8,7 +8,7 @@ The term collision can be used to refer to mouse picking are easily implemented using using mathematical techniques such as ray casting and intersections. Experienced developers optimize their games by finding ways to simulate certain (otherwise expensive physical) interactions in a non-physical way.
+Non-physical collision detection is interesting because it uses less computing resources than physical collision detection. The non-physical calculations are faster because they do not have any side effects such as pushing other objects or bumping off of them. Tasks such as mouse picking are easily implemented using mathematical techniques such as ray casting and intersections. Experienced developers optimize their games by finding ways to simulate certain (otherwise expensive physical) interactions in a non-physical way.
@@ -16,7 +16,7 @@ Non-physical collision detection is interesting because it uses less computing r
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/combo_moves.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/combo_moves.html
index 85d69ff90..5253884ab 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/combo_moves.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/combo_moves.html
@@ -267,4 +267,4 @@ Depending on the game genre, the designer can reward the players' intrinsic
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/custom_controls.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/custom_controls.html
index 9e9ce874c..4f959e01a 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/custom_controls.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/custom_controls.html
@@ -87,7 +87,7 @@ Examples: You can write
-The possibilities are endless.
+The possibilities are endless.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/custom_meshes.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/custom_meshes.html
index de53563d4..bec467405 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/custom_meshes.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/custom_meshes.html
@@ -5,7 +5,11 @@
Use the Mesh class to create custom shapes that go beyond Quad, Box, Cylinder, and Sphere, even procedural shapes are possible. Thank you to KayTrance for providing the sample code!
-In this tutorial, we (re)create a very simple rectangular mesh, and we have a look at different ways of coloring it. A flat rectangle may not look useful because it's exactly the same as a com.jme3.scene.shape.Quad. We choose this simple example in order to show you how to build any shape out of triangles ??? without the distractions of more complex shapes.
+
+
+
+Note: In this tutorial, we (re)create a very simple rectangular mesh (a quad), and we have a look at different ways of coloring it. Coding a custom quad may not be very useful because it's exactly the same as the built-in com.jme3.scene.shape.Quad. We chose a simple quad to teach you how to build any shape out of triangles, without the distractions of more complex shapes.
+
Full code sample:
@@ -13,43 +17,68 @@ In this tutorial, we (re)create a very simple rectangular mesh, and we have a lo
-Polygon meshes are made up of triangles. The corners of the triangles are vertices. So, when ever you create a new shape, you break it down into triangles.
-Let's look at a cube. A cube is made up of 6 rectangles. Each rectangle can be broken down into two triangles. This means you need 12 triangles to create a cube mesh. You also need to know the 8 corner coordinates (vertices). The trick is that you have to specify the vertices in a certain order: Each triangle separately, counter-clockwise.
-Sounds worse than it is ??? here is an example:
+Polygon meshes are made up of triangles. The corners of the triangles are called vertices. When ever you create any new shape, you break it down into triangles.
+
+
+
+Example: Let's look at a cube. A cube is made up of 6 rectangles. Each rectangle can be broken down into two triangles. This means you need 12 triangles to describe a cube mesh. Therefor you must provide the coordinates of the triangles' 8 corners (called vertices).
+
+
+
+The important thing is that you have to specify the vertices of each triangle in the right order: Each triangle separately, counter-clockwise.
+
+
+
+Sounds harder than it is ??? let's create a simple custom mesh, a quad.
-Okay, we want to create a Quad. A quad has four vertices, and is made up of two triangles.
-The base class for creating meshes is com.jme3.scene.Mesh.
+In this tutorial we want to create a 3x3 Quad. The quad has four vertices, and is made up of two triangles. In our example, we decide that the bottom left corner is at 0/0/0 and the top right is at 3/3/0.
-To define your own shape, determine its vertex positions in space. Store them in an array using com.jme3.math.Vector3f. For a Quad, we need four vertices: Bottom left, bottom right, top left, top right. We name the array vertices[].
+
+To define your own shape, determine the shape's vertex coordinates in 3D space. Store the list of corner positions in an com.jme3.math.Vector3f array. For a Quad, we need four vertices: Bottom left, bottom right, top left, top right. We name the array vertices[].
Vector3f [] vertices = new Vector3f[4];
@@ -59,12 +88,12 @@ vertices[2] = new Vector3f(0,3,0);
vertices[3] = new Vector3f(3,3,0);
-Next, define the Quad's 2D texture coordinates for each vertex, in the same order: Bottom left, bottom right, top left, top right. We name this array texCoord[]
+Next, we define the Quad's 2D texture coordinates for each vertex, in the same order as the vertices: Bottom left, bottom right, top left, top right. We name this Vector2f array texCoord[]
Vector2f[] texCoord = new Vector2f[4];
@@ -73,17 +102,33 @@ texCoord[1] = new Vector2f(1,0);
texCoord[2] = new Vector2f(0,1);
texCoord[3] = new Vector2f(1,1);
+
+
+This syntax means, when you apply a texture to this mesh, the texture will fill the quad from corner to corner at 100% percent size. Especially when you stitch together a larger mesh, you use this to tell the renderer whether, and how exactly, you want to cover the whole mesh. E.g. if you use .5f or 2f as texture coordinates instead of 1f, textures will be stretched or shrunk accordingly.
+
-Next we turn the unrelated coordinates into triangles ??? We define the order in which the mesh is constructed. Think of these indexes as coming in groups of three. Each group of indexes describes one triangle. Note that you must specify the vertices counter-clockwise!
+Next we turn these unrelated coordinates into triangles: We define the order in which each triangle is constructed. Think of these indexes as coming in groups of three. Each group of indexes describes one triangle. If the corners are identical, you can (and should!) reuse an index for several triangles.
+
+
+
+Remember that you must specify the vertices counter-clockwise.
int [] indexes = { 2,0,1, 1,3,2 };
+
+
+
+This syntax means:
+
+
The indices 0,1,2,3 stand for the four vertices that you specified for the quad in vertices[].
+
The 2,0,1 triangle starts at top left, continues bottom left, and ends at bottom right.
The 1,3,2 triangle start at bottom right, continues top right, and ends at top left.
@@ -94,18 +139,28 @@ Next we turn the unrelated coordinates into triangles ??? We define the order in
| \ |
0--1\1
+
+
+If the shape is more complex, it has more triangles, and therefor also more vertices/indices. Just continue expanding the list by adding groups of three indices for each triangle. (For example a three-triangle "house" shape has 5 vertices/indices and you'd specify three groups: int [] indexes = { 2,0,1, 1,3,2, 2,3,4 };.)
+
+
+
+
If you get the order wrong (clockwise) for some of the triangles, then these triangles face backwards. If the Spatial's material uses the default FaceCullMode.Back (see "face culling"), the broken triangles appear as holes in the rendered mesh. You need to identify and fix them in your code.
+
-The Mesh data is stored in a buffer.
+You store the Mesh data in a buffer.
Using com.jme3.util.BufferUtils, we create three buffers for the three types of information we have:
-
vertex positions,
+
vertex coordinates,
texture coordinates,
@@ -113,11 +168,11 @@ The Mesh data is stored in a buffer.
-
We assign the data to the appropriate type of buffer inside the mesh object. The three buffer types are taken from an enum in com.jme3.scene.VertexBuffer.Type.
+
We assign the data to the appropriate type of buffer inside the Mesh object. The three buffer types (Position, TextCoord, Index) are taken from an enum in com.jme3.scene.VertexBuffer.Type.
-
The third parameter describes the number of components of the values. Vertex postions are 3 float values, texture coordinates are 2 float values, and the indices are 3 ints representing 3 vertices in a triangle.
+
The integer parameter describes the number of components of the values. Vertex postions are 3 float values, texture coordinates are 2 float values, and the indices are 3 ints representing 3 vertices in a triangle.
-
In order for jMonkey to correctly show the mesh in the scene, it needs to know the bounds of our new mesh. This can easily be achieved by calling the updateBound() method on it.
+
To render the mesh in the scene, we need to pre-calculate the bounding volume of our new mesh: Call the updateBound() method on it.
-We create a com.jme3.scene.Geometry, apply a simple color material to it, and attach it to the rootNode to make it appear in the scene.
+We create a com.jme3.scene.Geometry from our mesh, apply a simple color material to it, and attach it to the rootNode to make it appear in the scene.
-
Geometry geo = new Geometry("OurMesh", mesh);
-Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
+
Geometry geo = new Geometry("OurMesh", mesh); // using our custom mesh object
+Material mat = new Material(assetManager,
+ "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Blue);
geo.setMaterial(mat);
rootNode.attachChild(geo);
-If modifying a mesh dynamically in a way which would change the model's bounds then you need to call updateModelBound() on the Geometry object containing the mesh after calling updateBounds() on the mesh object. There is a warning on updateModelBounds about not usually needing to use it but that can be ignored in this special case.
+
+If you are modifying a mesh dynamically in a way which changes the model's bounds, you need to update it:
+
+
+
Call updateBounds() on the mesh object, and then
+
+
call updateModelBound() on the Geometry object containing the mesh.
+
+
+
+
+The updateModelBounds() method warns you about not usually needing to use it, but that can be ignored in this special case.
-Vertex coloring is a simple way of coloring meshes. Instead of just assigning one solid color, each vertex (corner) has a color assigned. The faces between the vertices are then colored with a gradient. You can use the same mesh mesh object that you defined above.
-
+Vertex coloring is a simple way of coloring meshes. Instead of just assigning one solid color, each vertex (corner) has a color assigned. The faces between the vertices are then colored with a gradient. For this demo, you can use the same mesh mesh object that you defined above.
-
Geometry geo = new Geometry ("ColoredMesh", mesh);
+
Geometry geo = new Geometry ("ColoredMesh", mesh); // using the custom mesh
Material matVC = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
matVC.setBoolean("VertexColor", true);
-
You create a float array color buffer:
@@ -209,10 +271,11 @@ You create a float array color buffer:
-Loop over the colorArray buffer to quickly set some RGBA value for each vertex. As usual, RGBA color values range from 0.0f to 1.0f. Note that the color values in this example are arbitrarily chosen. It's just a quick loop to give every vertex a different RGBA value (a purplish gray, purple, a greenish gray, green, see screenshot), without writing too much code. For your own mesh, you'd assign meaningful values for the color buffer depending on which color you want your mesh to have.
+Loop over the colorArray buffer to quickly set some RGBA value for each vertex. As usual, RGBA color values range from 0.0f to 1.0f. Note that the color values in this example are arbitrarily chosen. It's just a quick loop to give every vertex a different RGBA value (a purplish gray, purple, a greenish gray, green, see screenshot), without writing too much code. For your own mesh, you'd assign meaningful values for the color buffer depending on which color you want your mesh to have.
-
for(int i = 0; i < 4; i++){
+
// note: the red and green values are arbitray in this example
+for(int i = 0; i < 4; i++){
// Red value (is increased by .2 on each next vertex here)
colorArray[colorIndex++]= 0.1f+(.2f*i);
// Green value (is reduced by .2 on each next vertex)
@@ -224,7 +287,6 @@ Loop over the colorArray buffer to quickly set some RGBA value for each vertex.
}
-
Next, set the color buffer. An RGBA color value contains four float components, thus the parameter 4.
@@ -233,36 +295,38 @@ geo.setMaterial(matVC);
-Now you see a gradient color extending from each vertex.
-
+When you run this code, you see a gradient color extending from each vertex.
-The examples used the mesh together with the Unshaded.j3md material. If you want to use the Mesh with a Phong illuminated material (such as Lighting.j3md), the mesh needs to include information about its normals. (The Normals encode in which direction a mesh polygon is facing, which is important for calculating light and shadow.)
+The previous examples used the mesh together with the Unshaded.j3md material. If you want to use the mesh with a Phong illuminated material (such as Lighting.j3md), the mesh must include information about its Normals. (Normal Vectors encode in which direction a mesh polygon is facing, which is important for calculating light and shadow!)
float[] normals = new float[12];
normals = new float[]{0,0,1, 0,0,1, 0,0,1, 0,0,1};
mesh.setBuffer(Type.Normal, 3, BufferUtils.createFloatBuffer(normals));
+You need to specify as many normals as the polygon has vertices. For a flat quad, the four normals point in the same direction. In this case, the direction is the Z unit vector (0,0,1), this means our quad is facing the camera.
+
-You need as many normals as the polygon has vertices. For a flat quad, they point all in the same direction. In this case, the direction is the Z unit vector (Vector3f.UNIT_Z), this means the quad is facing the camera.
+
+If the mesh is more complex or rounded, calculate cross products of neighbouring vertices to identify normal vectors!
-Alternatively, you can show the vertices as colored points instead of coloring the faces.
+Additionally to coloring the faces as just described, you can hide the faces and show only the vertices as colored corner points.
-This will result in a 10 px dot being rendered for each of the four vertices. The dot has the vertex color you specified above. The Quad's faces are not rendered at all. This can be used for a special debugging or editing mode.
+This will result in a 10 px dot being rendered for each of the four vertices. The dot has the vertex color you specified above. The Quad's faces are not rendered at all in this mode. You can use this to visualize a special debugging or editing mode in your game.
-By default, jME3 optimizes a mesh by culling (not drawing) its backfaces. It determines which side the front or backface of a mesh is by the order of the vertices: The frontface is the one where the vertices are specified counter-clockwise.
+By default, jME3 optimizes a mesh by "backface culling", this means not drawing the inside. It determines the side of a triangle by the order of the vertices: The frontface is the face where the vertices are specified counter-clockwise.
-This means for you that your custom mesh is invisible when seen from "behind" or from the inside. This may not be a problem, often this is even intended because it's faster. The player will not look at the inside of most things anyway. For example, if your custom mesh is a closed polyhedron, or a flat wallpaper-like object, then rendering the backfaces (the inside of the pillar, the back of the painting, etc) would indeed be a waste of resources.
+This means for you that, by default, your custom mesh is invisible when seen from "behind" or from the inside. This may not be a problem, typically this is even intended, because it's faster. The player will not look at the inside of most things anyway. For example, if your custom mesh is a closed polyhedron, or a flat wallpaper-like object, then rendering the backfaces (the inside of the pillar, the back of the painting, etc) would indeed be a waste of resources.
-In case however that your usecase requires the backfaces to be visible, you have two options:
+In case however that your usecase requires the backfaces be visible, you have two options:
-
If you have a very simple scene, you can just deactivate backface culling for this one mesh's material.
-mat.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off);
+
If you have a very simple scene, you can simply deactivate backface culling for this one mesh's material.
The recommended solution is to specify each triangle twice, the second time with the opposite order of vertices. The second, reversed triangle is a second frontface that replaces the culled backface.
-int[] indexes = { 2,0,1, 1,3,2, 2,3,1, 1,0,2 };
+
Another solution for truly double-sided meshes is to specify each triangle twice, the second time with the opposite order of vertices. The second (reversed) triangle is a second frontface that covers up the culled backface.
int[] indexes = { 2,0,1, 1,3,2, 2,3,1, 1,0,2 };
+
+
+See also:
-See also: Spatial ??? contains more info about how to debug custom meshes (that do not render as expected) by changing the default culling behaviour.
+
+
Spatial ??? contains more info about how to debug custom meshes (that do not render as expected) by changing the default culling behaviour.
+
+
Mesh ??? more details about advanced Mesh properties
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/debug-shapes.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/debug-shapes.png
index 69f7ff585..998330a83 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/debug-shapes.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/debug-shapes.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/debugging.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/debugging.html
index e39b35879..69f16ed68 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/debugging.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/debugging.html
@@ -272,4 +272,4 @@ Then attach the scene processor to the
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/dof-blur.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/dof-blur.png
index 41c560f9f..7fabbeeca 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/dof-blur.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/dof-blur.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/drop-shadows.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/drop-shadows.png
index a3537504b..6f628f288 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/drop-shadows.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/drop-shadows.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/effects_overview.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/effects_overview.html
index 4dbac81aa..74789eb8c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/effects_overview.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/effects_overview.html
@@ -296,7 +296,7 @@ Thanks for your awesome contributions! Keep them coming!
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/elephant-pointlights.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/elephant-pointlights.png
index 5803ec7b0..7edbb1b61 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/elephant-pointlights.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/elephant-pointlights.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/endless_terraingrid.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/endless_terraingrid.html
index 60c93a6c7..f3ea78305 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/endless_terraingrid.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/endless_terraingrid.html
@@ -63,12 +63,13 @@ 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.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/explosion-5.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/explosion-5.png
index fc06d84eb..a805cdb85 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/explosion-5.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/explosion-5.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/fade.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/fade.html
index ebaea7f62..1d784bba5 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/fade.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/fade.html
@@ -47,4 +47,4 @@ You can also change the fade duration using fade.setDuration().
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/headless_server.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/headless_server.html
index 74d8031e5..13a786a0c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/headless_server.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/headless_server.html
@@ -92,4 +92,4 @@ Okay, so you can now start your game in a headless 'server mode', wher
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/hinges_and_joints.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/hinges_and_joints.html
index 2991944e8..27c50a87e 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/hinges_and_joints.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/hinges_and_joints.html
@@ -232,4 +232,4 @@ When you disable the motor, the chained nodes are exposed to gravity again:
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/house-directionallight.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/house-directionallight.png
index 3cd00edf6..c4ad7a757 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/house-directionallight.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/house-directionallight.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/hud.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/hud.html
index 2a4025a0b..3188e3421 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/hud.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/hud.html
@@ -217,4 +217,4 @@ For HUDs, you basically follow the same instructions as for creating a normal
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/input_handling.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/input_handling.html
index 6068ef1ce..3414c7f1b 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/input_handling.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/input_handling.html
@@ -385,4 +385,4 @@ The abstraction of separating triggers and mappings has the advantage that you c
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/j3m_material_files.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/j3m_material_files.html
index 1568064d4..df5dd38fb 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/j3m_material_files.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/j3m_material_files.html
@@ -359,4 +359,4 @@ The PNG file is in the same
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/jme3_shaders.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/jme3_shaders.html
index 620a71d4b..f301a852e 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/jme3_shaders.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/jme3_shaders.html
@@ -234,7 +234,7 @@ JME3 uses some global uniforms for lighting :
-these uniforms are passed to the shader without having to declare them in the j3md file, but you have to specify in the technique definition " LightMode MultiPass" see lighting.j3md for more information.
+These uniforms are passed to the shader without having to declare them in the j3md file, but you have to specify in the technique definition " LightMode MultiPass" see lighting.j3md for more information.
@@ -464,4 +464,4 @@ Those attributes are deprecated since GLSL 1.3 (opengl 3), hence JME3 global uni
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light-scattering-filter.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light-scattering-filter.png
index 371760a55..cd9c299a5 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light-scattering-filter.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light-scattering-filter.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light-sources.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light-sources.png
index ac703063f..40da7db40 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light-sources.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light-sources.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light_and_shadow.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light_and_shadow.html
index 3861d8965..024d3220d 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light_and_shadow.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/light_and_shadow.html
@@ -177,11 +177,11 @@ LightControl lightControl = new LightControl(myLight);
spatial.addControl(lightControl); // this spatial controls the position of this light.
-Obviously, this does apply to AmbientLights which have no position.
+Obviously, this does not apply to AmbientLights, which have no position.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/loading_screen.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/loading_screen.html
index 35dad5582..6afcb6782 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/loading_screen.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/loading_screen.html
@@ -564,4 +564,4 @@ public class TestLoadingScreen1 extends SimpleApplication implements ScreenContr
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/logging.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/logging.html
index 2bec43b83..f76baff61 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/logging.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/logging.html
@@ -117,4 +117,4 @@ This behaviour can be partially modified by overriding the method handleError in
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/making_the_camera_follow_a_character.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/making_the_camera_follow_a_character.html
index 3560dd8e3..ac6e4b82a 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/making_the_camera_follow_a_character.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/making_the_camera_follow_a_character.html
@@ -19,11 +19,11 @@ There are two ways how the camera can do that:
-Important: Using third-person view requires you to deactivate the default flyCam (first-person view). This means that you have to configure your own navigation (key inputs and analogListener) that make your player character walk. For moving a physical player character, use player.setWalkDirection(), for a non-pysical character you can use player.move().
+Important: Using third-person view requires you to deactivate the default flyCam (first-person view). This means that you have to configure your own navigation (key inputs and analogListener) that make your player character walk. For moving a physical player character, use player.setWalkDirection(), for a non-physical character you can use player.move().
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/material_definitions.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/material_definitions.html
index 3eea553e6..d3c6fea18 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/material_definitions.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/material_definitions.html
@@ -190,4 +190,4 @@ You can create your own Material Definitions and place them in your project'
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/materials_overview.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/materials_overview.html
index 977147478..a22728810 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/materials_overview.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/materials_overview.html
@@ -101,12 +101,12 @@ setVector3("NormalScale", new Vector3f(0,0,0));
Common/MatDefs/Terrain/Terrain.j3md
Splat textures for e.g. terrains.
-See also: Hello Terrain
A color gradient calculated from the model's surface normals. You can use this built-in material to debug the generation of normals in meshes, to preview models that have no material and no lights, or as fall-back default material. This built-in material has no parameters.
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.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/mesh.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/mesh.html
index 96246b203..e23596283 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/mesh.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/mesh.html
@@ -12,16 +12,13 @@ All visible game elements in a scene, whether it is a Model or a Shape, are made
-
Meshes are made up of triangles.
-getTriangleCount(???) and getTriangle(???)
+
Meshes are made up of triangles: getTriangleCount(???) and getTriangle(???)
-
Each mesh has a unique ID
-getId()
+
Each mesh has a unique ID: getId()
Meshes have transformations: Location (local translation), rotation, scale.
-
Meshes have a bounding volume. jME3 can detect intersections (that is, non-physical collisions) between meshes, or between meshes and 2D elements such as rays.
-collideWith().
+
Meshes have a bounding volume. jME3 can detect intersections (that is, non-physical collisions) between meshes, or between meshes and 2D elements such as rays: collideWith().
Meshes are locked with setStatic() and unlocked with setDynamic().
@@ -31,25 +28,35 @@ All visible game elements in a scene, whether it is a Model or a Shape, are made
-
(Optional) Meshes can have a LOD (level of detail optimization) that renders more or less details depending on distance from the camera.
The VertexBuffer contains a particular type of geometry data used by Meshes. Every VertexBuffer set on a Mesh is sent as an attribute to the vertex shader to be processed.
-
+
+Optionally, custom meshes can have a LOD (level of detail optimization) that renders more or less detail, depending on the distance of the mesh from the camera. You have to specify several vertex buffers, one for each level of detail you want (very far away with few details, close up with all details, and something in the middle). Use setLodLevels(VertexBuffer[] lodLevels).
+
+
spatial,
node,
mesh,
@@ -167,5 +194,5 @@ The VertexBuffer contains a particular type of geometry data used by Meshes. Eve
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/monkey_zone.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/monkey_zone.html
index 8e435e6c0..4f5cfc6f4 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/monkey_zone.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/monkey_zone.html
@@ -338,4 +338,4 @@ MonkeyZone is hosted at GoogleCode, where you can check out the jMonkeyEngine
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/motionpath.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/motionpath.html
index 4f310715d..453588f52 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/motionpath.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/motionpath.html
@@ -118,4 +118,4 @@ In this example, you just print the status at every way point. In a game you cou
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/mouse_picking.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/mouse_picking.html
index 2af3a7477..77760caf3 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/mouse_picking.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/mouse_picking.html
@@ -82,7 +82,7 @@ The following pick target input mapping implements an action that d
-Note: Picking with a visible pouse pointer implies that your application can no longer use the default flyCam where the MouseAxisTrigger rotates the camera. You have to deactivate the flyCam mappings and provide custom mappings. Either different inputs rotate the camera, or the camera is fixed.
+Note: Picking with a visible mouse pointer implies that your application can no longer use the default flyCam where the MouseAxisTrigger rotates the camera. You have to deactivate the flyCam mappings and provide custom mappings. Either different inputs rotate the camera, or the camera is fixed.
@@ -147,4 +147,4 @@ The following example rotates Spatials named "Red Box" or "Blue B
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/multiple_camera_views.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/multiple_camera_views.html
index 363a81b6f..080c2aeaf 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/multiple_camera_views.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/multiple_camera_views.html
@@ -230,4 +230,4 @@ You have full control to determine which Nodes the camera can see! It can see th
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/multithreading.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/multithreading.html
index 1b083c6f7..efb29180f 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/multithreading.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/multithreading.html
@@ -6,26 +6,25 @@
jME3 is similar to Swing in that for speed and efficiency all changes to the world must be made in a single update thread. This is happening automatically if using Controls and AppSates update metod or simpleUpdate however whenever you pass work to another thread you need to hand the results back to the main jME3 thread before making any changes to the scene graph.
-
public void rotateGeometry(final Geometry geo, final Quaternion rot) {
+ mainApp.enqueue(new Callable<Spatial>() {
+ public Spatial call() throws Exception {
+ return geo.rotate(rot);
+ }
+ });
+}
-Note that this example does not fetch the returned value by calling get() on the Future object returned from enqueue(). This means that the example method rotateGeography() will return immediately and will not wait for the rotation to be processed before continuing.
+Note that this example does not fetch the returned value by calling get() on the Future object returned from enqueue(). This means that the example method rotateGeometry() will return immediately and will not wait for the rotation to be processed before continuing.
If the processing thread needs to wait or needs the return value then get() or the other methods in the returned Future object such as isDone() can be used.
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/networking.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/networking.html
index 0515d2edb..ea71f7074 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/networking.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/networking.html
@@ -490,4 +490,4 @@ If you have set up a server in your home network, and the game clients cannot re
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_java_interaction.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_java_interaction.html
index eca0d3330..65166b537 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_java_interaction.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_java_interaction.html
@@ -318,4 +318,4 @@ You're done with the basic Nifty
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_java_layout.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_java_layout.html
index 6454f4eae..8ac3878fe 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_java_layout.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_java_layout.html
@@ -639,4 +639,4 @@ Integrate the GUI into the g
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_overlay.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_overlay.html
index e0df90f6e..76ca04101 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_overlay.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_overlay.html
@@ -89,4 +89,4 @@ Now that you have layed out and integrated the
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_popup_menu.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_popup_menu.html
index 157376a25..59281ce6c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_popup_menu.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_popup_menu.html
@@ -91,4 +91,4 @@ To handle menu item events (i.e. calling a method when you click on a menu item)
};
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_projection.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_projection.html
index d96c37fe2..ff6c1f6b9 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_projection.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_projection.html
@@ -108,4 +108,4 @@ Now that you have layed out and integrated the
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_scenarios.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_scenarios.html
index 61c385d43..ca47d84bf 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_scenarios.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_scenarios.html
@@ -323,7 +323,7 @@ Inside myCustomStyles.xml you define styles like this:
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.
-
+
Learn more from the NiftyGUI page:
@@ -346,4 +346,4 @@ Learn more from the NiftyGUI page:
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_xml_layout.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_xml_layout.html
index 87cd6cb5a..5450391f5 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_xml_layout.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nifty_gui_xml_layout.html
@@ -293,8 +293,12 @@ The font used is jME3's default font "Interface/Fonts/Default.fnt"
Before you can use any control, you must load a Control Definition first. Add the following two lines before your screen definitions:
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nurbs_3-d_surface.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nurbs_3-d_surface.png
index b22f7090d..23358870c 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nurbs_3-d_surface.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/nurbs_3-d_surface.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/ogrecompatibility.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/ogrecompatibility.html
index 4c963194a..305f6d19a 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/ogrecompatibility.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/ogrecompatibility.html
@@ -72,4 +72,4 @@ Test Character -
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/open_game_finder.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/open_game_finder.html
index 6547f9bb7..de00e9f29 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/open_game_finder.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/open_game_finder.html
@@ -193,4 +193,4 @@ A: TBD
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/otoglow.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/otoglow.png
index 23d005bf3..2dd4c8394 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/otoglow.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/otoglow.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/otonobloom.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/otonobloom.png
index d1124e6c8..f1cb62c45 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/otonobloom.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/otonobloom.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/particle.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/particle.png
index 439cc45d8..41a9f7077 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/particle.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/particle.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/particle_emitters.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/particle_emitters.html
index 9e909daa1..9db856d47 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/particle_emitters.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/particle_emitters.html
@@ -225,7 +225,7 @@ The following effect textures are available by default from test-data.jar<
Browse the full source code of all here.
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/physics.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/physics.html
index 3b1595a04..4da7e2e78 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/physics.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/physics.html
@@ -21,23 +21,58 @@ If you are looking for info on how to respond to physics events such as collisio
+jME3 has a complete, slightly adapted but fully wrapped Bullet API that uses normal jME math objects (Vector3f, Quaternion etc) as input/output data. All normal bullet objects like RigidBodies, Constraints (called "Joints" in jME3) and the various collision shapes are available, all mesh formats can be converted from jME to bullet.
+
-Bullet physics runs internally at 60fps by default. This rate is not dependent on the actual framerate and it does not lock the framerate at 60fps. Instead, when the actual fps is higher than the physics framerate the system will display interpolated positions for the physics objects. When the framerate is lower than the physics framerate, the physics space will be stepped multiple times per frame to make up for the missing calculations. You create a Bullet PhysicsSpace in jME3 with a com.jme3.bullet.BulletAppState.
+
+The PhysicsSpace object is the central object in bullet and all objects have to be added to it so they are physics-enabled. You can create multiple physics spaces as well to have multiple independent physics simulations or to run simulations in the background that you step at a different pace. You can also create a Bullet PhysicsSpace in jME3 with a com.jme3.bullet.BulletAppState which runs a PhysicsSpace along the update loop, which is the easiest way to instantiate a physics space. It can be run in a mode where it runs in parallel to rendering, yet syncs to the update loop so you can apply physics changes safely during the update() calls of Controls and SimpleApplication.
-Internally, the updating and syncing of the actual physics objects happens in the following way:
+The base bullet objects are also available as simple to use controls that can be attached to spatials to directly control these by physics forces and influences. The RigidBodyControl for example includes a simple constructor that automatically creates a hull collision shape or a mesh collision shape based on the given input mass and the mesh of the spatial it is attached to. This makes enabling physics on a Geometry as simple as "spatial.addControl(new RigidBodyControl(1));"
-
-
collision callbacks (BulletAppState.update())
+
+
+Due to some differences in how bullet and jME handle the scene and other objects relations there is some things to remember about the controls implementation:
+
+
+
The collision shape is not automatically updated when the spatial mesh changes
+
+
You can update it by reattaching the control or by using the CollisionShapeFactory yourself.
-
user update (simpleUpdate in main loop, update() in Controls and AppStates)
+
-
physics to scenegraph syncing and applying (updateLogicalState())
+
In bullet the scale parameter is on the collision shape (which equals the mesh in jME3) and not on the RigidBody so you cannot scale a collision shape without scaling any other RigidBody with reference of it
+
+
Note that you should share collision shapes in general and that j3o files loaded from file do that as well when instantiated twice so this is something to consider.
-
stepping physics (before or in parallel to Application.render())
+
-
+
Physics objects remain in the physics space when their spatials are detached from the scene graph!
+
+
Use PhysicsSpace.remove(physicsObject) or simply physicsControl.setEnabled(false); to remove them from the PhysicsSpace
+
+
+
+
If you apply forces to the physics object in an update() call they might not get applied because internally bullet still runs at 60fps while your app might run at 120.
+
+
You can use the PhysicsTickListener interface and register with the physics space and use the preTick() method to be sure that you actually apply the force in the right moment.
+
+
Reading values from the physics objects in the update loop should always yield correct values but they might not change over several fames due to the same reason.
+
+
+
+
Reading or writing from the physics objects during the render phase is not recommended as this is when the physics space is stepped and would cause data corruption. This is why the debug display does not work properly in a threaded BulletAppState
+
+
Bullet always uses world coordinates, there is no such concept as nodes so the object will be moved into a world location with no regard to its parent spatial.
+
+
You can configure this behavior using the setApplyPhysicsLocal() method on physics controls but remember the physics space still runs in world coordinates so you can visually detach things that will actually still collide in the physics space.
+
+
To use the local applying to simulate e.g. the internal physics system of a train passing by, simply create another BulletAppState and add all models with physics controls in local mode to a node. When you move the node the physics will happen all the same but the objects will move along with the node.
+
+
+
+
@@ -52,8 +87,27 @@ When you use this physics simulation, values correspond to the following units:
+
+
+Bullet physics runs internally at 60fps by default. This rate is not dependent on the actual framerate and it does not lock the framerate at 60fps. Instead, when the actual fps is higher than the physics framerate the system will display interpolated positions for the physics objects. When the framerate is lower than the physics framerate, the physics space will be stepped multiple times per frame to make up for the missing calculations.
+
+
+
+Internally, the updating and syncing of the actual physics objects in the BulletAppState happens in the following way:
+
+
+
collision callbacks (BulletAppState.update())
+
+
user update (simpleUpdate in main loop, update() in Controls and AppStates)
+
+
physics to scenegraph syncing and applying (updateLogicalState())
+
+
stepping physics (before or in parallel to Application.render())
@@ -173,7 +227,7 @@ Disc-shaped objects like wheels, plates.
PlaneCollisionShape()
A 2D plane. Very fast.
Flat solid floor or wall.
-
+
All non-mesh CollisionShapes can be used for dynamic, kinematic, as well as static Spatials. (Code samples see below)
@@ -200,7 +254,7 @@ All non-mesh CollisionShapes can be used for dynamic, kinematic, as well as stat
Limitations: Requires heightmap data. Collisions between two mesh-accurate shapes cannot be detected, only non-mesh shapes can collide with this shape.
Static terrains.
-
+
On a CollisionShape, you can apply a few properties
@@ -214,7 +268,7 @@ On a CollisionShape, you can apply a few properties
new Vector3f(1f,2f,1f)
-
+
The mesh-accurate shapes can use a CollisionShapeFactory as constructor (code samples see below).
@@ -231,7 +285,7 @@ The mesh-accurate shapes can use a CollisionShapeFactory as constructor (code sa
Use 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.
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.
@@ -499,7 +553,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:
@@ -520,9 +574,9 @@ On a RigidBodyControl, you can apply the following physical forces:
(See detailed explanation below.)
-
+
-
+
@@ -633,7 +687,7 @@ Use the following methods to move dynamic physical objects.
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.
@@ -667,13 +721,13 @@ removeCollideWithGroup(COLLISION_GROUP_01)
Collision Groups are integer
setSleepingThreshold(float,float)
Sets the sleeping thresholds which define when the object gets deactivated to save resources. The first value is the linear threshold and the second the angular. Low values keep the object active when it barely moves (slow precise performance), high values put the object to sleep immediately (imprecise fast performance). (?)
-
setCcdMotionThreshold(0f)
Sets the amount of motion that has to happen in one physics tick to trigger the continuous motion detection in movign obejcts that push one another. This avoids the problem of fast objects moving through other objects. Set to zero to disable (default).
+
setCcdMotionThreshold(0f)
Sets the amount of motion that has to happen in one physics tick to trigger the continuous motion detection in moving objects that push one another. This avoids the problem of fast objects moving through other objects. Set to zero to disable (default).
-
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.
+
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 behaviors such as objects passing 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.
@@ -681,7 +735,7 @@ removeCollideWithGroup(COLLISION_GROUP_01)
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/physics_listeners.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/physics_listeners.html
index 15d91dcb2..4807163cd 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/physics_listeners.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/physics_listeners.html
@@ -256,4 +256,4 @@ myNode.getControl(RigidBodyControl.class).setCollideWithGroups(Physi
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/post-processor_water.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/post-processor_water.html
index 17ea8cb43..b106f4fc1 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/post-processor_water.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/post-processor_water.html
@@ -270,7 +270,7 @@ manager.loadTexture("Textures/foam.png") )
This foam texture w
You should also add audio nodes with water sounds to complete the effect.
-
AudioNode waves = new AudioNode(assetManager, "Sound/Environment/Ocean Waves.ogg", false);
+
AudioNode waves = new AudioNode(assetManager, "Sounds/Environment/Ocean Waves.ogg", false);
waves.setLooping(true);
audioRenderer.playSource(waves);
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/ragdoll.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/ragdoll.html
index c9d85febc..9908a0312 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/ragdoll.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/ragdoll.html
@@ -214,4 +214,4 @@ If you experience weird behaviour in a ragdoll ??? such as exploding into pieces
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/remote-controlling_the_camera.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/remote-controlling_the_camera.html
index 9275d7dd6..0c9af2669 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/remote-controlling_the_camera.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/remote-controlling_the_camera.html
@@ -56,4 +56,4 @@ If desired, attach the camNode to a MotionTrack to let it travel along waypoints
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/save_and_load.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/save_and_load.html
index e2f012c9c..fbb87dd4f 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/save_and_load.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/save_and_load.html
@@ -167,7 +167,7 @@ To make a custom class savable:
-
As with all serialization, remember that if you ever change data types in custom classes, the updated read() methods will no longer be able to read your old files.
+
As with all serialization, remember that if you ever change data types in custom classes, the updated read() methods will no longer be able to read your old files. Also there has to be a constructor that takes no Parameters.
@@ -190,4 +190,4 @@ To make a custom class savable:
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/screenshots.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/screenshots.html
index 3261f3ba7..33a0986bd 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/screenshots.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/screenshots.html
@@ -24,4 +24,4 @@ The screenshot is saved to the user directory.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/simplewater.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/simplewater.png
index 85b4a7e36..f201ebcea 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/simplewater.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/simplewater.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/sky.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/sky.html
index d968832ca..4c68a71da 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/sky.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/sky.html
@@ -99,4 +99,4 @@ Box or Sphere?
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/spatial.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/spatial.html
index 29a7e5aae..2ac9597db 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/spatial.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/spatial.html
@@ -89,20 +89,21 @@ The polygon Mesh inside
-Cloned spatials share the same mesh, while each cloned spatial can have its own local transformation (translation, rotation, and scale) in the scene. This means you only use clone() on spatials whose meshes never change. The most common use case for cloning is when you use several Spatials that are based on the same Shapes.
+Cloned spatials share the same mesh, while each cloned spatial can have its own local transformation (translation, rotation, and scale) in the scene. This means you only use clone() on spatials whose meshes never change. The most common use case for cloning is when you use several Spatials that are based on the same Shapes (e.g. trees, crates).
-The second use case is: When you load a model using loadModel() from the AssetManager, you may get a clone()ed object. In particular:
+The second use case is: When you load a model using loadModel() from the AssetManager, you may automatically get a clone()ed object. In particular:
-
If the model is not animated (it has no AnimControl), you get a clone. All clones share one mesh object. (Uses less memory)
+
If the model is not animated (it has no AnimControl), jME loads a clone. All clones share one mesh object in order to use less memory.
-
If the model is animated (it has a AnimControl), then loadModel() duplicates the mesh for each loaded instance. (Uses more memory)
+
If the model is animated (it has a AnimControl), then loadModel() duplicates the mesh for each loaded instance. (Uses more memory, but can animate.)
+
Usually there is no need to manually use any of the clone() methods on models. Using the Asset Manager's loadModel() method will automatically do the right thing for your models.
@@ -112,7 +113,7 @@ Usually there is no need to manually use any of the clone() methods
-
+
@@ -127,15 +128,15 @@ You can include custom user data ???that is, custom Java objects and methods???
-This first example adds an integer field named health to the Spatial player_node, and initializes it to 100.
+This first example adds an integer field named health to the Spatial playerNode, and initializes it to 100.
-
player_node.setUserData("health", 100);
+
playerNode.setUserData("health", 100);
The second example adds a set of custom accessor methods to the player object. You create a custom PlayerControl() class and you add this control to the Spatial:
-
player_node.addControl(new PlayerControl());
+
playerNode.addControl(new PlayerControl());
In your PlayerControl() class, you define custom methods that set and get your user data in the spatial object. For example, the control could add accessors that set and get the player's health:
@@ -148,11 +149,11 @@ public void setHealth(int h) {
}
-Elsewhere in your code, you can access this data wherever you have access to the Spatial player_node.
+Elsewhere in your code, you can access this data wherever you have access to the Spatial playerNode.
-
health = player_node.getControl(PlayerControl.class).getHealth();
+
health = playerNode.getControl(PlayerControl.class).getHealth();
...
-player_node.getControl(PlayerControl.class).setHealth(99);
You can add as many data objects (of String, Boolean, Integer, Float, Array types) to a Spatial as you want. Just make sure to label them with unique case-sensitive strings (health, Inventory, equipment, etc).
@@ -171,7 +172,7 @@ This is how you list all data keys that are already defined for one Spatial:
}
@@ -205,18 +206,22 @@ There are two types of culling: Face culling, and view frustrum culling.
-Face culling refers to not drawing certain polygons of a mesh. The "inside" of the mesh (the so called backface) is never visible to the player, and as an optimization, game engines skip calculating backfaces by default. You may want to deactivate Face Culling while debugging custom meshes, so you can see them in case you turned them inside-out by accident.
+Face culling means not drawing certain polygons of a mesh. Face culling behaviour is a property of the material.
+
+
+
+Usage: The "inside" of a mesh (the so called backface) is typically never visible to the player, and as an optimization, the Back mode skips calculating all backfaces by default. Activating the Off or Front modes can be useful when you are debugging custom meshes and try to identify accidental inside-out faces.
-You can switch the com.jme3.material.RenderState.FaceCullMode to
+You can switch the com.jme3.material.RenderState.FaceCullMode to either:
-
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. Backface culling is the default 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 a mesh are drawn. A mesh with frontface culling will most likely be invisible. Used for debugging "inside-out" custom meshes.
-
FaceCullMode.FrontAndBack ??? The mesh becomes invisible.
+
FaceCullMode.FrontAndBack ??? Use this to make a mesh temporarily invisible.
FaceCullMode.Off ??? Every side of the mesh is drawn. Looks normal, but slows down large scenes.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/swing_canvas.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/swing_canvas.html
index 46c7f135d..179c055a0 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/swing_canvas.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/swing_canvas.html
@@ -185,4 +185,4 @@ Remember, to navigate in the scene, click and drag (!) the mouse, or press the W
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/tanlglow1.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/tanlglow1.png
index 4c9ee2ef9..aaf4e4faf 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/tanlglow1.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/tanlglow1.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/terrain.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/terrain.html
index 834117c2c..c092e2096 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/terrain.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/terrain.html
@@ -305,4 +305,4 @@ PS: As an alternative to an image-based height map, you can also generate a Hill
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/terrain_collision.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/terrain_collision.html
index b714789af..519b0f564 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/terrain_collision.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/terrain_collision.html
@@ -127,12 +127,9 @@ public class HelloTerrainCollision extends SimpleApplication
terrain.addControl(control);
/** 6. Add physics: */
- // We set up collision detection for the scene by creating a
- // compound collision shape and a static RigidBodyControl with mass zero.*/
- CollisionShape terrainShape =
- CollisionShapeFactory.createMeshShape((Node) terrain);
- landscape = new RigidBodyControl(terrainShape, 0);
- terrain.addControl(landscape);
+ // We set up collision detection for the scene by creating a static
+ RigidBodyControl with mass zero.*/
+ terrain.addControl(new RigidBodyControl(0));
// We set up collision detection for the player by creating
// a capsule collision shape and a CharacterControl.
@@ -213,12 +210,12 @@ Compile and run the code. You should see a terrain. You can use the WASD keys an
-
+
You attach the terrain and the first-person player to the rootNode, and to the physics space, to make them appear in the game world.
@@ -290,7 +282,7 @@ You attach the terrain and the first-person player to
bulletAppState.getPhysicsSpace().add(player);
@@ -302,7 +294,7 @@ You see that you can combine snippets of sample code (such as HelloTerrain and H
You should spawn high up in the area and fall down to the map, giving you a few seconds to survey the area. Then walk around and see how you like the lay of the land.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/vehicles.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/vehicles.html
index 391a85742..815488d78 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/vehicles.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/vehicles.html
@@ -338,4 +338,4 @@ For a more advanced example, look at 1)
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/walking_character.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/walking_character.html
index 25d3269b8..80bebd27d 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/walking_character.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/walking_character.html
@@ -4,15 +4,20 @@
-In the Hello Collision tutorial and the code sample you have seen how to create collidable landscapes and walk around in a first-person perspective. The first-person camera is enclosed by a collision shape and is steered by a CharacterControl.
+In the Hello Collision tutorial and the code sample you have seen how to create collidable landscapes and walk around in a first-person perspective. The first-person camera is enclosed by a collision shape and is steered by the BetterCharacterControl.
Other games however require a third-person perspective of the character: In these cases you use a CharacterControl on a Spatial. This example also shows how to set up custom navigation controls, so you can press WASD to make the third-person character walk; and how to implement dragging the mouse to rotate.
+
+
Some details on this page still need to be updated from old CharacterControl API to BetterCharacterControl API.
+
-When you load a character model, give it a RigidBodyControl, and use forces to push it around, you do not get the desired behaviour: RigidBodyControl'ed objects (such as cubes and spheres) roll or tip over when pushed by physical forces. This is not the behaviour that you expect of a walking character. JME3's BulletPhysics integration offers a special CharacterControl with a setWalkDirection() method. You use it to create simple characters that treat floors and walls as solid, and always stays locked upright while moving.
+Motivation: When you load a character model, give it a RigidBodyControl, and use forces to push it around, you do not get the desired behaviour: RigidBodyControl'ed objects (such as cubes and spheres) roll or tip over when pushed by physical forces. This is not the behaviour that you expect of a walking character. JME3's BulletPhysics integration offers a BetterCharacterControl with a setWalkDirection() method. You use it to create simple characters that treat floors and walls as solid, and always stays locked upright while moving.
@@ -98,19 +103,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.
public class WalkingCharacterDemo extends SimpleApplication
@@ -132,7 +137,7 @@ For best practices on how to use setWalkDirection(), see the Naviga
public void onAnimChange(AnimControl control, AnimChannel channel, String animName) { }
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water-post-muddy.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water-post-muddy.png
index cf85799ca..58423c3ba 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water-post-muddy.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water-post-muddy.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water-reflection-muddy.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water-reflection-muddy.png
index 29d04ff4c..41aceed4e 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water-reflection-muddy.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water-reflection-muddy.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water.html
index 6d0ab2da5..ba7a0b04c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water.html
@@ -214,4 +214,4 @@ You can offer a switch to set the water Material to a static texture ??? for use
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water.png
index 7824b26e3..e01cf49e4 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/water.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/android.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/android.html
index bf26c4f43..398f280b6 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/android.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/android.html
@@ -178,6 +178,11 @@ An APK file is created in the "dist" folder.
The default android run target uses the default device set in the Android configuration utility. If you set that to a phone you can run the application directly on your phone, the emulator does not support OpenGLES 2.0 and cannot run the engine.
+
+
When running your application on some Android devices, having a debugging session open via certain IDEs will significantly lower performance (some reports suggest a drop from 60 FPS to 4-8 FPS) until the debug session is detached or the application is started directly from the device.
+
+
+
Optionally, download
@@ -207,6 +212,11 @@ Activating the nbandroid plugin in the jMonkeyEngine .*
+
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-assets-models.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-assets-models.png
index 1770d777c..d87c3d238 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-assets-models.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-assets-models.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-effect-fire.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-effect-fire.png
index 93fc10140..24096dc49 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-effect-fire.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-effect-fire.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-materials.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-materials.png
index d18e81b68..fb9a2ce59 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-materials.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-materials.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-physics.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-physics.png
index 060b52495..7b02a3744 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-physics.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-physics.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-scene.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-scene.png
index fb02d63ab..7eaf67bde 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-scene.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-scene.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-terrain.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-terrain.png
index 5d6bb8ce9..e42e21b9d 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-terrain.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/beginner-terrain.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_animation.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_animation.html
index 0fea73b32..754f16629 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_animation.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_animation.html
@@ -129,7 +129,7 @@ Don't forget to add a light source to make the material visible.
-
@@ -340,7 +340,7 @@ Now you can load animated models, identify stored animations, and trigger animat
Now that your character can walk, wouldn't it be cool if it could also pick up things, or aim a weapon at things, or open doors? Time to reveal the secrets of mouse picking!
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_asset.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_asset.html
index db43825c0..07f98cf87 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_asset.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_asset.html
@@ -466,7 +466,7 @@ Now you know how to populate the scenegraph with static shapes and models, and h
Let's add some action to the scene and continue with the Update Loop!
-
+
See also:
@@ -498,4 +498,4 @@ Let's add some action to the scene and continue with the
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_audio.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_audio.html
index eeefda9e0..e3dc9130b 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_audio.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_audio.html
@@ -7,7 +7,7 @@ Previous: Hello Te
-This tutorial explains how to add 3D sound to a game, and how make sounds play together with events, such as clicking. You learn how to use an Audio Listener and Audio Nodes. You also make use of an Action Listener and a MouseButtonTrigger from the previous Hello Input tutorial to make a mouse click trigger a gun shot sound.
+This tutorial explains how to add 3D sound to a game, and how to make sounds play together with events, such as clicking. You learn how to use an Audio Listener and Audio Nodes. You also make use of an Action Listener and a MouseButtonTrigger from the previous Hello Input tutorial to make a mouse click trigger a gun shot sound.
@@ -17,7 +17,7 @@ This tutorial explains how to add 3D sound to a game, and how make sounds play t
-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 is just arbitrary sample content, so you see something when running the audio sample.
@@ -124,7 +124,7 @@ Let's have a closer look at initAudio() to learn how to use
@@ -339,7 +339,7 @@ In this example, you defined the nature sound as coming from a certain position,
-It makes equally sense to make the gunshot positional, and let the ambient sound come from every direction. How do you decide which type of 3D sound to use from case to case?
+It makes equal sense to make the gunshot positional, and let the ambient sound come from every direction. How do you decide which type of 3D sound to use from case to case?
In a game with moving enemies you may want to make the gun shot or footsteps positional sounds. In these cases you must move the AudioNode to the location of the enemy before playInstance()ing it. This way a player with stereo speakers hears from which direction the enemy is coming.
@@ -356,7 +356,7 @@ In short, you must choose in every situation whether it makes sense for a sound
@@ -373,7 +373,7 @@ You now know how to add the two most common types of sound to your game: Global
Want some fire and explosions to go with your sounds? Read on to learn more about effects.
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_collision.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_collision.html
index 456e65b73..e6082fed4 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_collision.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_collision.html
@@ -183,7 +183,7 @@ public class HelloCollision extends SimpleApplication
}
-Run the sample. You should see a town square with houses and a monument. Use the WASD keys and the mouse to navigate around with a first-person perspective. Run forward and jump by pressing W and Space. Note how you step over the sidewalk, and up the steps to the monument. You can walk in the alleys between the houses, but the walls are solid. Don't walk over the edge of the world!
+Run the sample. You should see a town square with houses and a monument. Use the WASD keys and the mouse to navigate around with a first-person perspective. Run forward and jump by pressing W and Space. Note how you step over the sidewalk, and up the steps to the monument. You can walk in the alleys between the houses, but the walls are solid. Don't walk over the edge of the world!
@@ -450,7 +450,7 @@ For all other directions: Every time the user presses one of the WASD keys, you
-Previously in the onAction() method, you have collected the info in which direction the user wants to go in terms of "forward" or "left". In the update loop, you repatedly poll the current rotation of the camera. You calculate the actual vectors to which "forward" or "left" corresponds in the coordinate system.
+Previously in the onAction() method, you have collected the info in which direction the user wants to go in terms of "forward" or "left". In the update loop, you repeatedly poll the current rotation of the camera. You calculate the actual vectors to which "forward" or "left" corresponds in the coordinate system.
@@ -494,7 +494,7 @@ This is how the walking is triggered:
@@ -508,7 +508,7 @@ You learned to speed up the physics calculations by using the CollisionShapeFact
Terrains are another type of scene in which you will want to walk around. Let's proceed with learning how to generate terrains now.
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_effects.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_effects.html
index 9b7f75999..0ea66d764 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_effects.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_effects.html
@@ -201,11 +201,11 @@ The following particle textures included in test-data.jar. You can
-Copy them into you assets/Effects directory to use them.
+Copy them into your assets/Effects directory to use them.
Whether particles fall down (positive) or fly up (negative). Set to 0f for a zero-g effect where particles keep flying.
-
+
You can find details about effect parameters here.
@@ -336,7 +336,7 @@ Add and modify one parameter at a time, and try different values until you get t
@@ -369,7 +369,7 @@ You have learned that many different effects can be created by changing the para
Now you move on to another exciting chapter ??? the simulation of . Let's shoot some cannon balls at a brick wall!
-
+
beginner,
documentation,
@@ -379,5 +379,5 @@ Now you move on to another exciting chapter ??? the simulation of
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_input_system.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_input_system.html
index eb4828086..8fcecd1da 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_input_system.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_input_system.html
@@ -293,7 +293,7 @@ Mappings registered to the AnalogListener are triggered repeate
-In order to see the total time that a key has been pressed for then the incoming value can be accumulated. The analogue listener may also need to be combined with an action listener so that you are notified when they key is released.
+In order to see the total time that a key has been pressed for then the incoming value can be accumulated. The analogue listener may also need to be combined with an action listener so that you are notified when the key is released.
Example: Navigational events (e.g. Left, Right, Rotate, Run, Strafe), situations where you interact continuously.
@@ -325,7 +325,7 @@ Mappings registered to the ActionListener are digital either-or
}
-
+
@@ -361,14 +361,14 @@ You can find the list of input constants in the files src/core/com/jme3/in
KeyTrigger(KeyInput.KEY_LEFT), KeyTrigger(KeyInput.KEY_RIGHT)
-
+
Tip: If you don't recall an input constant during development, you benefit from an IDE's code completion functionality: Place the caret after e.g. KeyInput.| and trigger code completion to select possible input identifiers.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_main_event_loop.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_main_event_loop.html
index f552e1591..348012f9f 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_main_event_loop.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_main_event_loop.html
@@ -89,7 +89,7 @@ Now have a closer look at the simpleUpdate() method ??? this is the
-A rotating object is just a simple example. In the update loop, you typically have many tests and trigger various game actions. This is were you update score and health points, check for collisions, make enemies calculate their next move, roll the dice whether a trap has been set off, play random ambient sounds, and much more.
+A rotating object is just a simple example. In the update loop, you typically have many tests and trigger various game actions. This is where you update score and health points, check for collisions, make enemies calculate their next move, roll the dice whether a trap has been set off, play random ambient sounds, and much more.
@@ -108,7 +108,7 @@ A rotating object is just a simple example. In the update loop, you typically ha
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_material.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_material.html
index e685fbabe..127db9b2c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_material.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_material.html
@@ -417,7 +417,7 @@ You have also learned that a material can be stored in a .j3m file. The file ref
Now that you know how to load models and how to assign good-looking materials to them, let's have a look at how to animate models in the next chapter, Hello Animation.
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_node.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_node.html
index 34adcb913..275a16653 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_node.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_node.html
@@ -251,7 +251,7 @@ If you run the app with only the code up to here, you see two cubes: A red cube
-You can transform (e.g. rotate) Geometries around their own center, or around a user defined center point. A user defined center point for one or more Geometries is called pivot.
+You can transform (e.g. rotate) Geometries around their own center, or around a user defined center point. A user defined center point for one or more Geometries is called a pivot.
@@ -264,7 +264,7 @@ You can transform (e.g. rotate) Geometries around their own center, or around a
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_physics.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_physics.html
index 4e1ba5bd5..5c9efd988 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_physics.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_physics.html
@@ -319,7 +319,7 @@ In this "shoot at the wall" example, you use Geometries such as cannon
-We want to create brick Geometries from those boxes. For each Geometry with physcial properties, you create a RigidBodyControl.
+We want to create brick Geometries from those boxes. For each Geometry with physical properties, you create a RigidBodyControl.
private RigidBodyControl brick_phy;
@@ -482,7 +482,7 @@ This code sample does the following:
You create a RigidBodyControl floor_phy for floor_geo.
-
floor_phy has a mass of 0f
+
floor_phy has a mass of 0f
You add floor_phy to floor_geo.
@@ -650,4 +650,4 @@ You have learned how to activate the jBullet PhysicsSpace in an application by a
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_picking.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_picking.html
index 186660d47..b0090df45 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_picking.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_picking.html
@@ -506,7 +506,7 @@ Use your imagination from here:
Now, wouldn't it be nice if those targets and the floor were solid objects and you could walk around between them? Let's continue to learn about Collision Detection.
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_simpleapplication.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_simpleapplication.html
index 8420d279b..3e18d7e6c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_simpleapplication.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_simpleapplication.html
@@ -13,85 +13,85 @@ Next: Hello Node
-Nesta s??rie de tutoriais, n??s assumimos que voc?? usa o SDK da jMonkeyEngine. Como um desenvolvedor Java intermedi??rio ou avan??ado, voc?? rapidamente ver?? que, em geral, voc?? pode desenvolver c??digo da jMonkeyEngine em qualquer ambiente de desenvolvimento integrado (NetBeans IDE, Eclipse, IntelliJ) ou mesmo da linha de comando.
+In this tutorial series, we assume that you use the jMonkeyEngine SDK. As an intermediate or advanced Java developer, you will quickly see that, in general, you can develop jMonkeyEngine code in any integrated development environment (NetBeans IDE, Eclipse, IntelliJ) or even from the command line.
-OK, Vamos nos aprontar para criar nossa primeira aplica????o jMonkeyEngine3.
+OK, let's get ready to create our first jMonkeyEngine3 application.
-Na SDK da jMonkeyEngine:
+In the jMonkeyEngine SDK:
-
Escolha Arquivo (File)???Novo Projeto (New Project)??? do menu principal.
+
Choose File???New Project??? from the main menu.
-
No assistente de Novo Projeto, selecione o modelo JME3???Jogo B??sico (Basic Game). Clique em prosseguir (Next).
+
In the New Project wizard, select the template JME3???Basic Game. Click Next.
-
Especifique um nome de projeto, e.g. "HelloWorldTutorial"
+
Specify a project name, e.g. "HelloWorldTutorial"
-
Especifique um caminho para armazenar seu novo projeto, e.g. um diret??rio projetosjMonkey no seu diret??rio de usu??rio.
+
Specify a path where to store your new project, e.g. a jMonkeyProjects directory in your home directory.
-
Clique em terminar (Finish).
+
Click Finish.
-Se voc?? tem perguntas, leia mais sobre Cria????o de Projeto aqui.
+If you have questions, read more about Project Creation here.
-
N??s recomendamos atravessar os passos voc?? mesmo, como descrito nos tutoriais. Alternativamente, voc?? pode criar um projeto baseado no modelo JmeTests no SDK da jMonkeyEngine. Isto criar?? um projeto que j?? cont??m as amostras jme3test.helloworld (e muitas outras). Por exemplo, voc?? pode usar o projeto JmeTests para verificar se voc?? tem a solu????o certa.
+
We recommend to go through the steps yourself, as described in the tutorials. Alternatively, you can create a project based on the JmeTests template in the jMonkeyEngine SDK. It will create a project that already contains the jme3test.helloworld samples (and many others). For example, you can use the JmeTests project to verify whether you got the solution right.
-Para este tutorial, voc?? deseja criar um pacote jme3test.helloworld no seu projeto, e criar um arquivo HelloJME3.java nele.
+For this tutorial, you want to create a jme3test.helloworld package in your project, and create a file HelloJME3.java in it.
-No SDK da jMonkeyEngine:
+In the jMonkeyEngine SDK:
-
D?? um clique com o bot??o direito no n?? pacotes de c??digo-fonte (Source Packages) de seu projeto.
+
Right-click the Source Packages node of your project.
-
Escolha Novo (New)??? ???Classe Java (Java Class) para criar um novo arquivo.
+
Choose New??????Java Class to create a new file.
-
Digite o nome da classe: HelloJME3
+
Enter the class name: HelloJME3
-
Digite o nome do pacote: jme3test.helloworld.
+
Enter the package name: jme3test.helloworld.
-
Clique em Finalizar (Finish).
+
Click Finish.
-O SDK cria o arquivo HelloJME3.java para voc??.
+The SDK creates the file HelloJME3.java for you.
-Substitua os conte??dos do arquivo HelloJME3.java com o seguinte c??digo:
+Replace the contents of the HelloJME3.java file with the following code:
package jme3test.helloworld;
@@ -125,48 +125,48 @@ public class HelloJME3 extends SimpleApplication {
}
-D?? um clique com o bot??o direito na classe HelloJME3 class e escolha Executar (Run). Se um di??logo de configura????es da jME3 aparecer, confirme as configura????es padr??o.
+Right-click the HelloJME3 class and choose Run. If a jME3 settings dialog pops up, confirm the default settings.
-
Voc?? deveria ver uma janela simples exibindo um cubo 3D.
+
You should see a simple window displaying a 3D cube.
-
Pressione as teclas WASD keys e mova para navegar ao redor.
+
Press the WASD keys and move the mouse to navigate around.
-
Olhe no texto do FPS e na informa????o de contagem de objeto na esquerda-fundo. Voc?? usar?? esta informa????o durante o desenvolvimento, e voc?? remover?? ela para a libera????o. (Para ler os n??meros corretamente, considere que as 14 linhas de texto contam como 14 objetos com 914 v??rtices.)
+
Look at the FPS text and object count information in the bottom left. You will use this information during development, and you will remove it for the release. (To read the numbers correctly, consider that the 14 lines of text counts as 14 objects with 914 vertices.)
-
Pressione Escape (Esc) para fechar a aplica????o.
+
Press Escape to close the application.
-Parab??ns! Agora camos decobrir como isso funciona!
+Congratulations! Now let's find out how it works!
-Olhe na primeira linha. A classe HelloJME3.java estende com.jme3.app.SimpleApplication.
+Look at the first line. The HelloJME3.java class extends com.jme3.app.SimpleApplication.
public class HelloJME3 extends SimpleApplication {
// your code...
}
-Todo jogo JME3 ?? uma inst??ncia de com.jme3.app.SimpleApplication. A classe SimpleApplication gerencia seu grafo de cena 3D e automaticamente desenha ele para a tela ??? isto ??, em breve, o que uma engine de jogo faz para voc??!
+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!
@@ -188,7 +188,7 @@ This code opens your application window. Let's learn how you put something
@@ -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 2x2x2 box shape at the origin
+ Box b = new Box(Vector3f.ZERO, 1, 1, 1); // create a 1x1x1 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
@@ -288,7 +288,7 @@ A typical JME3 game has the following initialization process:
@@ -326,7 +326,7 @@ The now following tutorials teach how you accomplish these tasks with the jMonke
Continue with the Hello Node tutorial, where you learn more details about how to initialize the game world, also known as the scene graph.
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_terrain.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_terrain.html
index ea536d372..bc24b63cd 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_terrain.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/beginner/hello_terrain.html
@@ -226,14 +226,14 @@ It requires an image from a JME Texture.
-The following two lines generate the heightmap object based on your user-defined image:
+The following three lines generate the heightmap object based on your user-defined image:
@@ -486,7 +487,7 @@ The following two lines generate the heightmap object based on your user-defined
Instead, you can also let JME3 generate a random landscape for you:
-
What result do you get when you replace the above two heightmap lines by the following lines and run the sample?
HillHeightMap heightmap = null;
+
What result do you get when you replace the above three heightmap lines by the following lines and run the sample?
HillHeightMap heightmap = null;
HillHeightMap.NORMALIZE_RANGE = 100; // optional
try {
heightmap = new HillHeightMap(513, 1000, 50, 100, (byte) 3); // byte 3 is a random seed
@@ -528,10 +529,11 @@ You see the variety of hilly landscapes that can be generated using this method.
For this exercise, you can keep using the splat Material from the sample code above. Just don't be surprised that the Material does not match the shape of the newly randomized landscape. If you want to generate real matching splat textures for randomized heightmaps, you need to write a custom method that, for example, creates an alphamap from the heightmap by replacing certain grayscales with certain RGB values.
-You have learned how to create terrains that are more efficient than loading one giant model. You know how to create generate random or handmade heightmaps. You can add a LOD control to render large terrains faster. You are aware that you can combine what you learned about collison detection to make the terrain solid to a physical player. You are also able to texture a terrain "like a boss" using layered Materials and texture splatting. You are aware that the jMonkeyEngine SDK provides a TerrainEditor that helps with most of these manual tasks.
+You have learned how to create terrains that are more efficient than loading one giant model. You know how to generate random or create handmade heightmaps. You can add a LOD control to render large terrains faster. You are aware that you can combine what you learned about collision detection to make the terrain solid to a physical player. You are also able to texture a terrain "like a boss" using layered Materials and texture splatting. You are aware that the jMonkeyEngine SDK provides a TerrainEditor that helps with most of these manual tasks.
Do you want to hear your players say "ouch!" when they bump into a wall or fall off a hill? Continue with learning how to add sound to your game.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/build_from_sources.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/build_from_sources.html
index 78c88b0bc..e387c87b0 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/build_from_sources.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/build_from_sources.html
@@ -46,7 +46,7 @@ We recommend downloading the this list.
-
+
Learn more about:
@@ -63,4 +63,4 @@ Learn more about:
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/build_jme3_sources_with_netbeans.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/build_jme3_sources_with_netbeans.html
index fa8326467..c5268f50c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/build_jme3_sources_with_netbeans.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/build_jme3_sources_with_netbeans.html
@@ -148,7 +148,7 @@ If you are working on a game project that depends on jme3:
This tip works for any third-party JAR library that you use. (You may have to download the javadoc/sources from their home page separately).
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/1.gif b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/1.gif
index e2f97aab0..e2b02e413 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/1.gif and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/1.gif differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/2.gif b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/2.gif
index 96d619d50..b9ae86888 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/2.gif and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/2.gif differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3.1.gif b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3.1.gif
index d91744836..c7dd9a3e8 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3.1.gif and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3.1.gif differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3.gif b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3.gif
index cffb99759..2e40bea19 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3.gif and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3.gif differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3dsmax.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3dsmax.html
index b619fe0af..9a4450b3a 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3dsmax.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/3dsmax.html
@@ -221,7 +221,7 @@ public class TestOgreMaxImport extends SimpleApplication {
mat.setColor("Color", ColorRGBA.Green);
mat.getAdditionalRenderState().setDepthTest(false);
skeletonDebug.setMaterial(mat);
- model.attachChild(skeletonDebug);
+ ((Node) ac.getSpatial()).attachChild(skeletonDebug);
// create a channel and start the wobble animation
final AnimChannel channel = ac.createChannel();
@@ -284,10 +284,11 @@ You will see your worms strange movements. Have fun!
@@ -509,7 +510,7 @@ public class TestOgreMaxImport extends SimpleApplication {
mat.setColor("Color", ColorRGBA.Green);
mat.getAdditionalRenderState().setDepthTest(false);
skeletonDebug.setMaterial(mat);
- // model.attachChild(skeletonDebug);
+ ((Node) ac.getSpatial()).attachChild(skeletonDebug);
// create a channel and start the walk animation
final AnimChannel channel = ac.createChannel();
@@ -612,5 +613,5 @@ As you can see, the LOD is working:
Game-compatible models are models that basically only consist of a mesh and UV-mapped textures, in some cases animations. All other material parameters or effects (like particles etc.) can not be expected to be transferred properly and probably would not translate to live rendering very well anyway.
-
-Note that BMeshes are not yet supported by the importers and exporters so please use the "legacy mesh format" for now in blender 2.63+
-
To successfully import a texture, the texture has to be UV-mapped to the model. Heres how to assign diffuse, normal and specular maps:
-
-
-
-
-
-
+
+
+
+
+
+
-Its important to note that each used texture will create one separate geometry. So its best to either combine the UV maps or use a premade atlas with different texture types from the start and then map the uv coords of the models to the atlas instead of painting on the texture. This works best for large models like cities and space ships.
+Its important to note that each used texture will create one separate geometry. So its best to either combine the UV maps or use a premade atlas with different texture types from the start and then map the uv coords of the models to the atlas instead of painting on the texture. This works best for large models like cities and space ships.
+Animations for jME3 have to be bone animations, simple object movement is supported by the blender importer, mesh deformation or other forms of animation are not supported.
+
+
To create an animation from scratch do the following:
@@ -118,10 +118,16 @@ To create an animation from scratch do the following:
Each action will be an animation available via the animation control in jME after the import
+
Press the "F" button next to the action so it will be saved even if theres no references
+
+
The animation would else be deleted if its not the active animation on the armature and the file is saved
@@ -133,35 +139,45 @@ Sometimes you do not create the model yourself and often times models from the w
To export an animated model in Blender make sure the following conditions are met:
-
+
The animation has to be a bone animation
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.
+
+
+
+
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.
+
+
+
+
-
Set the mesh???s origin point in the bottom of the mesh (see the images below).
+
Set the mesh???s origin point in the bottom of the mesh (see the image below).
-
Set the armature???s origin point in the bottom of the armature (see the images below).
+
Set the armature???s origin point in the bottom of the armature (see the image below).
-
Armature???s origin point and mesh???s origin point must be in the same location(see the images below).
+
Armature???s origin point and mesh???s origin point must be in the same location(see the image below).
-
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)).
+
Use a root bone located in the armature???s origin. This root bone must be in vertical position (see the image 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)).
-
Uncheck ???Bone Envelopes??? checkbox on the Armature modifier for the mesh (see the images below).
+
Uncheck ???Bone Envelopes??? checkbox on the Armature modifier for the mesh (see the image below).
+
+
-
Uncheck ???Envelopes??? checkbox on the armature (see the images below).
+
+
+
Uncheck ???Envelopes??? checkbox on the armature (see the image below).
+
+
-
+
+
+
-
-
-
-
-
-
You can use SkeletonDebugger to show the skeleton on your game in order to check if the mesh and the skeleton are loaded correctly:
@@ -185,13 +201,13 @@ You can use SkeletonDebugger to show the skeleton on your game in order to check
mat.getAdditionalRenderState().setDepthTest(false);
skeletonDebug.setMaterial(mat);
soldier2Node.attachChild(skeletonDebug);
+
+
+
+
-
-
-
-
Also check out these videos and resources:
@@ -205,8 +221,8 @@ Also check out these videos and resources:
If you use the multiresolution modifier you only need one object. Lets look at this example:
+
+
+
+
+
+
Add a multiresolution modifier:
+
+
+
+
+
+
There are two types of modifiers: Catmull-Clark and Simple.
+
+
Simple is better for things like walls or floors.
+
+
Catmull-Clark is better for objects like spheres.
+
+
+
+
When using Catmull-Clark with a higher "subdivide" value (more than 3) its good to have the "preview" value above 0 and less than the subdivide level. This is because Catmull-Clark smoothes the vertices, so the normalMap is not so precise.
+
+
Here is an example of Prewiew 1, it's more smooth than the original mesh:
+
+
+
+
+
+
Enable "Sculpt Mode" in blender and design the highPoly version of your model like here:
+
+
+
+
+
+
Now go into Render Tab, and bake a normalMap using same configuration as here:
+
+
+
+
+
+
-
-If you use the multiresolution modifier you only need one object. Lets look at this example:
-
-
-
-
-
-
-
-Add a multiresolution modifier:
-
-
-
-
-
-
-
-There are two types of modifiers: Catmull-Clark and Simple.
-- Simple is better for things like walls or floors.
-- Catmull-Clark is better for objects like spheres.
-
-
-
-When using Catmull-Clark with a higher "subdivide" value (more than 3) its good to have the "preview" value above 0 and less than the subdivide level. This is because Catmull-Clark smoothes the vertices, so the normalMap is not so precise.
-
-
-
-Here is an example of Prewiew 1, it's more smooth than the original mesh:
-
-
-
-
-
-
-
-Enable "Sculpt Mode" in blender and design the highPoly version of your model like here:
-
-
-
-
-
-
-
-Now go into Render Tab, and bake a normalMap using same configuration as here:
-
-
-
-
Remember! The actual preview affects the baking output and mesh export!
-create a mesh in blender and unwrap it to create uvs
-
-
-
-
-
-
-
-In the mesh tab you can see the sets of Uvs, it will create the first one.
-
-You can assign w/e texture on it, i used the built in checker of blender for the example.
-
-Then in this list, create a new one and click on the camera icon so that baking is made with this set. Name it LightUvMap.
-
-Then in the 3D view in edit mode select all your mesh vertice and hit 'U'/LightMap pack then ok it will unfold the mesh for light map.
-
-Then create a new image, go to the render tab an all at the end check the "Bake" section and select shadows. Then click bake.
-
-If all went ok it will create a light map like this.
-
-
-
-
-
-Then go to the material tab, create a new one for your model and go to the Texture Tab.
-
-Create 2 textures one for the color map, and one for the light map.
-
-In the Mapping section be sure to select coordinates : UV and select the good set of coordinates.
-
-
-
-
-
-
-then the light map
-
-
-
+
+
create a mesh in blender and unwrap it to create uvs
+
+
+
+
+
+
+
+
In the mesh tab you can see the sets of Uvs, it will create the first one.
+
+
You can assign w/e texture on it, i used the built in checker of blender for the example.
+
+
+
+
In this list, create a new one and click on the camera icon so that baking is made with this set. Name it LightUvMap.
+
+
In the 3D view in edit mode select all your mesh vertice and hit 'U'/LightMap pack then ok it will unfold the mesh for light map.
+
+
Create a new image, go to the render tab an all at the end check the "Bake" section and select shadows. Then click bake.
+
+
If all went ok it will create a light map like this.
+
+
+
+
+
+
Go to the material tab, create a new one for your model and go to the Texture Tab.
+
+
Create 2 textures one for the color map, and one for the light map.
+
+
In the Mapping section be sure to select coordinates : UV and select the good set of coordinates.
-Once this is done, export your model with the ogre exporter, and turn it into J3o with the SDK.
+Once this is done, export your model with the ogre exporter (or import it directly via the blend importer), and turn it into J3o with the SDK.
-Create material for it using the lighting definition.
-
-Add the colorMap in the diffuse map slot and the lightMap in the light map slot.
-
-Make sure you check "SeparateTexCoords"
-
-
+
+
Create material for it using the lighting definition.
+
+
Add the colorMap in the diffuse map slot and the lightMap in the light map slot.
+
+
Make sure you check "SeparateTexCoords"
+
+
+
+
+
+
It should roughly result in something like that :
+
+
+
+
+
+
-It should roughly result in something like that :
-
+The blend file, the ogre xml files and the textures can be found in the download section of the google code repo
-The blend file, the ogre xml files and the textures can be found in the download section of the google code repo
-
-There are several ways to create static images to use for a sky in your game. This will describe the concepts used in blender and create an ugly sky Check the links below for other ways and prettier skies.
+There are several ways to create static images to use for a sky in your game. This will describe the concepts used in blender and create an ugly sky Check the links below for other ways and prettier skies.
A sky box is a texture mapped cube, it can also, loosely, be called en EnvMap or a CubeMap. The camera is inside the cube and the clever thing that jME does is to draw the sky so it is always behind whatever else is in your scene. Imagine the monkey is the camera in the picture.
-
-
-
+
+
+
+
+
But a real sky is not a box around our heads, it is more like a sphere. So if we put any old image in the sky it will look strange and might even look like a box. This is not what we want. The trick is to distort the image so that it will look like a sphere even if it in fact is a picture pasted on a box. Luckily blender can do that tricky distortion for us.
@@ -432,75 +451,72 @@ The screenshots are from Blender 2.63 but the equivalent operations have been in
-So let's get started, fire up blender and you'll see something like this.
-
-
-
-
-
-
-
-The cube in the start scene is perfect for us. What we'll do is have Blender render the scene onto that cube. The resulting image is what we'll use for our sky box. So our jME sky will look like we stood inside the blender box and looked out on the scene in blender.
-
-
-
-Start by selecting the box and set its material to shadeless.
-
-
-
-
-
-
-
-Now we will create a texture for the box. Make sure the texture is an Environment Map, that the Viewpoint Object is set to the cube. The resolution is how large the resulting image will be. More pixels makes the sky look better but comes at the cost of texture memory. You'll have to trim the resolution to what works in your application.
-
-
-
-
-
+So let's get started
-
-Next up is the fun part, create the sky scene in blender. You can do whatever fits your application, include models for a city landscape, set up a texture mapped sphere in blender with a nice photographed sky, whatever you can think will make a good sky.
-I am not so creative so I created this scene:
-
-
-
-
-
-
-
-Now render the scene (press F12). It doesn't actually matter where the camera is in blender but you might see something similar to this:
-
-
-
-
-
-
-
-You can see that Blender has actually drawn the scene onto the cube. This is exactly what we want. Now to save the image.
-
-
-
-Select the texture of the cube and select save environment map.
+
+
Fire up blender and you'll see something like this.
+
+
+
+
+
+
The cube in the start scene is perfect for us. What we'll do is have Blender render the scene onto that cube. The resulting image is what we'll use for our sky box. So our jME sky will look like we stood inside the blender box and looked out on the scene in blender.
+
+
Start by selecting the box and set its material to shadeless.
+
+
+
+
+
+
Now we will create a texture for the box. Make sure the texture is an Environment Map, that the Viewpoint Object is set to the cube. The resolution is how large the resulting image will be. More pixels makes the sky look better but comes at the cost of texture memory. You'll have to trim the resolution to what works in your application.
+
+
+
+
+
+
Next up is the fun part, create the sky scene in blender. You can do whatever fits your application, include models for a city landscape, set up a texture mapped sphere in blender with a nice photographed sky, whatever you can think will make a good sky. I am not so creative so I created this scene:
+
+
+
+
+
+
Now render the scene (press F12). It doesn't actually matter where the camera is in blender but you might see something similar to this:
+
+
+
+
+
+
You can see that Blender has actually drawn the scene onto the cube. This is exactly what we want. Now to save the image.
+
+
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).
+
+
-
-
-
-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.
+
+
+
+
+
+
Next up is to move the image files into your assets directory and create the sky in jME. You can do that in the Scene Composer by right clicking the scene node, select Add Spatial and then select Skybox.
+
+
-Next up is to move the image files into your assets directory and create the sky in jME. You can do that in the Scene Composer by right clicking the scene node, select Add Spatial and then select Skybox.
If you want to do it from code, here is an example:
public void simpleInitApp() {
@@ -532,7 +548,7 @@ If you want to do it from code, here is an example:
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_apply_bones.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_apply_bones.png
index 8040bc887..a82389228 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_apply_bones.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_apply_bones.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_apply_mesh.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_apply_mesh.png
index 285d40c30..f1de050fa 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_apply_mesh.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_apply_mesh.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_envelopes.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_envelopes.png
index 4f8ecfa50..4621480b4 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_envelopes.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_envelopes.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_finished.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_finished.png
index 95da95bf5..bf2f1f585 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_finished.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_finished.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_rootbone.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_rootbone.png
index 5fa522745..b8bf5467f 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_rootbone.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender_rootbone.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/faq.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/faq.html
index a8d80c66c..df52ea0e5 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/faq.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/faq.html
@@ -154,11 +154,12 @@ this.assetManager.registerLocator("town.zip", ZipLocator.class)
+Note that you should not register every single folder containing a texture as the assetmanager will not be able to discern between images with the same name anymore.
Learn more:Asset Manager
@@ -774,7 +775,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());
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/appsettings.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/appsettings.html
index eb5451272..b6df625f4 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/appsettings.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/appsettings.html
@@ -208,4 +208,4 @@ Provide the unique name of your jME3 application as the String argument. For exa
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/best_practices.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/best_practices.html
index 9b7ec0575..b45f8f268 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/best_practices.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/best_practices.html
@@ -33,28 +33,31 @@ As a quick overview, answer yourself the following questions:
Motivation
-
Sum up your game idea in one sentence. If you can't, it's too complicated.
+
Sum up your game idea in one catchy sentence. If you can't, it's too complicated.
+E.g. "Craft by day, fight by night!"
-
Who's the target group? Are you making it for yourself or are you trying to attract the masses?
+
Who's the target group? Are you making it for your friends or are you trying to attract the masses?
Game type
-
Point of view (camera)? What character(s) does the player control? (if applicable)
+
Point of view (first- or third-person camera)? What characters does the player control? (if applicable)
@@ -302,7 +305,7 @@ Example: Players have methods such as walk(), addGold(),
-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
+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
@@ -320,7 +323,7 @@ If your game is even more complex, you may want to learn about "real"
@@ -548,7 +551,7 @@ Decide whether you want to release your game as WebStart, desktop JAR, mobile AP
(.APK)
Game runs on Android devices.
Android devices do not support post-procesor effects.
-
+
Which ever method you choose, a Java-Application works on the main operating systems: Windows, Mac OS, Linux, Android.
@@ -558,7 +561,16 @@ Which ever method you choose, a Java-Application works on the main operating sys
The distribution appears in a newly generated dist directory inside your project directory. These are the files that you upload or burn to CD to distribute to your customers.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/coordinate-system.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/coordinate-system.png
index c4042392d..86a1ec8ae 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/coordinate-system.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/coordinate-system.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/file_types.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/file_types.html
index 19f9457ca..c16629ddf 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/file_types.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/file_types.html
@@ -46,8 +46,16 @@ Each custom .j3m Material is based on a material definition. Advanced users can
.OBJ, .MTL
3D model
Wavefront
-
.blend
3D model
Blender version 2.49 or 2.5x
+
.blend
3D model
Blender version 2.49 onwards (tested up to 2.65)
+
+
COLLADA
3D model
Imported via Blender bundled with the SDK
+
+
+
3DS
3D model
Imported via Blender bundled with the SDK
+
+
+
.JPG, .PNG, .GIF
image
Textures, icons
@@ -73,7 +81,7 @@ Each custom .j3m Material is based on a material definition. Advanced users can
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/how_to_use_materials.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/how_to_use_materials.html
index 3d3161cef..6f8f200d0 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/how_to_use_materials.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/how_to_use_materials.html
@@ -282,7 +282,7 @@ To make a Geometry transparent or translucent:
(For colored Materials) In any RGBA color, the first three are Red-Green-Blue, and the last float is the Alpha channel. For example, to replace ColorRGBA.Red with a translucent red:
mat.setColor("Color", new ColorRGBA(1,0,0,0.5f));
-
(For textured Materials) Supply an AlphaMap that outlines which areas are transparent.
Enables Alpha Testing
Deactivate Alpha Testing for gradually translucent objects, such as colored glass, smoked glass, ghosts.
-
+
It is possible to load a DiffuseMap texture that has an Alpha channel, and combine it with an underlying Material Color.
@@ -339,7 +339,7 @@ Deactivate Alpha Testing for gradually translucent objects, suc
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/math.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/math.html
index 91afc1e1e..a66f936a6 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/math.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/math.html
@@ -123,4 +123,4 @@ float z = FastMath.sin(phi)*r;
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/multi-media_asset_pipeline.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/multi-media_asset_pipeline.html
index c03c50b16..144caf8de 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/multi-media_asset_pipeline.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/multi-media_asset_pipeline.html
@@ -8,11 +8,11 @@ Assets are files that are not code. Your multi-media assets includes, for exampl
-
You create textures in a graphic editor, for example Gimp, and export them as PNG or JPG.
+
You create textures in a graphic editor, for example , and export them as PNG or JPG.
-
You create models in a 3D mesh editor, for example Blender, and export it in Ogre Mesh XML or Wavefront OBJ format.
+
You create models in a 3D mesh editor, for example , and export them in Ogre Mesh XML or Wavefront OBJ format.
-
You create sounds in an audio editor, for example Audacity, and export them as WAVE or OGG.
+
You create sounds in an audio editor, for example , and export them as WAVE or OGG.
@@ -37,16 +37,19 @@ Assets are files that are not code. Your multi-media assets includes, for exampl
Convert original models to JME3's .j3o format. Move .j3o files into assets/Models.
Don't reference original Blender/Ogre/OBJ files in your load() code, because these unoptimized files are not automatically packaged into the final JAR.
+
+
Agree on naming schemes and folder schemes with your artists early on to avoid confusion. E.g. keep naming schemes for bones and certain model parts. Try to keep your assets folder clean, its like your codes class structure.
Don't mindlessly import downloaded models and other assets into your project without keeping a structure and knowing the files work. You can reimport, delete junk.
@@ -128,16 +131,17 @@ 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, and compile class files, and distribute the application, all paths and files need to be available in their final, absolute form.
-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.
+
It is imperative to keep the same directory structure from beginning to end. If you ever change the assets directory structure, you have to do manual refactoring (just as for Java package name changes): Re-export all affected models, regenerate all affected .j3o files, and manually update all affected path Strings in your code.
+
Create materials for your models either in the 3D editor, or in the jME3 SDK. Only use the following material features: Diffuse Map or Diffuse Color (minimum); plus optionally Normal Map, Glow Map, Specular Map.
+Every material feature not listed in the Materials Overview is unsupported and ignored by JME3's renderer.
Unwrap the model in the 3D editor and generate a UV texture (i.e. one texture file that contains all the pieces of one model from different angles).
Don't use multiple separate texture files with one model, it will break the model into several meshes.
@@ -165,9 +169,9 @@ Don't use multiple separate texture files with one model, it will break the
Export the model mesh in one of the following formats: .blend, Wavefront .OBJ/.MTL, Ogre .mesh/.material/.scene.
-
Bake each texture into one file when exporting. (Create a Texture Atlas.)
+
Bake each texture into one file when exporting. Create a Texture Atlas.
-
Save exported models to subfolders of the assets/Textures directory, together with their Textures. (for now)
+
Save exported models to subfolders of the assets/Textures (sic) directory, so they are together with their textures!
@@ -179,15 +183,14 @@ 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.
+
When I load the model in JME3, 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 such as games. Also, the shaders that render the materials in JME3 are different implementations than in your mesh editor's renderer. Remind your graphic designers to focus on features that game engines support.
@@ -212,31 +215,37 @@ The paths in the j3o now reference files with an absolute assets/Textures/
This process ensures that the texture paths are correct, and it also keeps your assets/Models folder free from textures. You can reuse your set of textures for many models.
-Must I convert to .j3o? ??? Yes!
+
+The .j3o file format is an optimized format to store parts of a jME3 scene graph for 3-D games.
-
.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.
+
A .j3o file can contain one shape, one model, or a whole scene.
-
Only .j3o files can store all of jme3's material and other options, other formats can only be considered meshes with UV mapping data and always need to be worked on.
+
Only .j3o files can store all of jme3's material options and other features. Other formats can only be considered meshes with UV mapping data and always need extra work.
.j3o files work seamlessly across platforms and can also be automatically adapted for certain platforms on distribution.
(Optional) You can store the model's physical properties, materials, lights, particle emitters, and audio nodes, in the .j3o file.
-Use the jMonkeyEngine SceneComposer to add these properties.
The default Ant build script copies .j3o / .j3m files, sounds, and textures, into the distributable JAR automatically.
+
The default Ant build script copies .j3o files, .j3m files, sounds, and textures, into the distributable JAR automatically.
-
Important: Unoptimized external model files (.mesh.xml, .material, .obj, .mat, .blend, etc) are not bundled by the default build script into the final executables! If you try to run executables containing code that loads non-.j3o models, you get a Runtime Error (resource not found). The final application code should only reference .j3o files. (Note that you will not get this runtime error when running development builds straight from the SDK!)
+
Important: Unoptimized external model files (.mesh.xml, .material, .obj, .mat, .blend, etc) are not bundled by the default build script into the final game builds in the dist directory! If you or your customers try to run games containing code that loads non-.j3o models, you get a AssetNotFoundException Runtime Error (resource not found). Your final application code should only reference .j3o files. ??? Note that your developers will not get this runtime error when running development builds straight from the SDK.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/optimization.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/optimization.html
index 43461ed27..1dbc1539b 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/optimization.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/optimization.html
@@ -34,10 +34,12 @@ You can optimize nodes using the SceneComposer in the Texture Atlas provides limited individual texturing of batched geometries.
+
Using the still experimental BatchNode allows batching Geometry while keeping the single Geometry objects movable separately (similar to animation, the buffer gets updated per Geometry position).
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/simpleapplication.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/simpleapplication.html
index db385d0bc..61087b02c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/simpleapplication.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/intermediate/simpleapplication.html
@@ -145,15 +145,15 @@ getRenderer();
Low-level and high-level rendering interface. Mostly used
getGuiViewPort()
The view object for the orthogonal GUI view. Only used internally for HUDs.
-
timer
An internally used update loop timer. You already have access to the float tpf in the simpleUpdate() loop to time actions according to the time per frame.
+
timer
An internal update loop timer, don't use. See tpf in simpleUpdate() below to learn about timers.
paused
Boolean is used only internally during runtime to pause/unpause a game. (You need to implement your own isRunning boolean or so.)
The default first-person fly-by camera control. This default camera control lets you navigate the 3D scene using the preconfigured WASD and arrow keys and the mouse.
-
+
SimpleApplication Method
Purpose
@@ -209,7 +209,7 @@ getFlyByCamera()
The default first-person fly-by camera control. This de
setDisplayStatView(false);
A default SimpleApplication displays mesh statistics on the screen using the com.jme3.app.StatsView class. The information is valuable during the development and debugging phase, but for the release, you should hide the statistics HUD.
-
+
SimpleApplication Interface
Purpose
@@ -217,13 +217,14 @@ getFlyByCamera()
The default first-person fly-by camera control. This de
public void simpleInitApp()
Override this method to initialize the game scene. Here you load and create objects, attach Spatials to the rootNode, and bring everything in its starts position. See also Application States for best practices.
-
public void simpleUpdate(float tpf)
Override this method to have access to the update loop. Use this loop to poll the current game state and respond to changes, or to let the game mechanics generate encounters and initiate state changes. Use tpf (time per frame) as a factor to time events. For more info on how to hook into the update loop, see Application States and Custom Controls.
+
public void simpleUpdate(float tpf)
Override this method to hook into the update loop, all code you put here is repeated in a loop. Use this loop to poll the current game state and respond to changes, or to let the game mechanics generate encounters and initiate state changes. Use the float tpf as a factor to time actions relative to the time per frame in seconds: tpf is large on slow PCs, and small on fast PCs.
+For more info on how to hook into the update loop, see Application States and Custom Controls.
-
public void simpleRender(RenderManager rm)
Optional: Override this method to implement advanced modifications of the frameBuffer and scene graph.
+
public void simpleRender(RenderManager rm)
Optional: Advanced developers can override this method if the need to modify the frameBuffer and scene graph directly.
-
+
Use app.setShowSettings(true); to present the user with a splashscreen and the built-in display settings dialog when starting the game; or use app.setShowSettings(false); to hide the buil-in screen (in this case, you may want to provide a custom splashscreen and settings panel). Set this boolean before calling app.start() in the main() method of the SimpleApplication. See also AppSettings.
@@ -231,7 +232,7 @@ getFlyByCamera()
The default first-person fly-by camera control. This de
-
+
@@ -257,7 +258,7 @@ The following default navigational input actions are mapped by the default F5
Hides or shows the statistics the bottom left.
-
+
As long as the flyCam is enabled, the following so-called "WASD" inputs, including MouseLook, are available:
@@ -307,9 +308,9 @@ As long as the flyCam is enabled, the following so-called "WAS
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/ios.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/ios.html
index 73c77bfcd..0e2ab365d 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/ios.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/ios.html
@@ -98,4 +98,4 @@ Java code for iOS should be in the ios/src folder as well for clean
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/math.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/math.html
index 653234adf..305bd481f 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/math.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/math.html
@@ -1080,4 +1080,4 @@ float z = ( (BoundingBox)spatial.getWorldBound()).getZEx
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/simpleapplication_from_the_commandline.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/simpleapplication_from_the_commandline.html
index d722568b3..d15b9298a 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/simpleapplication_from_the_commandline.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/simpleapplication_from_the_commandline.html
@@ -32,7 +32,7 @@ HelloJME3/src
-To install the development version of jme3, , unzip the folder into a directory named jme3. The filenames here are just an example, but they will always be something like jME3_xx-xx-2011.
+To install the development version of jme3, , unzip the folder into a directory named jme3. The filenames here are just an example, but they will always be something like jME3_xx-xx-2011.
mkdir jme3
cd jme3
@@ -47,11 +47,11 @@ ant run
cd ..
-If you see a Test Chooser open now, the build was successful. Tip: Use ant to build the libraries without running the demos.
+If you see a Test Chooser application open now, the build was successful. Tip: Use just ant instead of ant run to build the libraries without running the demos.
-For media files and other assets, we recommend creating the following project structure:
+For multi-media files, models, and other assets, we recommend creating the following project structure:
-This will allow the default assetManager to load media files stored in the assets directory, like in this example:
+This directory structure will allow SimpleApplication's default AssetManager to load media files from your assets directory, like in this example:
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/terminology.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/terminology.html
index 6465b1d35..05bc67ef1 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/terminology.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/terminology.html
@@ -425,6 +425,8 @@ E.g. the thigh Bone is connected to the upper leg Skin.
The connection between bones and skin sections is gradual: You assign weights how much each skin polygon is affected by any bone's motion.
E.g. when the thigh bone moves, the leg is fully affected, the hips joints less so, and the head not at all.
+
jMonkeyEngine supports hardware skinning (on the GPU, not on the CPU).
+
Keyframe Animation: A keyframe is one recorded snapshot of a motion sequence.
@@ -456,7 +458,7 @@ E.g. when the thigh bone moves, the leg is fully affected, the hips joints less
-
+
-In the JME3 application, you register animated models to the Animation Controller. The controller object gives you access to the available animation sequences. The controller has several channels, each channels can run one animation sequence at a time. To run several sequences, you create several channels, and run them in parallel.
+In the JME3 application, you register animated models to the Animation Controller. The controller object gives you access to the available animation sequences. The controller has several channels, each channel can run one animation sequence at a time. To run several sequences, you create several channels, and run them in parallel.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/the_scene_graph.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/the_scene_graph.html
index 41e8329b6..f5bd67daf 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/the_scene_graph.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/the_scene_graph.html
@@ -34,19 +34,19 @@ The coordinate system consists of:
-
The origin, a single point in space.
+
The origin, a single central point in space.
-
This point is always at coordinate (0,0,0)
+
The origin point is always at coordinate zero, in Java: new Vector3f(0,0,0).
-
Three coordinate axes that are mutually perpendicular, and meet in the origin.
+
Three coordinate axes that are mutually perpendicular, and meet in the origin.
-
The X axis is "right/left"
+
The X axis starts left and goes right.
-
The Y axis is "up/down"
+
The Y axis starts below and goes up.
-
The Z axis is "towards you/away from you"
+
The Z axis starts away from you, and goes towards you.
@@ -54,39 +54,109 @@ The coordinate system consists of:
-Every point in 3D space is defined by its (x,y,z) coordinates. The data type for vectors is com.jme3.math.Vector3f.
+Every point in 3D space is uniquely defined by its X,Y,Z coordinates. The three numeric coordinates express how many "steps" from each of the three axes a point is. The data type for all vectors in jME3 is com.jme3.math.Vector3f. All vectors are relative to the described coordinate system.
+Example: The point new Vector3f(3,-5,1) is 3 steps to the right, 5 steps down, and 1 towards you.
-For your orientation, the default camera's location is (0.0f,0.0f,10.0f), and it is looking in the direction described by the unit vector (0.0f, 0.0f, -1.0f). This means your point of view is on the positive side of the Z axis, looking towards the origin, down the Z axis.
+
The unit of meassurement ("one step") in jME3 is the world unit, short: wu. Typically, 1 wu is considered to be one meter. As long as you are consistant throughout your game, 1 wu can be any distance you like.
+
-The unit of meassurement is world unit (wu). Typically, 1 wu is considered to be one meter. All scales, vectors and points are relative to this coordinate system.
+For your orientation:
+
+
+
The default camera's location is Vector3f(0.0f, 0.0f, 10.0f).
+
+
The default camera is looking in the direction described by the (so called) negative Z unit vector Vector3f(0.0f, 0.0f, -1.0f).
+
+
+
+
+This means the player's point of view is on the positive side of the Z axis, looking back, towards the origin, down the Z axis.
+
+When you play a 3D game, you typically want to navigate the 3D scene. Note that by default, the mouse pointer is invisible, and the mouse is set up to control the camera rotation!
+
+
+
+By default, jME3 uses the following common navigation inputs
+
+
+
+
+
Game Inputs
Camera Motion
Player POV
+
+
+
Press the W and S keys
move the camera forward, and backward
you walk back and forth
+
+
+
Press the A and D keys
move the camera left and right
you step left or right
+
+
+
Press the Q and Y keys
move the camera up and down
you fly up and down
+
+
+
Move the mouse left-right
rotate the camera left/right
you look left or right
+
+
+
Move the mouse forwards-backwards
rotate up/down
you look at the sky or your feet
+
+
+
+
+
+These default settings are called "WASD keys" and "Mouse Look". You can customize input handling for your game. Sorry, but these settings work best on a QWERTY/QWERTZ keyboard.
+
-The scene graph represents your 3D world. Objects in the jME3 scene graph are called Spatials. Everything attached to the rootNode is part of the scene graph. Attaching a Spatial to the rootNode (or other nodes) adds the Spatial to the scene; detaching removes it.
+The scene graph represents your 3D world. Objects in the jME3 scene graph are called Spatials. Everything attached to the parent rootNode is part of your scene. Your game inherits the rootNode object from the SimpleApplication class.
+
+
+
+
Attaching a Spatial to the rootNode (or its child nodes) adds it to the scene;
+
+
Detaching a Spatial from the rootNode (or its child nodes) removes it from the scene.
+
+
+
+
+
+All objects in the scene graph are in a parent-child relationship. When you transform (move, rotate, scale) one parent, all its children follow.
+
+
+
+
The scene graph only manages the parent-child relationship of spatials. The actual location, rotation, or scale of an object is stored inside each Spatial.
+
-A Spatial can be transformed, loaded and saved. There are two types of Spatials, Nodes and Geometries.
+A Spatial can be transformed (in other words, it has a location, a rotation, and a scale). A Spatial can be loaded and saved as a .3jo file. There are two types of Spatials, Nodes and Geometries:
@@ -103,18 +173,18 @@ A Spatial can be transformed, loaded and saved. There are two types of Spatials,
Visibility:
A visible 3-D object.
An invisible "handle" for a group of objects.
-
Purpose:
Represents the "look" of an object: Shape, color, texture, opacity/transparency.
Groups Geometries and other Nodes together: You transform a Node to affect all attached Nodes.
+
Purpose:
A Geometry represents the "look" of an object: Shape, color, texture, opacity/transparency.
A Node groups Geometries and other Nodes together: You transform a Node to affect all attached Nodes (parent-child relationship).
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 audioNode, a custom grouping node for a vehicle plus its passengers, etc.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/webstart.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/webstart.html
index 8d62c6b8a..a36246437 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/webstart.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/jme3/webstart.html
@@ -126,4 +126,4 @@ In your main() method, if running under WebStart, tell jME3 it is running in a l
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/3ds_to_blender_to_jmp.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/3ds_to_blender_to_jmp.html
index 2cfbc4498..5bab98051 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/3ds_to_blender_to_jmp.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/3ds_to_blender_to_jmp.html
@@ -67,4 +67,4 @@ As you can see, the .blend model was automatically converted to .j3o binary form
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/application_deployment.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/application_deployment.html
index d92a0bca3..796bf7b5f 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/application_deployment.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/application_deployment.html
@@ -48,7 +48,7 @@ Make your game unique and recognizable:
Vendor: Enter your name (the development team)
-
Description: Write one line why your game is the coolest ever
+
Description: Write one line why your game is the coolest ever
Homepage: Enter your web URL, so your fans can find you
@@ -157,7 +157,7 @@ Web Start allows your users to start your application by simply clicking a link
In the Application>Web Start category, check the box to Enable Web Start.
-
Check the box to make the application self-signed.
+
Check the box to make the application self-signed.
Optionally, check the box to allow offline use.
@@ -343,4 +343,4 @@ jme3-libraries-gui, jme3-libraries-physics, jme3-libraries-video, etc.
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/applymaterial.jpg b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/applymaterial.jpg
index 5298937b1..eedf04a64 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/applymaterial.jpg and b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/applymaterial.jpg differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/asset_packs.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/asset_packs.html
index 56de8a93c..c56d09b97 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/asset_packs.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/asset_packs.html
@@ -201,4 +201,4 @@ You can publish your AssetPacks either as a zip file or directly to jmonkeyengin
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/blender.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/blender.html
index 156f6b74c..e390c43bf 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/blender.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/blender.html
@@ -331,7 +331,7 @@ P.S.
This text might be edited in a meantime if I forgot about something ;)
-
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/code_editor.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/code_editor.html
index 23f46bf53..7efac7e92 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/code_editor.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/code_editor.html
@@ -240,7 +240,7 @@ By default, jMonkeyEngine uses the same
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/debugging_profiling_testing.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/debugging_profiling_testing.html
index 331b8cb4b..334a7f490 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/debugging_profiling_testing.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/debugging_profiling_testing.html
@@ -234,4 +234,4 @@ See also:
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/default_build_script.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/default_build_script.html
index 8056427c3..fd403826a 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/default_build_script.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/default_build_script.html
@@ -120,4 +120,4 @@ Don't edit the base *-impl.xml files directly, if you deactiva
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/deploy_android.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/deploy_android.png
index f1f7f93e0..9258b45f2 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/deploy_android.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/deploy_android.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development.html
index 5d69658be..5fd7aeb9a 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development.html
@@ -23,6 +23,8 @@ If you feel like you want to make an addition to jMonkeyEngine Creating components
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/extension_library.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/extension_library.html
index e2a0cecc0..6029e81f0 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/extension_library.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/extension_library.html
@@ -77,4 +77,4 @@ After you are done, you can view online version
\ No newline at end of file
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/general.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/general.html
index 341573250..e2eb638f4 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/general.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/general.html
@@ -19,4 +19,4 @@ You will see a list of components you can add to your project. A wizard will gui
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/model_loader.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/model_loader.html
index 1c032e8a7..ca41bb236 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/model_loader.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/model_loader.html
@@ -16,7 +16,9 @@ You can create custom model importers for the jMonkeyEngine view online version
\ No newline at end of file
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/projects_assets.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/projects_assets.html
index 9ec8ba80a..4ddd78098 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/projects_assets.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/projects_assets.html
@@ -73,4 +73,4 @@ public class BlenderAssetManagerConfigurator implements AssetManagerConfigurator
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/sceneexplorer.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/sceneexplorer.html
index ebe7d6526..32156e28c 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/sceneexplorer.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/sceneexplorer.html
@@ -402,4 +402,4 @@ public class AddSkyboxAction extends AbstractNewSpatialWizardAction {
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/setup.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/setup.html
index 3ceb3cfd2..6798f935b 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/setup.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/development/setup.html
@@ -127,21 +127,25 @@ And thats it, from now on each time you commit changes to your module it will be
-
-You can just build your library locally and update and commit the jar file and javadoc/sources zip files to the contrib repo, the users plugins will automatically be updated with the new jar files. You can however also build the whole library project on the server.
+You can just build your library locally and update and commit the jar file and javadoc/sources zip files to the release/libs folder of your plugin in the contrib repo. The users plugins will automatically be updated with the new jar files. You can however also build the library project on the server.
-As only the module project is being built on the server, any projects that create the actual jar files for library plugins ("normal" projects from the SDK/NetBeans) have to be built from the module build file. To do that simply add the following ant targets to the module build file:
+As normally only the module project is being built on the server, any projects that create the actual jar files for library plugins ("normal" projects from the SDK/NetBeans) have to be built from the module build file. To do that simply add the following ant targets to the module build file (adapt to your project file and folder names):
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/filters.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/filters.html
index 6050a73b9..35d3a7c52 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/filters.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/filters.html
@@ -95,4 +95,4 @@ viewPort.addProcessor(processor);
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/material-editor.png b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/material-editor.png
index 7adc7c6a3..d0bdab4b8 100644
Binary files a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/material-editor.png and b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/material-editor.png differ
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/material_editing.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/material_editing.html
index 52a51c0cb..0f88f5927 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/material_editing.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/material_editing.html
@@ -113,7 +113,7 @@ Or in your Java code
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/model_loader_and_viewer.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/model_loader_and_viewer.html
index f38b76395..a074f3f43 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/model_loader_and_viewer.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/model_loader_and_viewer.html
@@ -186,4 +186,4 @@ To have a valid jME3 object, the paths to textures and other assets belonging to
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/project_creation.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/project_creation.html
index fdc6ef15b..4ba1ce9e1 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/project_creation.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/project_creation.html
@@ -277,4 +277,4 @@ Choose samples from the TestChooser and try out the included demos.
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/scene_composer.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/scene_composer.html
index 1eebc9c16..704bf7ec3 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/scene_composer.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/scene_composer.html
@@ -205,4 +205,4 @@ Also note that although it its possible to directly link external model files (O
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/scene_explorer.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/scene_explorer.html
index 8a8e8c3a5..a6c55aff1 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/scene_explorer.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/scene_explorer.html
@@ -76,4 +76,4 @@ Right-click a Spatial or Node in the SceneExplorer to add other Spatials like Pa
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/terrain_editor.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/terrain_editor.html
index 6dce226be..7b5a3543e 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/terrain_editor.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/terrain_editor.html
@@ -210,9 +210,16 @@ Note that whenever you modify the height of the terrain, you should re-generate
-When you want to load a scene into your game that has terrain, you have to set the camera on the LOD control in order for it to work correctly:
-
+There are a few things your code needs to do to load the terrain.
+
+
You must first use the asset manager to load the scene, see the hello asset tutorial.
+
+
The terrain (as you can see on the left in the editor) is a sub-node of the scene, so you have to write code to investigate the child nodes of the scene until you find the node that is the terrain, see this tutorial for scene graph concepts.
+
+
You also have to set the camera on the LOD control in order for it to work correctly:
+
+
TerrainLodControl lodControl = ((Node)terrain).getControl(TerrainLodControl.class);
if (lodControl != null)
lodControl.setCamera(getCamera());
@@ -227,4 +234,4 @@ When you want to load a scene into your game that has terrain, you have to set t
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/troubleshooting.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/troubleshooting.html
index 6577d7378..981fbef5d 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/troubleshooting.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/troubleshooting.html
@@ -32,11 +32,12 @@ Mac users navigate to Contents/Resources/jmonkeyplatform/etc/.
-On Windows and Linux make sure you have the latest driver installed. Make sure its the one supplied by the card manufacturer and not just the OS-default one.
+On Windows and Linux make sure you have the latest driver installed. Make sure its the one supplied by the card manufacturer and not just the OS-default one. On OSX, make sure you have the latest update for your MacOS.
+
+To see or post the error output of the SDK in the forum, you can find the log of the application in the settings folder above too, the file is called var/log/messages.log
+
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/use_own_jme.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/use_own_jme.html
index edde1e138..ee739e17f 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/use_own_jme.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/use_own_jme.html
@@ -41,4 +41,4 @@
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/vehicle_creator.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/vehicle_creator.html
index a72bf0d72..b1b78f4b7 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/vehicle_creator.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/vehicle_creator.html
@@ -72,4 +72,4 @@ control.accelerate(100);
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/version_control.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/version_control.html
index 5212944da..b929ecc6d 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/version_control.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/version_control.html
@@ -222,4 +222,4 @@ See also:
-
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/welcome/3_0rc3.html b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/welcome/3_0rc3.html
index d8de53b4c..549e56239 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/welcome/3_0rc3.html
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/sdk/welcome/3_0rc3.html
@@ -3,16 +3,15 @@
-You are running the latest version of the SDK Application (jMonkeyEngine SDK 3.0RC3), see below how you can check for incremental updates.
+You are running an experimental build or nightly version of the SDK (jMonkeyEngine SDK 3.0RC3-pre-svn)
-This place will be updated with the latest news about your SDK.
-
+This place will be updated with the latest news about the SDK, see below how you can check for incremental updates.
\ No newline at end of file
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/wiki-download-index.properties b/sdk/jme3-documentation/src/com/jme3/gde/docs/wiki-download-index.properties
index 127456246..1838dbf47 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/wiki-download-index.properties
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/wiki-download-index.properties
@@ -1,5 +1,5 @@
javahelp_path = com/jme3/gde/docs
-wiki_url = http://jmonkeyengine.org/wiki/doku.php/
+wiki_url = http://hub.jmonkeyengine.org/wiki/doku.php/
wiki_pages = sdk:project_creation,\
sdk:3ds_to_blender_to_jmp,\
sdk:application_deployment,\
diff --git a/sdk/jme3-documentation/src/com/jme3/gde/docs/wiki-map.xml b/sdk/jme3-documentation/src/com/jme3/gde/docs/wiki-map.xml
index f4fb29835..501eeb9fc 100644
--- a/sdk/jme3-documentation/src/com/jme3/gde/docs/wiki-map.xml
+++ b/sdk/jme3-documentation/src/com/jme3/gde/docs/wiki-map.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file