\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html
index 5652d5bf0..231c925c1 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/collision_and_intersection.html
@@ -72,12 +72,12 @@ A CollisionResult object contains information about the second party of the coll
getTriangle(t)
Binds t to the triangle t on the second party's mesh that was hit.
-
getTriangleIndex()
Returns the index of the triangle on the second party's mesh that was hit. (?)
+
getTriangleIndex()
Returns the index of the triangle on the second party's mesh that was hit.
-A com.jme3.bounding.BoundingVolume is an interface for dealing with containment of a collection of points. All BoundingVolumes are Collidable and are used as optimization to calculate non-physical collisions more quickly: It's always faster to calculate an intersection between simple shapes like spheres and boxes than between complex shapes like models.
+A com.jme3.bounding.BoundingVolume is an interface for dealing with containment of a collection of points. All BoundingVolumes are Collidable and are used as optimization to calculate non-physical collisions more quickly: It's always faster to calculate an intersection between simple shapes like spheres and boxes than between complex shapes like models.
+
+
+
+jME3 computes bounding volumes for all objects. These bounding volumes are later used for frustum culling, which is making sure only objects visible on-screen are actually sent for rendering.
@@ -150,24 +154,25 @@ Supported types:
-
Type.Sphere: com.jme3.bounding.BoundingSphere is a sphere used as a container for a group of vertices of a piece of geometry. A BoundingSphere has a center and a radius.
+
Type.AABB = Axis-aligned bounding box, that means it doesn't rotate, which makes it less precise. A com.jme3.bounding.BoundingBox is an axis-aligned cuboid used as a container for a group of vertices of a piece of geometry. A BoundingBox has a center and extents from that center along the x, y and z axis. This is the default bounding volume, since it is fairly fast to generate and gives better accuracy than the bounding sphere.
-
Type.AABB = Axis-aligned bounding box, that means it doesn't rotatewhich makes it less precise. A com.jme3.bounding.BoundingBox is an axis-aligned cuboid used as a container for a group of vertices of a piece of geometry. A BoundingBox has a center and extents from that center along the x, y and z axis.
+
Type.Sphere: com.jme3.bounding.BoundingSphere is a sphere used as a container for a group of vertices of a piece of geometry. A BoundingSphere has a center and a radius.
Type.OBB = Oriented bounding box. This bounding box is more precise because it can rotate with its content, but is computationally more expensive. (Currently not supported.)
-
Type.Capsule = Cylinder with rounded ends, also called "swept sphere". Typically used for mobile characters.
+
Type.Capsule = Cylinder with rounded ends, also called "swept sphere". Typically used for mobile characters. (Currently not supported.)
-
Note: If you are looking for BoundingVolumes for physical objects, use CollisionShapes.
+
Note: If you are looking for bounding volumes for physical objects, use CollisionShapes.
+
+One of the supported Collidables are meshes and scene graph objects. To execute a collision detection query against a scene graph, use Spatial.collideWith(). This will traverse the scene graph and return any mesh collisions that were detected. Note that the first collision against a particular scene graph may take a long time, this is because a special data structure called needs to be generated for the meshes. At a later point, the mesh could change and the BIH tree would become out of date, in that case, call on the changed mesh to update the BIH tree.
+
-A com.jme3.math.Ray is an infinite line with a beginning, a direction, and no end; whereas a com.jme3.math.Line is an infinite line with only a direction (no beginning, no end).
+A com.jme3.math.Ray is an infinite line with a beginning, a direction, and no end; whereas a com.jme3.math.Line is an infinite line with only a direction (no beginning, no end).
@@ -214,14 +229,12 @@ Learn the details of how to implement
+
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html
index da5541501..a22a75511 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_controls.html
@@ -145,7 +145,7 @@ For example, you disable your IdleBehaviourControl when you enable your Defensiv
Usage: Your custom subclass implements the three methods controlUpdate(), controlRender(), setSpatial(), and cloneForSpatial() as shown here:
public class MyControl extends AbstractControl implements Savable, Cloneable {
- privat int index; // can have custom fields -- example
+ private int index; // can have custom fields -- example
public MyControl(){} // empty serialization constructor
@@ -214,7 +214,7 @@ See also:
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_meshes.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_meshes.html
index 6fa671e9a..b946c2298 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_meshes.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/custom_meshes.html
@@ -154,6 +154,15 @@ Ta-daa!
+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.
+
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html
index 76a1ea779..b2cd3b14c 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/effects_overview.html
@@ -1,46 +1,89 @@
-
-jME3 supports two types of effects, post-rendering filters and particle emitters. This list contains screenshots and links to sample code that demonstrates how to add the effect to a scene.
+jME3 supports several types of special effects: Post-Processor Filters, SceneProcessors, and Particle Emitters (also known as particle systems). This list contains screenshots and links to sample code that demonstrates how to add the effect to a scene.
-
-For example, post-processor filter effects are typically activated after the following pattern:
-
There is one com.jme3.effect.ParticleEmitter class for all Particle Systems.
+
+
There is one com.jme3.post.FilterPostProcessor class and several com.jme3.post.filters.* classes (all Filters have *Filter in their names).
+
+
There are several SceneProcessor classes in various packages, including e.g. com.jme3.shadow.* and com.jme3.water.* (SceneProcessor have *Processor or *Renderer in their names).
public class MyGame extends SimpleApplication {
+ private BasicShadowRenderer bsr;
+
+ public void simpleInitApp() {
+ bsr = new BasicShadowRenderer(assetManager, 1024);
+ bsr.setDirection(new Vector3f(.3f, -0.5f, -0.5f));
+ viewPort.addProcessor(bsr); // add one or more sceneprocessor to viewport
+ }
public class MyGame extends SimpleApplication {
+ private FilterPostProcessor fpp; // one FilterPostProcessor per app
+ private SomeFilter sf; // one or more Filters per app
public void simpleInitApp() {
- ...
fpp = new FilterPostProcessor(assetManager);
+ viewPort.addProcessor(fpp); // add one FilterPostProcessor to viewPort
+
sf = new SomeFilter();
- fpp.addFilter(sf);
- viewPort.addProcessor(fpp);
- ...
+ fpp.addFilter(sf); // add one or more Filters to FilterPostProcessor
}
-The jMonkeyEngine features "SeaMonkey" water effect including cool underwater caustics.
+The jMonkeyEngine's "SeaMonkey" WaterFilter simulates ocean waves, foam, including cool underwater caustics.
+Use the SimpleWaterProcessor (SceneProcessor) for small, limited bodies of water, such as puddles, drinking troughs, pools, fountains.
-Particle emitter effects can have any texture, e.g. fog, smoke, leaves, meteors, snowflakes, mosquitos, fire, sparks…
+Particle emitter effects are highly configurable and can have any texture. They can simulate smoke, dust, leaves, meteors, snowflakes, mosquitos, fire, explosions, clusters, embers, sparks…
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html
index a1715e0d2..f5c9c0828 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/loading_screen.html
@@ -552,6 +552,14 @@ public class TestLoadingScreen1 extends SimpleApplication implements ScreenContr
public void onFocus(boolean getFocus) {
}
+
+
+ @Override
+ public void stop() {
+ super.stop();
+ //the pool executor needs to be shut down so the application properly exits.
+ exec.shutdown();
+ }
}
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html
index 92c700e12..e452648a5 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/materials_overview.html
@@ -340,21 +340,21 @@ Later, put the Geometry (not the Material!) in the appropriate render queue
Activate back-face culling. Mesh faces that are not facing the camera are not rendered, which saves time. Backface culling is activated by default as a major optimization.
The backside of mesh polygons (and the inside of models) is invisible.
Activates back-face culling. Mesh faces that are facing away from the camera are not rendered, which saves time. *Backface culling is activated by default as a major optimization.*
The invisible backsides and insides of models are not calculated.
Use this as an efficient way to make an object temporarily invisible, while keeping all its other in-game properties (node attachment, collision shapes, interactions, etc) active.
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.
@@ -368,7 +368,7 @@ Later, put the Geometry (not the Material!) in the appropriate render queue
getAdditionalRenderState().setPolyOffset();
Enable polygon offset.
Use this when you have meshes that have triangles really close to each over (e.g. ), it will shift the depth values to prevent .
-
+
Related Links
@@ -389,7 +389,7 @@ Later, put the Geometry (not the Material!) in the appropriate render queue
-
+
1)
UseAlpha specifies whether DiffuseMap uses the alpha channel
2)
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html
index 749d72ceb..bf0be94a9 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/mesh.html
@@ -158,7 +158,14 @@ The VertexBuffer contains a particular type of geometry data used by Meshes. Eve
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/multithreading.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/multithreading.html
index 45e192a2a..4ca1a2750 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/multithreading.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/multithreading.html
@@ -72,8 +72,19 @@ ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(4)
Pool size means the executor will keep four threads alive at any time. Having more threads in the pool means that more tasks can run concurrently. But a bigger pool only results in a speed gain if the PC can handle it! Allocating a pool that is uselessly large just wastes memory, so you need to find a good compromise: About the same to double the size of the number of cores in the computer makes sense.
+
+!!! Executor needs to be shut down when the application ends, in order to make the process die properly
+In your simple application you can override the stop method and shutdown the executor :
+
+
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/networking.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/networking.html
index 4e93b1c92..614473f94 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/networking.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/networking.html
@@ -69,7 +69,7 @@ You can register several types of listeners to be notified of changes.
The game server is a "headless" com.jme3.app.SimpleApplication:
-
public class MyGameServer extends SimpleApplication {
+
public class ServerMain extends SimpleApplication {
public static void main(String[] args) {
ServerMain app = new ServerMain();
app.start(JmeContext.Type.Headless); // headless type for servers!
@@ -96,7 +96,7 @@ When you run this app on a host, the server is ready to accept clients. Let'
-
+
@@ -104,7 +104,7 @@ When you run this app on a host, the server is ready to accept clients. Let'
A game client is a standard com.jme3.app.SimpleApplication.
-
public class MyGameClient extends SimpleApplication {
+
public class ClientMain extends SimpleApplication {
public static void main(String[] args) {
ClientMain app = new ClientMain();
app.start(JmeContext.Type.Display); // standard display type
@@ -135,7 +135,7 @@ When you run this client, it connects to the server.
@@ -158,7 +158,7 @@ The server refers to a connected client as com.jme3.network.HostedConnection obj
myServer.getConnection(0)
Server gets the first (0), second (1), etc, connected HostedConnection object (one client).
-
+
Your game can define its own game data based on whatever criteria you want, typically these include player ID and state. If the server needs to look up player/client-specific information, you can store this information directly on the HostedConnection object. The following examples read and write a custom Java object MyState in the HostedConnection object conn:
@@ -175,14 +175,14 @@ Your game can define its own game data based on whatever criteria you want, typi
MyState state = conn.getAttribute("MyState")
Server can read an attribute of the HostedConnection.
@@ -328,7 +328,7 @@ A server has a game version and game name property. Each client expects to commu
myClient.getVersion()
Client queries the version of the server it is connected to.
-
+
Typically, your networked game defines its own attributes (such as player ID) based on whatever criteria you want. If you want to look up player/client-specific information beyond the game version, you can set this information directly on the Client/HostedConnection object (see Getting Info About a Client).
@@ -336,12 +336,12 @@ A server has a game version and game name property. Each client expects to commu
@@ -414,7 +414,7 @@ The com.jme3.network.ClientStateListener notifies the Client when the Client has
public void clientDisconnected(Client c, DisconnectInfo info){}
Implement here what happens after the server kicks this client. For example, display the DisconnectInfo to the user.
-
+
First implement the ClientStateListener interface in the Client class. Then register it to myClient in MyGameClient's simpleInitApp() method:
@@ -422,7 +422,7 @@ First implement the ClientStateListener interface in the Client class. Then regi
@@ -442,7 +442,7 @@ The com.jme3.network.ConnectionListener notifies the Server whenever new HostedC
public void connectionRemoved(Server s, HostedConnection c){}
Implement here what happens after a HostedConnection has left. E.g. a player has quit the game and the server removes his character.
-
+
First implement the ConnectionListener interface in the Server class. Then register it to myServer in MyGameServer's simpleInitApp() method.
@@ -451,7 +451,7 @@ First implement the ConnectionListener interface in the Server class. Then regis
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html
index 8c7cdf654..5240f87a3 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/post-processor_water.html
@@ -12,7 +12,7 @@ The awesome SeaMonkey WaterFilter is highly configurable. It can render any type
-
The SeaMonkey WaterFilter is ideal for oceans and lakes, and expecially for under-water scenes. If you only need a small simple water surface, such as a water trough or a shallow fountain, the SimpleWaterProcessor may already be all you need.
+
The SeaMonkey WaterFilter is ideal for oceans and lakes, and especially for under-water scenes. If you only need a small simple water surface, such as a water trough or a shallow fountain, the SimpleWaterProcessor may already be all you need.
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html
index 02153ea17..11a57b759 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/save_and_load.html
@@ -101,7 +101,7 @@ Example: You used something like mySpatial.setUserData("inventory&quo
-If your custom classes (the user data or the Controls) do not implement Savable, then the BinaryImporter/BinaryExporter cannot save the Spatial!
+If your custom classes (the user data or the Controls) do not implement Savable, then the BinaryImporter/BinaryExporter cannot save the Spatial!
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html
index 1fb7ba1cf..b97f88c63 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/shape.html
@@ -186,6 +186,13 @@ rootNode.attachChild(geom); // attach geometry to a n
* Optimization – The GeometryBatchFactory class combines several of your shapes with the same texture into one mesh with one texture.
+
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html
index dd202740f..89921c046 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/spatial.html
@@ -22,7 +22,7 @@ If you think you need to understand the scene graph concept better, please read
-In your Java code, a Spatial is either a com.jme3.scene.Node or a com.jme3.scene.Geometry instance. You use the two types of Spatials for different purposes:
+In your Java code, a Spatial is either an instance of com.jme3.scene.Node or a com.jme3.scene.Geometry instance. You use the two types of Spatials for different purposes:
@@ -34,7 +34,7 @@ In your Java code, a Spatial is either a com.jme3.scene.Node or a <
com.jme3.scene.Spatial
-
Purpose:
A Spatial is an abstract data structure that stores transformations (= translation, rotation, scale) of elements of the 3D scene graph. Spatials can be saved and loaded using the Asset Manager.
+
Purpose:
A Spatial is an abstract data structure that stores user data and transformations (= translation, rotation, scale) of elements of the 3D scene graph. Spatials can be saved and loaded using the Asset Manager.
rootNode, guiNode, audioNode, a custom grouping node such as vehicleNode or shipNode with passengers attached, etc.
-
+
-
You never create a Spatial with Spatial s = new Spatial();! A Spatial is an abstract concept, like a mammal (there is no actual creature called "mammal" walking around here). You create either a com.jme3.scene.Node, or a com.jme3.scene.Geometry object. Some methods, however, require a spatial as argument: This is because they are able to accept both Nodes and Geometries as arguments. In this case, you simply cast a Node or Geometry to Spatial.
+
You never create a Spatial with Spatial s = new Spatial();! A Spatial is an abstract concept, like a mammal (there is no actual creature called "mammal" walking around here). You create either a com.jme3.scene.Node or com.jme3.scene.Geometry instance. Some methods, however, require a Spatial type as argument: This is because they are able to accept both Nodes and Geometries as arguments. In this case, you simply cast a Node or Geometry to Spatial.
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html
index ab20721e3..84487f420 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/advanced/terrain.html
@@ -163,9 +163,9 @@ Here are the names of TerrainLighting.j3md's material properties:
We create the heightmap from the heightMapImage.
@@ -291,8 +291,6 @@ Next we create the actual terrain.
terrain = new TerrainQuad("terrain", 65, 513, heightmap.getHeightMap());
terrain.setMaterial(matRock);
-terrain.setModelBound(new BoundingBox());
-terrain.updateModelBound();
terrain.setLocalScale(2f, 1f, 2f); // scale to make it less steep
List<Camera> cameras = new ArrayList<Camera>();
cameras.add(getCamera());
@@ -306,5 +304,5 @@ PS: As an alternative to an image-based height map, you can also generate a Hill
heightmap = new HillHeightMap(1025, 1000, 50, 100, (byte) 3);
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html
index 514e776e9..4211b00d1 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/android.html
@@ -226,10 +226,12 @@ Activating the nbandroid plugin in the jMonkeyEngine SDK Rev. 20 you need to copy and paste mobile/AndroidManifest.xml to mobile/MANIFEST.MF ()
+
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html
index f18bf9511..4f2b8c37f 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_audio.html
@@ -119,16 +119,12 @@ When you run the sample, you should see a blue cube. You should hear a nature-li
In the initSimpleApp() method, you create a simple blue cube geometry called player and attach it to the scene – this just arbitrary sample content, so you see something when running the audio sample.
-
-From initSampleApp(), you initialize the game by calling the two custom methods initKeys() and initAudio(). You could call the lines of code in these two methods directly from initSampleApp(); they merely are in extra methods to keep the code more readable.
-
-
Let's have a closer look at initAudio() to learn how to use AudioNodes.
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html
index aec5c578c..65dc18e69 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_input_system.html
@@ -259,15 +259,16 @@ You can also combine both listeners into one, the engine will send the appropria
}
}
// ...
-inputManager.addListener(analogListener, new String[]{"Pause", "Left", "Right", "Rotate"});
+inputManager.addListener(combinedListener, new String[]{"Pause", "Left", "Right", "Rotate"});
It's okay to use only one of the two Listeners, and not implement the other one, if you are not using this type of interaction. In the following, we have a closer look how to decide which of the two listeners is best suited for which situation.
+
@@ -360,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-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html
index a95fd8af3..8822a7ae0 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_node.html
@@ -65,20 +65,22 @@ public class HelloNode extends SimpleApplication {
public void simpleInitApp() {
/** create a blue box at coordinates (1,-1,1) */
- Box box1 = new Box( new Vector3f(1,-1,1), 1,1,1);
+ Box box1 = new Box( Vector3f.ZERO, 1,1,1);
Geometry blue = new Geometry("Box", box1);
Material mat1 = new Material(assetManager,
"Common/MatDefs/Misc/Unshaded.j3md");
mat1.setColor("Color", ColorRGBA.Blue);
blue.setMaterial(mat1);
+ blue.move(1,-1,1);
/** create a red box straight above the blue one at (1,3,1) */
- Box box2 = new Box( new Vector3f(1,3,1), 1,1,1);
+ Box box2 = new Box( Vector3f.ZERO, 1,1,1);
Geometry red = new Geometry("Box", box2);
Material mat2 = new Material(assetManager,
"Common/MatDefs/Misc/Unshaded.j3md");
mat2.setColor("Color", ColorRGBA.Red);
red.setMaterial(mat2);
+ red.move(1,3,1);
/** Create a pivot node at (0,0,0) and attach it to the root node */
Node pivot = new Node("pivot");
@@ -97,7 +99,7 @@ Build and run the code sample. You should see two colored boxes tilted at the sa
-
+
@@ -123,10 +125,10 @@ In this tutorial, you learn some new terms:
Make an object disappear from the scene
Detach the Spatial from the rootNode
-
Position/move, turn, or resize an object
Translate, rotate, scale an object. Transform an object.
+
Position/move, turn, or resize an object
Translate, or rotate, or scale an object = transform an object.
-
+
Every JME3 application has a rootNode: Your game automatically inherits the rootNode object from SimpleApplication. Everything attached to the rootNode is part of the scene graph. The elements of the scene graph are Spatials.
@@ -153,9 +155,9 @@ Every JME3 application has a rootNode: Your game automatically inherits the Examples:
A box, a sphere, a player, a building, a piece of terrain, a vehicle, missiles, NPCs, etc…
The rootNode, a floor node grouping several terrains, a custom vehicle-with-passengers node, a player-with-weapon node, an audio node, etc…
@@ -169,18 +171,19 @@ What happens in the code snippet? You use the simpleInitApp() metho
Create a Box shape with a radius of (1,1,1), that makes the box 2x2x2 world units big.
-
Position the box at (1,-1,1).
+
Position the box at (1,-1,1) using the move() method. (Don't change the Vector3f.ZERO unless you want to change the center of rotation)
Wrap the Box shape into a Geometry.
Create a blue material.
-
Apply the blue material to the Box Geometry.
Box box1 = new Box( new Vector3f(1,-1,1), 1,1,1);
+
Apply the blue material to the Box Geometry.
Box box1 = new Box( Vector3f.ZERO, 1,1,1);
Geometry blue = new Geometry("Box", box1);
Material mat1 = new Material(assetManager,
"Common/MatDefs/Misc/Unshaded.j3md");
mat1.setColor("Color", ColorRGBA.Blue);
- blue.setMaterial(mat1);
+ blue.setMaterial(mat1);
+ blue.move(1,-1,1);
@@ -195,12 +198,13 @@ What happens in the code snippet? You use the simpleInitApp() metho
Create a red material.
-
Apply the red material to the Box Geometry.
Box box2 = new Box( new Vector3f(1,3,1), 1,1,1);
+
Apply the red material to the Box Geometry.
Box box2 = new Box( Vector3f.ZERO, 1,1,1);
Geometry red = new Geometry("Box", box2);
Material mat2 = new Material(assetManager,
"Common/MatDefs/Misc/Unshaded.j3md");
mat2.setColor("Color", ColorRGBA.Red);
- red.setMaterial(mat2);
+ red.setMaterial(mat2);
+ red.move(1,3,1);
@@ -241,7 +245,7 @@ If you run the app with only the code up to here, you see two cubes: A red cube
@@ -268,8 +272,8 @@ You can transform (e.g. rotate) Geometries around their own center, or around a
Task…?
Solution!
-
Create a Spatial
Create a shape, wrap it into a Geometry, and give it a Material. For example:
Box mesh = new Box(Vector3f.ZERO, 1, 1, 1);
-Geometry thing = new Geometry("thing", mesh);
+
Create a Spatial
Create a Mesh shape, wrap it into a Geometry, and give it a Material. For example:
Box mesh = new Box(Vector3f.ZERO, 1, 1, 1); // a cuboid default mesh
+Geometry thing = new Geometry("thing", mesh);
Material mat = new Material(assetManager,
"Common/MatDefs/Misc/ShowNormals.j3md");
thing.setMaterial(mat);
@@ -294,9 +298,9 @@ thing.setMaterial(mat);
Specify what should be loaded at the start
Everything you initialize and attach to the rootNode in the simpleInitApp() method is part of the scene at the start of the game.
@@ -320,7 +324,7 @@ To move a Spatial to specific coordinates, such as (0,40.2f,-2), use: <
+right -left
+up -down
+forward -backward
-
+
Scaling resizes Spatials
X-axis
Y-axis
Z-axis
@@ -332,25 +336,25 @@ To scale a Spatial 10 times longer, one tenth the height, and keep the same widt
length
height
width
-
+
Rotation turns Spatials
X-axis
Y-axis
Z-axis
-
3-D rotation is a bit tricky (learn details here). In short: You can rotate around three axes: Pitch, yaw, and roll. You can specify angles in degrees by multiplying the degrees value with FastMath.DEG_TO_RAD.
+
3-D rotation is a bit tricky (learn details here). In short: You can rotate around three axes: Pitch, yaw, and roll. You can specify angles in degrees by multiplying the degrees value with FastMath.DEG_TO_RAD.
To roll an object 180° around the z axis:
- Tip: If your game idea calls for a serious amount of rotations, it is worth looking into quaternions, a data structure that can combine and store rotations efficiently.
+ Tip: If your game idea calls for a serious amount of rotations, it is worth looking into quaternions, a data structure that can combine and store rotations efficiently.
thing.setLocalRotation(
new Quaternion().fromAngleAxis(180*FastMath.DEG_TO_RAD, new Vector3f(1,0,0)));
@@ -371,17 +375,18 @@ Is it to tiny or too gigantic to see?
Is it too far from the camera? (Try (111111f); to see further)
-
A Spatial rotates in unexpected ways.
Did you use radian values, and not degrees? (If you used degrees, multiply them with FastMath.DEG_TO_RAD to convert them to radians)
-Did you rotate around the intended pivot node or something else?
+
A Spatial rotates in unexpected ways.
Did you use radian values, and not degrees? (If you used degrees, multiply them with FastMath.DEG_TO_RAD to convert them to radians)
+Did you create the Spatial at the origin (Vector.ZERO) before moving it?
+Did you rotate around the intended pivot node or around something else?
Did you rotate around the right axis?
A Geometry has an unexpected Color or Material.
Did you reuse a Material from another Geometry and have inadvertently changed its properties? (If so, consider cloning it: mat2 = mat.clone(); )
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html
index 7c6a26cf3..ca28951e1 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/beginner/hello_terrain.html
@@ -263,11 +263,11 @@ Before you can start painting, you have to make a few decisions:
You "paint" three texture layers by using three colors: Red, blue and, green. You arbitrarily decide that…
-
… everything red will be grass – red goes into layer Tex1
+
Red is grass – red is layer Tex1, so put the grass texture into Tex1.
-
… everything green will be dirt – green goes into layer Tex2
+
Green is dirt – green is layer Tex2, so put the dirt texture into Tex2.
-
… everything blue will be roads – blue goes into layer Tex3
+
Blue is roads – blue is layer Tex3, so put the roads texture into Tex3.
@@ -301,7 +301,7 @@ Now you start painting the texture:
-
+
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html
index 2e0488d6d..4f6487255 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/external/blender.html
@@ -59,7 +59,7 @@ To export an animated model in Blender make sure the following conditions are me
-
The animation bas to be a bone animation
+
The animation has to be a bone animation
Apply Location, Rotation and Scate to the mesh on Blender: On 3D View editor on Blender, select the mesh in Object Mode and go to the 3D View Editor’s header → Object Menu → Apply → Location / Rotation / Scale.
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html
index 2c5df4dd7..1882f8e59 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/faq.html
@@ -99,11 +99,23 @@ Make sure to only load() models converted to .j3o binary format, not the origina
+
+This rare exception shows a message similar to the following: Exception in thread "LWJGL Renderer Thread" java.lang.LinkageError: Version mismatch: jar version is (number), native library version is (another number). jME3 needs native libraries (.dll, .jnilib, lib*.so files) to run LWJGL and jBullet. The correct versions of these libraries are included when you install the SDK or download the binaries. However there are circumstances where jME3 cannot determine which copy of the native library it should use:
+If you install another application that needs a different version of a native library, and this app globally installs its version over jME3's; or if an old copy of a native library is in your project directory, your home directory, or Java library path, or in the classpath; or if you permanently linked an old copy in your IDE's settings; then Java assumes you prefer these native libraries over the bundled ones, and your jME3 application ends up running with the wrong version.
+To fix this, search for .dll (Windows), .jnilib (Mac), and .so (Linux) files for jBullet and LWJGL on your harddrive and in your path and IDE settings, and verify they don't interfere. (If you have other jME versions installed and linked somehow, the outdated natives may also be in a lwjgl.jar or jbullet.jar file!)
+
+
@@ -162,7 +174,7 @@ this.assetManager.registerLocator("town.zip", ZipLocator.class)
Follow our best practices for the multi-media asset pipeline.
You create 3-D models in a 3-D mesh editor, for example Blender, and export it in Ogre Mesh XML (animated objects, scenes) or Wavefront OBJ format (static objects, scenes).
-You create textures in a graphic editor, for exmaple Gimp, and export them as PNG or JPG.
+You create textures in a graphic editor, for example Gimp, and export them as PNG or JPG.
You create sounds in an audio editor, for example, Audacity, and export them as WAVE or OGG.
Learn more:3D Models, Multi-Media Asset Pipeline, JME3's blend-to-j3o importer;
@@ -170,7 +182,7 @@ You create sounds in an audio editor, for example, Audacity, and export them as
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html
index f374c36f3..81b3996cb 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/best_practices.html
@@ -35,7 +35,7 @@ As a quick overview, answer yourself the following questions:
Sum up your game idea in one sentence. If you can't, it's too complicated.
-
Who's the target group? Why would they choose your game over the million others that exist?
+
Who's the target group? Are you making it for yourself or are you trying to attract the masses?
@@ -51,7 +51,7 @@ As a quick overview, answer yourself the following questions:
Gameplay
-
What is the start state, what is the end state?
+
What is the start state, what is the end state (if any)?
What resources does the player manage? How are resources gained, transformed, spent?
E.g. speed, gold, health, "points".
@@ -507,7 +507,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.
@@ -519,5 +519,5 @@ The distribution appears in a newly generated dist directory inside
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html
index 2cd9a979e..d67a1f069 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/how_to_use_materials.html
@@ -193,7 +193,7 @@ Shininess is a float value between 1 (rough surface with blurry shininess) and 1
Specify the Specular and Diffuse colors of the shiny spot.
-The ColorRGBA value of the light source, often RGBA.White.
mat.setColor("Specular",ColorRGBA.White);
+Typically you set Specular to the ColorRGBA value of the light source, often RGBA.White.
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-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html
index 1c90d9e77..c2c4a9666 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/math.html
@@ -2,13 +2,8 @@
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html
index d195bde7f..fec41c259 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/intermediate/multi-media_asset_pipeline.html
@@ -26,26 +26,26 @@ Assets are files that are not code. Your multi-media assets includes, for exampl
Save sounds into assets/Sounds.
Don't leave audio files in a folder outside your JME project: The game cannot load or reference them from there.
-
Create simple, low-polygon models.
Don't create high-polygon models, they render too slow to be useful in games.
+
Create low-polygon models.
Don't create high-polygon models, they render too slow to be useful in games.
-
Only use Diffuse Map, Normal Map, Glow Map, Specular Map in your models.
Don't use unsupported material properties that are not listed in the Materials Overview.
+
Only use Diffuse Map, Normal Map, Glow Map, Specular Map in your models' materials.
Don't use unsupported material properties that are not listed in the Materials Overview.
Use UV texture / texture atlases / baking for each texture map.
Don't create models based on multiple separate textures, it will break the model into separate meshes.
-
Convert original models to .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 packaged into the final JAR.
+
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.
@@ -128,12 +128,13 @@ 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. If you ever change the assets directory structure, you have to re-export all affected models, regenerate all affected .j3o files, and manually update all affected paths in your code.
+
Storing the textures inside your project directory is necessary for the paths in JME's binary model files (.j3o) to work. Treat the paths of your assets like class names of java classes, they define a specific asset. When you later generate .j3o files, compile class files, and distribute the project, paths and files need to be available in their final absolute form. It is imperative to keep the same directory structure from beginning to end.
+If you ever change the assets directory structure, you will have to do manual refactoring (just as for Java package name changes): You will need to re-export all affected models, regenerate all affected .j3o files, and manually update all affected paths in your code.
Create textures for the model: Only use Diffuse Map (minimum), Normal Map, Glow Map, and Specular Map.
-Everything not listed in the Materials Overview is ignored by JME.
+
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.
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/math.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/math.html
index a4fab26dd..e6dd3e7fd 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/math.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/math.html
@@ -4,7 +4,7 @@
-It's a fact of life, math is hard. Unfortunately, 3D graphics require a fair bit of knowledge about the subject. Fortunately, jME is able to hide the majority of the details away from the user. Vectors are the fundamental type in the 3D environment, and it is used extensively. Matrices are also a basic necessity of 3D for representing linear systems. Quaternions are perhaps the most complicated of the basic types and are used for rotation in jME.
+It's a fact of life, math is hard. Unfortunately, 3D graphics require a fair bit of knowledge about the subject. Fortunately, jME is able to hide the majority of the details away from the user. Vectors are the fundamental type in the 3D environment, and it is used extensively. Matrices are also a basic necessity of 3D for representing linear systems. Quaternions are perhaps the most powerful and complicated of the basic types and are used for rotation in jME.
@@ -16,12 +16,12 @@ To get a visual introduction to math in jME3 for the absolute beginner, check ou
-A Matrix is typically used as a linear transformation to map vectors to vectors. That is: Y = MX where X is a Vector and M is a Matrix applying any or all transformations (scale, rotate, translate).
+A Matrix is typically used as a linear transformation to map vectors to vectors. That is: Y = MX where X is a Vector and M is a Matrix applying any or all transformations (scale, rotate, translate).
@@ -148,7 +148,7 @@ There are a few special matrices:
0
0
0
-
+
The Identity Matrix is the matrix with 1 on the diagonal entries and 0 for all other entries.
@@ -164,7 +164,7 @@ The Identity Matrix is the matrix with 1 on the diagonal entries and 0
0
0
1
-
+
A Matrix is invertible if there is a matrix M-1 where MM-1 = M-1M = I.
@@ -185,7 +185,7 @@ The transpose of a matrix M = [mij] is MT<
3
3
3
1
2
3
-
+
A Matrix is symmetric if M = MT.
@@ -201,7 +201,7 @@ A Matrix is symmetric if M = MT.
B
C
X
-
+
Where X, A, B, and C equal numbers
@@ -211,7 +211,7 @@ jME includes two types of Matrix classes: Matrix3f and Matrix4f. Matrix3f is a 3
@@ -270,14 +270,14 @@ Translation requires a 4x4 matrix, where the vector (x,y,z) is mapped to (x,y,z,
ST
1
-
+
where M is the 3x3 matrix (containing any rotation/scale information), T is the translation vector and ST is the transpose Vector of T. 1 is just a constant.
@@ -431,11 +431,11 @@ Quaternions define a subset of a hypercomplex number system. Quaternions are def
-Additional benefits of the Quaternion is reducing the chance of Gimbal Lock and allowing for easily interpolation between two rotations (spherical linear interpolation or slerp).
+Additional benefits of the Quaternion is reducing the chance of and allowing for easily interpolation between two rotations (spherical linear interpolation or slerp).
-While Quaternions are quite difficult to fully understand, there are an exceeding number of convenience methods to allow you to use them without having to understand the math behind it. Basically, these methods involve nothing more than setting the Quaternion's x,y,z,w values using other means of representing rotations. The Quaternion is then contained in Spatial as its local rotation component.
+While Quaternions are quite difficult to fully understand, there are an exceeding number of convenience methods to allow you to use them without having to understand the math behind it. Basically, these methods involve nothing more than setting the Quaternion's x,y,z,w values using other means of representing rotations. The Quaternion is then contained in the Spatial as its local rotation component.
@@ -485,13 +485,13 @@ These basic operations allow us to convert various rotation representations to Q
-You might wish to represent your rotations as Angle Axis pairs. That is, you define a axis of rotation and the angle with which to rotate about this axis. Quaternion defines a method fromAngleAxis (and fromAngleNormalAxis) to create a Quaternion from this pair. This is acutally used quite a bit in jME demos to continually rotate objects. You can also obtain a Angle Axis rotation from an existing Quaternion using toAngleAxis.
+You might wish to represent your rotations as Angle Axis pairs. That is, you define a axis of rotation and the angle with which to rotate about this axis. Quaternion defines a method fromAngleAxis (and fromAngleNormalAxis) to create a Quaternion from this pair. This is acutally used quite a bit in jME demos to continually rotate objects. You can also obtain a Angle Axis rotation from an existing Quaternion using toAngleAxis.
-If you have three axes that define your rotation, where the axes define the left axis, up axis and directional axis respectively) you can make use of fromAxes to generate the Quaternion. It should be noted that this will generate a new Matrix object that is then garbage collected, thus, this method should not be used if it will be called many times. Again, toAxes will populate a Vector3f array.
+If you have three axes that define your rotation, where the axes define the left axis, up axis and directional axis respectively) you can make use of fromAxes to generate the Quaternion. It should be noted that this will generate a new Matrix object that is then garbage collected, thus, this method should not be used if it will be called many times. Again, toAxes will populate a Vector3f array.
\ No newline at end of file
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html
index 079177fe6..18f2c45a3 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/jme3/the_scene_graph.html
@@ -124,9 +124,15 @@ Before you start creating your game, you should have completed the intermediate and advanced documentation gives you more details on how to put all the parts together to create an awesome Java 3D game!
-
+The intermediate and advanced documentation gives you more details on how to put all the parts together to create an awesome 3D game in Java!
+
diff --git a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/extension_library.html b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/extension_library.html
index 71310b2d2..ea4a72f32 100644
--- a/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/extension_library.html
+++ b/sdk/jme3-core/javahelp/com/jme3/gde/core/docs/sdk/development/extension_library.html
@@ -69,7 +69,7 @@ You will notice a new file "MyLibrary.xml" is created in the plugins b