Selaa lähdekoodia

Create `zh-Hans-CN` folder for Chinese translation.

yan 7 vuotta sitten
vanhempi
commit
22b6ecba33
61 muutettua tiedostoa jossa 1336 lisäystä ja 1568 poistoa
  1. 112 112
      src/docs/asciidoc/documentation.adoc
  2. 0 419
      src/docs/asciidoc/jme3/beginner/hello_node_zh.adoc
  3. 0 196
      src/docs/asciidoc/jme3/beginner/hello_simpleapplication_zh.adoc
  4. 112 110
      src/docs/asciidoc/zh-Hans-CN/documentation.adoc
  5. 7 0
      src/docs/asciidoc/zh-Hans-CN/getting-start/android_studio.adoc
  6. 7 0
      src/docs/asciidoc/zh-Hans-CN/getting-start/eclipse.adoc
  7. 7 0
      src/docs/asciidoc/zh-Hans-CN/getting-start/gradle.adoc
  8. 7 0
      src/docs/asciidoc/zh-Hans-CN/getting-start/intellij_idea.adoc
  9. 7 0
      src/docs/asciidoc/zh-Hans-CN/getting-start/maven.adoc
  10. 7 0
      src/docs/asciidoc/zh-Hans-CN/getting-start/overview.adoc
  11. 7 0
      src/docs/asciidoc/zh-Hans-CN/getting-start/sdk.adoc
  12. 7 0
      src/docs/asciidoc/zh-Hans-CN/install/engine.adoc
  13. 7 0
      src/docs/asciidoc/zh-Hans-CN/install/overview.adoc
  14. 63 65
      src/docs/asciidoc/zh-Hans-CN/install/requirements.adoc
  15. 7 0
      src/docs/asciidoc/zh-Hans-CN/install/sdk.adoc
  16. 7 0
      src/docs/asciidoc/zh-Hans-CN/install/source_code.adoc
  17. 333 333
      src/docs/asciidoc/zh-Hans-CN/jme3.adoc
  18. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/animation/overview.adoc
  19. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/asset_pipeline/overview.adoc
  20. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/audio/overview.adoc
  21. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/game_logic/overview.adoc
  22. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/graphics_pipeline/overview.adoc
  23. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/gui/overview.adoc
  24. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/input/overview.adoc
  25. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/light_shadow/overview.adoc
  26. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/material/overview.adoc
  27. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/math/overview.adoc
  28. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/networking/overview.adoc
  29. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/particle_system/overview.adoc
  30. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/physics/overview.adoc
  31. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/post_processor/overview.adoc
  32. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/scenegraph/overview.adoc
  33. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/shader/overview.adoc
  34. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/advanced/terrain/overview.adoc
  35. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_animation.adoc
  36. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_asset.adoc
  37. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_audio.adoc
  38. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_collision.adoc
  39. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_effects.adoc
  40. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_input.adoc
  41. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_loop.adoc
  42. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_material.adoc
  43. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_node.adoc
  44. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_physics.adoc
  45. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_picking.adoc
  46. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_simpleapplication.adoc
  47. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_terrain.adoc
  48. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/beginners/overview.adoc
  49. 338 333
      src/docs/asciidoc/zh-Hans-CN/jme3/terminology.adoc
  50. 7 0
      src/docs/asciidoc/zh-Hans-CN/jme3/the_scene_graph.adoc
  51. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/application_deployment.adoc
  52. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/code_editor.adoc
  53. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/create_project.adoc
  54. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/debugging_profiling_testing.adoc
  55. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/default_build_script.adoc
  56. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/deployment_android.adoc
  57. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/deployment_ios.adoc
  58. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/overview.adoc
  59. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/trobleshooting.adoc
  60. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/update_center.adoc
  61. 7 0
      src/docs/asciidoc/zh-Hans-CN/sdk/version_control.adoc

+ 112 - 112
src/docs/asciidoc/documentation.adoc

@@ -1,112 +1,112 @@
-= jMonkeyEngine Documentation
-:author:
-:revnumber:
-:revdate: 2016/03/17 20:48
-:experimental:
-:keywords: documentation, sdk, install
-ifdef::env-github,env-browser[:outfilesuffix: .adoc]
-
-
-This documentation wiki contains installation and configuration guides, jME coding tutorials and other information that will help you get your game project going. You can search the contents of this wiki using the search box in the upper right.
-
-You are also very welcome to fix mistakes or spelling as well as unclear paragraphs using the "`Wiki`" menu on top or the "`Edit`" buttons after each paragraph. You have to be logged in to edit the wiki.
-
-TIP: This is an Admonition. You will see many of these scattered throughout the Wiki. See the <<wiki/admonitions#,Admonition Definitions>> for the meaning of this and all the other Admonitions.
-
-== Install
-
-*Before installing, check the <<bsd_license#,license>>, <<jme3/features#,features>>, and <<jme3/requirements#,requirements>>.* Then choose one of these options:
-[cols="4", options="header"]
-|===
-
-a|
-<a| Recommended
-<a| Optional
-<a| Optional
-
-a| You want to…
-a| Get started with jMonkeyEngine
-a| Use jMonkeyEngine in another IDE
-a| Build custom engine from sources
-
-a| Then download…
-a| link:https://github.com/jMonkeyEngine/sdk/releases[jMonkeyEngine SDK]
-a| link:https://github.com/jMonkeyEngine/jmonkeyengine/releases[Binaries]
-a| link:https://github.com/jMonkeyEngine/jmonkeyengine[Engine Sources]
-
-a| You receive…
-a| SDK, binaries, javadoc, sources
-a| Binaries, javadoc, sources
-a| Sources
-
-a| Learn more here…
-a|
-* <<sdk#,Using the SDK>>
-* <<sdk/project_creation#,Project Creation>>
-a|
-* <<jme3/maven#,Setting up jME3 with maven compatible IDEs>>
-* <<jme3/setting_up_netbeans_and_jme3#,Setting up JME3 in the NetBeans IDE>>
-* <<jme3/setting_up_jme3_in_eclipse#,Setting up JME3 in the Eclipse IDE>>
-* <<jme3/eclipse_jme3_android_jnindk#,Setting up JME3 in the Eclipse IDE (with Android and/or JNI/NDK)>>
-a|
-* <<jme3/build_from_sources#,Building JME3 from the Sources>>
-* <<jme3/build_jme3_sources_with_netbeans#,Building JME3 from the sources with NetBeans>>
-* <<jme3/simpleapplication_from_the_commandline#,Setting up JME3 on the commandline>>
-|===
-
-pass:[*] The SDK creates Ant-based projects that any Java IDE can import. We recommend users of other IDEs to also download the jMonkeyEngine SDK and choose `menu:File[Import Project > External Project Assets]` to create a codeless project for managing assets only. This way you can code in the IDE of your choice, and use the SDK to convert your models to .j3o format.
-
-
-== Create
-
-After downloading and installing, <<jme3#,bookmark the jME Documentation page>> and start writing your first game!
-[cols="3", options="header"]
-|===
-
-a| Tutorials
-a| jMonkeyEngine SDK
-a| Other Documentation
-
-a| <<jme3#tutorials-for-beginners,jME3 beginner tutorials>>
-a| <<sdk#,jMonkeyEngine SDK Documentation and Video Tutorials>>
-a| link:http://javadoc.jmonkeyengine.org/[Full API JavaDoc]
-
-a| <<jme3#documentation-for-intermediate-users,jME3 intermediate articles>>
-a| <<sdk/comic#,jMonkeyEngine SDK - the Comic :-)>>
-a| <<jme3/external/blender#,Blender Modeling Guide>>
-
-a| <<jme3#documentation-for-advanced-users,jME3 advanced documentation>>
-<a|
-a| <<jme3/faq#,Answers to Frequently Asked Questions>>
-
-|===
-
-
-== Contribute
-
-Are you an experienced Java developer who wants to add new features or contribute patches to the jME3 project?
-
-*  Get inspired by existing <<jme3/contributions#,contributions>>
-*  link:https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/CONTRIBUTING.md[How to contribute to jMonkeyEngine]
-*  link:https://github.com/jMonkeyEngine/wiki[Become a Wiki Editor]
-*  link:http://hub.jmonkeyengine.org/c/contribution-depot-jme3[Chime in on the Contributors Forum]
-*  <<jme3/jme3_source_structure#,Learn about the source structure>>
-*  <<sdk#development,Write jMonkeyEngine SDK plugins and visual editors>>
-*  <<report_bugs#,Report bugs and submit patches>>
-
-
-== Contact
-
-You are welcome to contribute and inquire about the project: Please contact the link:https://hub.jmonkeyengine.org/badges/103/core-developer[developers] or ask on the link:http://hub.jmonkeyengine.org/[forums].
-
-*  link:https://hub.jmonkeyengine.org/badges/103/core-developer[Contact the jME team]
-**  <<team#,[Core team - Who are we?]>>
-
-*  <<report_bugs#,Report a bug>>
-*  link:http://hub.jmonkeyengine.org/c/documentation-jme3[Report unclear or missing documentation]
-
-
-== Languages
-
-<<documentacao#,Documentação em Português>> +
-<<documentation_zh#,中文版>>
+= jMonkeyEngine Documentation
+:author:
+:revnumber:
+:revdate: 2016/03/17 20:48
+:experimental:
+:keywords: documentation, sdk, install
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]
+
+
+This documentation wiki contains installation and configuration guides, jME coding tutorials and other information that will help you get your game project going. You can search the contents of this wiki using the search box in the upper right.
+
+You are also very welcome to fix mistakes or spelling as well as unclear paragraphs using the "`Wiki`" menu on top or the "`Edit`" buttons after each paragraph. You have to be logged in to edit the wiki.
+
+TIP: This is an Admonition. You will see many of these scattered throughout the Wiki. See the <<wiki/admonitions#,Admonition Definitions>> for the meaning of this and all the other Admonitions.
+
+== Install
+
+*Before installing, check the <<bsd_license#,license>>, <<jme3/features#,features>>, and <<jme3/requirements#,requirements>>.* Then choose one of these options:
+[cols="4", options="header"]
+|===
+
+a|
+<a| Recommended
+<a| Optional
+<a| Optional
+
+a| You want to…
+a| Get started with jMonkeyEngine
+a| Use jMonkeyEngine in another IDE
+a| Build custom engine from sources
+
+a| Then download…
+a| link:https://github.com/jMonkeyEngine/sdk/releases[jMonkeyEngine SDK]
+a| link:https://github.com/jMonkeyEngine/jmonkeyengine/releases[Binaries]
+a| link:https://github.com/jMonkeyEngine/jmonkeyengine[Engine Sources]
+
+a| You receive…
+a| SDK, binaries, javadoc, sources
+a| Binaries, javadoc, sources
+a| Sources
+
+a| Learn more here…
+a|
+* <<sdk#,Using the SDK>>
+* <<sdk/project_creation#,Project Creation>>
+a|
+* <<jme3/maven#,Setting up jME3 with maven compatible IDEs>>
+* <<jme3/setting_up_netbeans_and_jme3#,Setting up JME3 in the NetBeans IDE>>
+* <<jme3/setting_up_jme3_in_eclipse#,Setting up JME3 in the Eclipse IDE>>
+* <<jme3/eclipse_jme3_android_jnindk#,Setting up JME3 in the Eclipse IDE (with Android and/or JNI/NDK)>>
+a|
+* <<jme3/build_from_sources#,Building JME3 from the Sources>>
+* <<jme3/build_jme3_sources_with_netbeans#,Building JME3 from the sources with NetBeans>>
+* <<jme3/simpleapplication_from_the_commandline#,Setting up JME3 on the commandline>>
+|===
+
+pass:[*] The SDK creates Ant-based projects that any Java IDE can import. We recommend users of other IDEs to also download the jMonkeyEngine SDK and choose `menu:File[Import Project > External Project Assets]` to create a codeless project for managing assets only. This way you can code in the IDE of your choice, and use the SDK to convert your models to .j3o format.
+
+
+== Create
+
+After downloading and installing, <<jme3#,bookmark the jME Documentation page>> and start writing your first game!
+[cols="3", options="header"]
+|===
+
+a| Tutorials
+a| jMonkeyEngine SDK
+a| Other Documentation
+
+a| <<jme3#tutorials-for-beginners,jME3 beginner tutorials>>
+a| <<sdk#,jMonkeyEngine SDK Documentation and Video Tutorials>>
+a| link:http://javadoc.jmonkeyengine.org/[Full API JavaDoc]
+
+a| <<jme3#documentation-for-intermediate-users,jME3 intermediate articles>>
+a| <<sdk/comic#,jMonkeyEngine SDK - the Comic :-)>>
+a| <<jme3/external/blender#,Blender Modeling Guide>>
+
+a| <<jme3#documentation-for-advanced-users,jME3 advanced documentation>>
+<a|
+a| <<jme3/faq#,Answers to Frequently Asked Questions>>
+
+|===
+
+
+== Contribute
+
+Are you an experienced Java developer who wants to add new features or contribute patches to the jME3 project?
+
+*  Get inspired by existing <<jme3/contributions#,contributions>>
+*  link:https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/CONTRIBUTING.md[How to contribute to jMonkeyEngine]
+*  link:https://github.com/jMonkeyEngine/wiki[Become a Wiki Editor]
+*  link:http://hub.jmonkeyengine.org/c/contribution-depot-jme3[Chime in on the Contributors Forum]
+*  <<jme3/jme3_source_structure#,Learn about the source structure>>
+*  <<sdk#development,Write jMonkeyEngine SDK plugins and visual editors>>
+*  <<report_bugs#,Report bugs and submit patches>>
+
+
+== Contact
+
+You are welcome to contribute and inquire about the project: Please contact the link:https://hub.jmonkeyengine.org/badges/103/core-developer[developers] or ask on the link:http://hub.jmonkeyengine.org/[forums].
+
+*  link:https://hub.jmonkeyengine.org/badges/103/core-developer[Contact the jME team]
+**  <<team#,[Core team - Who are we?]>>
+
+*  <<report_bugs#,Report a bug>>
+*  link:http://hub.jmonkeyengine.org/c/documentation-jme3[Report unclear or missing documentation]
+
+
+== Languages
+
+<<documentacao#,Documentação em Português>> +
+<<zh-Hans-CN/documentation#,中文版>>

+ 0 - 419
src/docs/asciidoc/jme3/beginner/hello_node_zh.adoc

@@ -1,419 +0,0 @@
-= jMonkeyEngine 3 第二颗 (2) - Hello Node
-:author: 
-:revnumber: 
-:revdate: 2016/03/17 20:48
-:keywords: beginner, rootNode, node, intro, documentation, color, spatial, geometry, scenegraph, mesh
-:relfileprefix: ../../
-:imagesdir: ../..
-ifdef::env-github,env-browser[:outfilesuffix: .adoc]
-
-
-先看: <<jme3/the_scene_graph#,Hello SimpleApplication>>,
-在看: <<jme3/beginner/hello_asset#,Hello Assets>>. 
-
-我的中文不是呢么好,请你们帮我咻咻他。谢谢。
-
-在这一课,你会学怎么去盖一个3D场景。
-
-*  学这一棵前,你先好知道什么是<<jme3/setting_up_jme3_in_eclipse#,Scene Graph>>,
-*  如果你不知道他是什么,就看<<jme3/scenegraph_for_dummies#,Scene Graph for Dummies>>.
-
-盖3D游戏时:
-
-.  你要雕塑3D人,房子,ect。
-.  你要方静你的模型在游戏场景里
-.  你要动,便形,转,图上颜色,和动画他们。
-
-你会学怎么用 Scene Graph 做什么,学为什么 RootNode 呢么重要,学怎么放变量比如活力或钱经一个 Node,学怎么动,转或变你的模型的形状,和你会学 Node 和 Geometry 有什么分别。
-
-
-== 例子
-
-[source,java]
-----
-package jme3test.helloworld;
-
-import com.jme3.app.SimpleApplication;
-import com.jme3.material.Material;
-import com.jme3.math.Vector3f;
-import com.jme3.scene.Geometry;
-import com.jme3.scene.shape.Box;
-import com.jme3.math.ColorRGBA;
-import com.jme3.scene.Node;
-
-/** Sample 2 - 怎么用 Nodes 去动或变模型。
- *Root Node 很特别,你只能看到放在它上的模型*/
-
-public class HelloNode extends SimpleApplication {
-
-    public static void main(String[] args){
-        HelloNode app = new HelloNode();
-        app.start();
-    }
-
-    @Override
-    public void simpleInitApp() {
-
-        /** 改一个新蓝色的立方体在(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);
-
-        /**盖一个新红色的立方体在(1,3,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);
-        
-        /** 改一个新 Node 叫 ”pivot“ 在 (0,0,0),放他在 Root Node 上*/
-        Node pivot = new Node("pivot");
-        rootNode.attachChild(pivot); // 放 pivot 在 Root Node 上。
-
-        /** 放那两个立方体在在 pivot 上 */
-        pivot.attachChild(blue);
-        pivot.attachChild(red);
-        /** 转 pivot:那两个立方体会跟他转*/
-        pivot.rotate(.4f,.4f,0f);
-    }
-}
-----
-
-开始 Hello Node 后,你会看到两个一样斜的立方体。
-
-
-== 口语到 JME 语
-
-在这一个,你学到了几个东西:
-[cols="2", options="header"]
-|===
-
-a|你要做什么
-a|怎么说在JME语言
-
-a|Lay out the 3D scene
-a|Populate the scene graph
-
-a|Create scene objects
-a|Create Spatials (e.g. create Geometries)
-
-a|Make an object appear in the scene
-a|Attach a Spatial to the rootNode
-
-a|Make an object disappear from the scene
-a|Detach the Spatial from the rootNode
-
-a|Position/move, turn, or resize an object
-a|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.
-
-*  A Spatial contains the location, rotation, and scale of an object.
-*  A Spatial can be loaded, transformed, and saved.
-*  There are two types of Spatials: Nodes and Geometries.
-[cols="3", options="header"]
-|===
-
-<a|  
-a| Geometry 
-a| Node 
-
-a| Visibility: 
-a| A Geometry is a visible scene object. 
-a| A Node is an invisible “handle for scene objects. 
-
-a| Purpose: 
-a| A Geometry stores an object's looks. 
-a| A Node groups Geometries and other Nodes together. 
-
-a| Examples: 
-a| A box, a sphere, a player, a building, a piece of terrain, a vehicle, missiles, NPCs, etc… 
-a| The `rootNode`, a floor node grouping several terrains, a custom vehicle-with-passengers node, a player-with-weapon node, an audio node, etc… 
-
-|===
-
-
-== Understanding the Code
-
-What happens in the code snippet? You use the `simpleInitApp()` method that was introduced in the first tutorial to initialize the scene.
-
-.  You create the first box Geometry.
-**  Create a Box shape with a radius of (1,1,1), that makes the box 2x2x2 world units big.
-**  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. 
-[source,java]
-----
-
-    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);
-----
-
-
-.  You create a second box Geometry.
-**  Create a second Box shape with the same size.
-**  Position the second box at (1,3,1). This is straight above the first box, with a gap of 2 world units inbetween.
-**  Wrap the Box shape into a Geometry.
-**  Create a red material. 
-**  Apply the red material to the Box Geometry. 
-[source,java]
-----
-
-    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);
-----
-
-
-.  You create a pivot Node. 
-**  Name the Node “pivot.
-**  By default the Node is positioned at (0,0,0). 
-**  Attach the Node to the rootNode.
-**  The Node has no visible appearance in the scene. 
-[source,java]
-----
-
-    Node pivot = new Node("pivot");
-    rootNode.attachChild(pivot);
-----
-
-If you run the application with only the code up to here, the scene appears empty. This is because a Node is invisible, and you have not yet attached any visible Geometries to the rootNode. 
-
-
-.  Attach the two boxes to the pivot node. 
-[source,java]
-----
-
-        pivot.attachChild(blue);
-        pivot.attachChild(red);
-----
-
-If you run the app with only the code up to here, you see two cubes: A red cube straight above a blue cube.
-
-.  Rotate the pivot node.
-[source,java]
-----
-        pivot.rotate( 0.4f , 0.4f , 0.0f );
-----
-
- If you run the app now, you see two boxes on top of each other – both tilted at the same angle.
-
-
-
-=== What is a Pivot Node?
-
-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.
-
-*  In this example, you have grouped two Geometries by attaching them to one pivot Node. You use the pivot Node as a handle to rotate the two Geometries together around one common center. Rotating the pivot Node rotates all attached Geometries, in one step. The pivot node is the center of the rotation. Before attaching the other Geometries, make certain that the pivot node is at (0,0,0). Transforming a parent Node to transform all attached child Spatials is a common task. You will use this method a lot in your games when you move Spatials around. +*Examples:* A vehicle and its driver move together; a planet with its moon orbits the sun. 
-*  Contrast this case with the other option: If you don't create an extra pivot node and transform a Geometry, then every transformation is done relative to the Geometry's origin (typically the center). +*Examples:* If you rotate each cube directly (using `red.rotate(0.1f , 0.2f , 0.3f);` and `blue.rotate(0.5f , 0.0f , 0.25f);`), then each cube is rotated individually around its center. This is similar to a planet rotating around its own center.
-
-
-== How do I Populate the Scenegraph?
-[cols="2", options="header"]
-|===
-
-a| Task…? 
-a| Solution! 
-
-a| Create a Spatial 
-a| Create a Mesh shape, wrap it into a Geometry, and give it a Material. For example: 
-[source,java]
-----
-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);
-----
-
-
-a| Make an object appear in the scene 
-a| Attach the Spatial to the `rootNode`, or to any node that is attached to the rootNode. 
-[source,java]
-----
-rootNode.attachChild(thing);
-----
-
-
-a| Remove objects from the scene 
-a| Detach the Spatial from the `rootNode`, and from any node that is attached to the rootNode. 
-[source,java]
-----
-rootNode.detachChild(thing);
-----
-
-[source,java]
-----
-rootNode.detachAllChildren();
-----
-
-
-a| Find a Spatial in the scene by the object's name, or ID, or by its position in the parent-child hierarchy. 
-a| Look at the node's children or parent: 
-[source,java]
-----
-Spatial thing = rootNode.getChild("thing");
-----
-
-[source,java]
-----
-Spatial twentyThird = rootNode.getChild(22);
-----
-
-[source,java]
-----
-Spatial parent = myNode.getParent();
-----
-
-
-a| Specify what should be loaded at the start 
-a| Everything you initialize and attach to the `rootNode` in the `simpleInitApp()` method is part of the scene at the start of the game. 
-
-|===
-
-
-== How do I Transform Spatials?
-
-There are three types of 3D transformation: Translation, Scaling, and Rotation.
-[cols="4", options="header"]
-|===
-
-a| Translation moves Spatials 
-a| X-axis 
-a| Y-axis 
-a| Z-axis 
-
-a| Specify the new location in three dimensions: How far away is it from the origin going right-up-forward? +To move a Spatial _to_ specific coordinates, such as (0,40.2f,-2), use: 
-[source,java]
-----
-thing.setLocalTranslation( new Vector3f( 0.0f, 40.2f, -2.0f ) );
-----
-
- To move a Spatial _by_ a certain amount, e.g. higher up (y=40.2f) and further back (z=-2.0f): 
-
-[source,java]
-----
-thing.move( 0.0f, 40.2f, -2.0f );
-----
-
-a|+right -left
-a|+up -down
-a|+forward -backward
-
-|===
-[cols="4", options="header"]
-|===
-
-a| Scaling resizes Spatials 
-a| X-axis 
-a| Y-axis 
-a| Z-axis 
-
-a|Specify the scaling factor in each dimension: length, height, width. +A value between 0.0f and 1.0f shrinks the Spatial; bigger than 1.0f stretches it; 1.0f keeps it the same. +Using the same value for each dimension scales proportionally, different values stretch it. +To scale a Spatial 10 times longer, one tenth the height, and keep the same width: 
-[source,java]
-----
-thing.scale( 10.0f, 0.1f, 1.0f );
-----
-
-a|length
-a|height
-a|width
-
-|===
-[cols="4", options="header"]
-|===
-
-a| Rotation turns Spatials 
-a| X-axis 
-a| Y-axis 
-a| Z-axis 
-
-a|3-D rotation is a bit tricky (<<jme3/rotate#,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: 
-[source,java]
-----
-thing.rotate( 0f , 0f , 180*FastMath.DEG_TO_RAD );
-----
-
- Tip: If your game idea calls for a serious amount of rotations, it is worth looking into <<jme3/quaternion#,quaternion>>s, a data structure that can combine and store rotations efficiently. 
-
-[source,java]
-----
-thing.setLocalRotation( 
-  new Quaternion().fromAngleAxis(180*FastMath.DEG_TO_RAD, new Vector3f(1,0,0)));
-----
-
-a|pitch = nodding your head
-a|yaw = shaking your head
-a|roll = cocking your head
-
-|===
-
-
-== How do I Troubleshoot Spatials?
-
-If you get unexpected results, check whether you made the following common mistakes:
-[cols="2", options="header"]
-|===
-
-a| Problem? 
-a| Solution! 
-
-a| A created Geometry does not appear in the scene. 
-a| Have you attached it to (a node that is attached to) the rootNode? +Does it have a Material? +What is its translation (position)? Is it behind the camera or covered up by another Geometry? +Is it to tiny or too gigantic to see? +Is it too far from the camera? (Try link:http://jmonkeyengine.org/javadoc/com/jme3/renderer/Camera.html#setFrustumFar%28float%29[cam.setFrustumFar](111111f); to see further) 
-
-a| A Spatial rotates in unexpected ways. 
-a| 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| A Geometry has an unexpected Color or Material. 
-<a| Did you reuse a Material from another Geometry and have inadvertently changed its properties? (If so, consider cloning it: mat2 = mat.clone(); )  
-
-|===
-
-
-== How do I Add Custom Data to Spatials?
-
-Many Spatials represent game characters or other entities that the player can interact with. The above code that rotates the two boxes around a common center (pivot) could be used for a spacecraft docked to a orbiting space station, for example.
-
-Depending on your game, game entities do not only change their position, rotation, or scale (the transformations that you just learned about). Game entities also have custom properties, such as health, inventory carried, equipment worn for a character, or hull strength and fuel left for a spacecraft. In Java, you represent entity data as class variables, e.g. floats, Strings, or Arrays. 
-
-You can add custom data directly to any Node or Geometry. *You do not need to extend the Node class to include variables*!
-For example, to add a custom id number to a node, you would use:
-
-[source,java]
-----
-pivot.setUserData( "pivot id", 42 );
-----
-
-To read this Node's id number elsewhere, you would use:
-
-[source,java]
-----
-int id = pivot.getUserData( "pivot id" ); 
-----
-
-By using different Strings keys (here the key is `pivot id`), you can get and set several values for whatever data the Spatial needs to carry. When you start writing your game, you might add a fuel value to a car node, speed value to an airplane node, or number of gold coins to a player node, and much more. 
-
-
-== Conclusion
-
-You have learned that your 3D scene is a scene graph made up of Spatials: Visible Geometries and invisible Nodes. You can transform Spatials, or attach them to nodes and transform the nodes. You know the easiest way how to add custom entity properties (such as player health or vehicle speed) to Spatials.
-
-Since standard shapes like spheres and boxes get old fast, continue with the next chapter where you learn to <<jme3/beginner/hello_asset#,load assets such as 3-D models>>.

+ 0 - 196
src/docs/asciidoc/jme3/beginner/hello_simpleapplication_zh.adoc

@@ -1,196 +0,0 @@
-= 第一个JME3应用程序
-:author: 
-:revnumber: 
-:revdate: 2016/03/17 20:48
-:keywords: beginner, intro, documentation, init, simpleapplication, basegame
-:relfileprefix: ../../
-:imagesdir: ../..
-ifdef::env-github,env-browser[:outfilesuffix: .adoc]
-
-
-上一篇: <<documentation_zh#下载和安装,下载和安装>>, 下一篇/ <<jme3/beginner/hello_node_zh#,节点(Node)>>
-
-*预备知识:* 开始之前假设你已经<<documentation_zh#下载和安装,下载和安装jMonkeyEngine SDK>>,并且可以顺利地运行其中的一些例子。
-
-在JME3初级系列教程的学习过程中,我们假设你使用的是<<sdk#, jMonkeyEngine SDK>>,并且是一名具有中、高级水准的Java开发者。很快你就将学会如何使用你熟悉的IDE(如NetBeans IDE、<<jme3/setting_up_jme3_in_eclipse_zh#,Eclipse>>、IntelliJ,甚至是<<jme3/simpleapplication_from_the_commandline#,命令行>>)来开发JME3项目。
-
-
-== 创建项目
-
-在jMonkeyEngine SDK 里:
-
-.  按 Choose File→New Project…
-.  找 JME3→Basic Game,按 Next。
-..  在 Project Name 里,填写你的游戏名字。 
-..  按 Project Location 右边 Browse 找你要放游戏的地方。
-
-.  按Finnish。
-
-如果你有别的问题的话,请阅读<<sdk/project_creation#,创建项目>>。
-
-
-== 写一个程序
-
-在jMonkeyEngine SDK 里:
-
-.  右按你的 Source Packages
-.  按 New…→Java Class
-.  在 Class Name 里放: `HelloJME3`
-.  在 Package 里放: `jme3test.helloworld`. 
-.  按 Finish.
-
-
-== 例子
-
-在HelloJME3.java里面,方静下面的Java:
-
-[source,java]
-----
-
-package jme3test.helloworld;
-
-import com.jme3.app.SimpleApplication;
-import com.jme3.material.Material;
-import com.jme3.math.Vector3f;
-import com.jme3.scene.Geometry;
-import com.jme3.scene.shape.Box;
-import com.jme3.math.ColorRGBA;
-
-/** Sample 1 - 怎么写一个很简单的程序。
- * 放一个蓝色的立方体在 scene graph 上。
- * 用 WASD 去动 */
-public class HelloJME3 extends SimpleApplication {
-
-    public static void main(String[] args){
-        HelloJME3 app = new HelloJME3();
-        app.start(); // 开始!
-    }
-    
-    @Override
-    public void simpleInitApp() {
-        Box b = new Box(Vector3f.ZERO, 1, 1, 1); // 盖一个立方体在(0,0,0)
-        Geometry geom = new Geometry("Box", b);  // 用立方体盖一个 Geometry。
-        Material mat = new Material(assetManager,
-          "Common/MatDefs/Misc/Unshaded.j3md");  // 图一个 Material。
-        mat.setColor("Color", ColorRGBA.Blue);   // 图蓝色在 Material 上。
-        geom.setMaterial(mat);                   // 方 Material 在立方体上。
-        rootNode.attachChild(geom);              // 放 Geometry 在 Root Node 上。(让大家看到那个 Geometry)
-    }
-}
-----
-
-按 HelloJME3,找 Run. 如果 SDK 问你要用什么 Settings,按 Default Settings。
-
-.  你会看到一个蓝色的立方体。
-.  按 WASD 去动来动去。
-.  如果你要关 HelloJME 就按 ESC。
-
-
-== 软件做了什么
-
-我写了一个很简单的程序。它会盖一个蓝色的立方体.
-
-
-=== 开始 SimpleApplication
-
-看第一行。HelloJME3 extends `com.jme3.app.SimpleApplication`。 
-
-[source,java]
-----
-
-public class HelloJME3 extends SimpleApplication {
-  // ...
-}
-
-----
-
-每一个 JME3 游戏 是一个 `com.jme3.app.SimpleApplication` instance。 SimpleApplication 会帮你图上屏幕和你的3D Scene。
-
-JME3 从 `main()` 来开始。在 `main()` 里面,你要:
-
-.  盖一个 `SimpleAppliction` instance。(instantiate)
-.  叫它的 `start()` 去开始你的程序。
-
-[source,java]
-----
-
-    public static void main(String[] args){
-        HelloJME3 app = new HelloJME3(); // instantiate 你的游戏。
-        app.start();                     // 开始!
-    }
-
-----
-
-
-=== 口语到 JME 语
-[cols="2", options="header"]
-|===
-
-a|你要做什么
-a|怎么说在JME语言
-
-a|你要盖一个立方体。
-a|我盖一个用 1x1x1 Box 的 Geometry。
-
-a|你要用蓝色。
-a|我图一个资料,就放蓝色在资料上面。
-
-a|你要一个蓝色的立方体。
-a|我图蓝色的资料在立方体上。
-
-a|你要看到你的 Geometry
-a|我放 Geometry 在 Root Node 上。
-
-a|我要我的立方体在中间
-a|我放立方体在(0,0,0)`Vector3f.ZERO`。
-
-|===
-
-如果你还是有问题,请你看<<jme3/the_scene_graph#,the Scene Graph>>。
-
-
-=== Initialize the Scene
-
-你的程序一开始后,就会自动叫`simpleInitApp()`。 每一个 JME3 游戏要有它。`simpleInitApp()`要方一开始要看到/做到的东西
-
-[source,java]
-----
-
-    public void simpleInitApp() {
-       //先看到/做到的东西...
-    }
-
-----
-
-[source,java]
-----
-
-    public void simpleInitApp() {
-        Box b = new Box(Vector3f.ZERO, 1, 1, 1); // 盖一个立方体在(0,0,0)
-        Geometry geom = new Geometry("Box", b);  // 用立方体盖一个 Geometry。
-        Material mat = new Material(assetManager,
-          "Common/MatDefs/Misc/Unshaded.j3md");  // 图一个资料。
-        mat.setColor("Color", ColorRGBA.Blue);   // 方蓝色在资料上。
-        geom.setMaterial(mat);                   // 图资料到立方体上。
-        rootNode.attachChild(geom);              // 放 Geometry 在 Root Node 上。(让大家看到你的 Geometry)
-    }
-
-----
-
-
-== 最后
-
-你学了 SimpleApplication 的作用:
-
-*  `simpleInitApp()` 里面放开始要看或做的东西。
-*  要是你要看到 东西,你就要放它在 `rootNode` 上。
-*  用 WASD 去动。
-
-继续去 <<jme3/beginner/hello_node#,Hello Node>> 你会学什么是,和你真么用 Scene Graph。
-'''
-
-还看:
-
-*  <<#,下载JME3SDK>>
-*  <<jme3/simpleapplication_from_the_commandline#,SimpleApplication From the Commandline>>
-*  <<sdk/project_creation#,写一个JME3 Project>>.

+ 112 - 110
src/docs/asciidoc/documentation_zh.adoc → src/docs/asciidoc/zh-Hans-CN/documentation.adoc

@@ -1,110 +1,112 @@
-= jMonkeyEngine 说明文档
-:author:
-:revnumber:
-:revdate: 2016/03/17 20:48
-:keywords: documentation, sdk, install
-ifdef::env-github,env-browser[:outfilesuffix: .adoc]
-
-
-本wiki页面包含jME3的安装和配置指南、jME3编程教程以及其他一些能够帮助你开发游戏项目的资料,请善用本页右上方的搜索框来检索整个wiki中的内容。
-
-本文翻译自英文版<<documentation#,jME文档>>,受编者水平所限,难免存在各种各样的问题。如果您在阅读的过程中发现任何错误,非常欢迎您直接修正错误的内容。编辑此页面需要link:http://hub.jmonkeyengine.org[官方论坛]账号,然后点击本页右上角的“Tools → Login登录。登录后点击右上角“Tools → Edit this page或者每个段落后面的“Edit按钮,即可编辑此页面。
-
-
-== 下载和安装
-
-*在安装之前,请查阅<<bsd_license#,许可证>>、<<jme3/features_zh#,jME3功能说明>>和<<jme3/requirements_zh#,开发需求>>,* 然后选择其中一个选项:
-[cols="4", options="header"]
-|===
-
-a|
-<a| 推荐
-<a| 可选
-<a| 可选
-
-a| 你打算…
-a| 使用jMonkeyEngine SDK开发
-a| 在其他的IDE中使用jMonkeyEngine
-a| 利用源码来编译自定义引擎
-
-a| 请下载…
-a| link:https://github.com/jMonkeyEngine/sdk/releases/tag/stable[jMonkeyEngine SDK]
-a| link:https://github.com/jMonkeyEngine/sdk/releases[Binaries]
-a| link:https://github.com/jMonkeyEngine/jmonkeyengine[Sources]
-
-a| 你会得到…
-a| Sources, binaries, javadoc, SDK
-a| Latest stable binary build, sources, javadoc.
-a| Sources
-
-a| 更多学习内容…
-a| <<sdk_zh#,学习使用SDK>> +<<sdk/project_creation_zh#,使用SDK创建工程>> +
-image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,width="144",height="90",align="center"]
-
-a| <<jme3/maven_zh#,在任何兼容maven的IDE中集成JME3>> * +<<jme3/setting_up_netbeans_and_jme3_zh#,在NetBeans中集成JME3>> * +<<jme3/setting_up_jme3_in_eclipse_zh#,在Eclipse中集成JME3>> * +<<jme3/eclipse_jme3_android_jnindk_zh#,在Eclipse(含Android及JNI/NDK)中集成JME3>> *
-a| <<jme3/build_from_sources_zh#,编译JME3源码>> +<<jme3/build_jme3_sources_with_netbeans_zh#,在NetBeans中编译JME3源码>> +<<jme3/simpleapplication_from_the_commandline_zh#,在(Linux)命令行下开发JME3>>
-
-|===
-
-(*) jME SDK创建的是基于Ant的项目,任何Java IDE都可以导入。我们建议其他IDE的用户也下载jME SDK,并选择 “File→Import Project→External Project Assets 来创建一个不包含任何代码的资源项目,用以管理项目中的资源文件(如模型、材质、贴图等)。这样您就可以在自己选择的IDE中编码,并利用jME SDK来将您的模型转换成.j3o格式。
-
-
-== 创建jME工程
-
-下载安装jME之后,请把这个<<jme3_zh#,jME教程>>加入您的书签,然后动手开发您的第一个游戏吧!
-[cols="3", options="header"]
-|===
-
-a| 教程
-a| jMonkeyEngine SDK
-a| 其他文档
-
-a| <<jme3_zh#初级教程,jME3初级教程>>
-a| <<sdk_zh#,jMonkeyEngine SDK 文档和视频教程>>
-a| link:http://javadoc.jmonkeyengine.org/[Full API JavaDoc]
-
-a| <<jme3_zh#中级教程,jME3中级教程>>
-a| <<sdk/comic_zh#,jMonkeyEngine SDK - 漫画 :-)>>
-a| <<jme3/external/blender_zh#,Blender建模指南>>
-
-a| <<jme3_zh#进阶教程,jME3进阶教程>>
-<a|
-a| <<jme3/faq_zh#,FAQ>>
-
-|===
-
-
-== 贡献代码
-
-想给jME3贡献新的特性和功能吗?如果你是一名熟练的Java开发者,请看下列页面:
-
-*  了解已有的<<jme3/contributions#,贡献>>
-*  link:http://hub.jmonkeyengine.org/introduction/contributors-handbook/[阅读贡献者手册]
-*  link:http://hub.jmonkeyengine.org/[加入官方论坛的讨论]
-*  <<jme3/jme3_source_structure_zh#,学习jME3源码架构>>
-*  <<sdk_zh#development,开发jME SDK插件以及可视化编辑器>>
-*  <<report_bugs_zh#,报告bug &amp; 提交补丁>>
-
-
-== 联系我们
-
-欢迎您的贡献和咨询:请通过mailto:&#x63;&#x6f;&#x6e;&#x74;&#x61;&#x63;&#x74;&#x40;&#x6a;&#x6d;&#x6f;&#x6e;&#x6b;&#x65;&#x79;&#x65;&#x6e;&#x67;&#x69;&#x6e;&#x65;&#x2e;&#x63;&#x6f;&#x6d;[电子邮箱]联系link:http://jmonkeyengine.org/team/[开发团队],或者在 link:http://hub.jmonkeyengine.org/[官方论坛]发帖提问。
-
-*  mailto:&#x63;&#x6f;&#x6e;&#x74;&#x61;&#x63;&#x74;&#x40;&#x6a;&#x6d;&#x6f;&#x6e;&#x6b;&#x65;&#x79;&#x65;&#x6e;&#x67;&#x69;&#x6e;&#x65;&#x2e;&#x63;&#x6f;&#x6d;[联系jME团队]
-**  link:http://jmonkeyengine.org/team/[核心团队 - 我们是谁?]
-
-*  <<report_bugs#,发现bug>>
-*  link:http://hub.jmonkeyengine.org/c/documentation-jme3[发现文档内容含糊或文档不存在]
-
-
-== 本页的多国语言版
-
-<<documentation#,英文原版>> +
-<<документация#,俄语版>> +
-<<documentacao#,葡萄牙语>> +
-<<documentation_zh#,中文版>>
-
-
-== 中文开发者讨论群
-
-本群不是jME的官方QQ群,而是由一群国内的jME爱好者聚集的讨论群,欢迎加入讨论,群号:423979787。
+= jMonkeyEngine 说明文档
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:41
+:relfileprefix: ../
+:imagesdir: ../
+:keywords: documentation, sdk, install
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]
+
+
+本wiki页面包含jME3的安装和配置指南、jME3编程教程以及其他一些能够帮助你开发游戏项目的资料,请善用本页右上方的搜索框来检索整个wiki中的内容。
+
+本文翻译自英文版<<documentation#,jME文档>>,受编者水平所限,难免存在各种各样的问题。如果您在阅读的过程中发现任何错误,非常欢迎您直接修正错误的内容。编辑此页面需要link:http://hub.jmonkeyengine.org[官方论坛]账号,然后点击本页右上角的“Tools → Login登录。登录后点击右上角“Tools → Edit this page或者每个段落后面的“Edit按钮,即可编辑此页面。
+
+
+== 下载和安装
+
+*在安装之前,请查阅<<bsd_license#,许可证>>、<<jme3/features_zh#,jME3功能说明>>和<<jme3/requirements_zh#,开发需求>>,* 然后选择其中一个选项:
+[cols="4", options="header"]
+|===
+
+a|
+<a| 推荐
+<a| 可选
+<a| 可选
+
+a| 你打算…
+a| 使用jMonkeyEngine SDK开发
+a| 在其他的IDE中使用jMonkeyEngine
+a| 利用源码来编译自定义引擎
+
+a| 请下载…
+a| link:https://github.com/jMonkeyEngine/sdk/releases/tag/stable[jMonkeyEngine SDK]
+a| link:https://github.com/jMonkeyEngine/sdk/releases[Binaries]
+a| link:https://github.com/jMonkeyEngine/jmonkeyengine[Sources]
+
+a| 你会得到…
+a| Sources, binaries, javadoc, SDK
+a| Latest stable binary build, sources, javadoc.
+a| Sources
+
+a| 更多学习内容…
+a| <<sdk_zh#,学习使用SDK>> +<<sdk/project_creation#,使用SDK创建工程>> +
+image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,width="144",height="90",align="center"]
+
+a| <<jme3/maven_zh#,在任何兼容maven的IDE中集成JME3>> * +<<jme3/setting_up_netbeans_and_jme3_zh#,在NetBeans中集成JME3>> * +<<jme3/setting_up_jme3_in_eclipse#,在Eclipse中集成JME3>> * +<<jme3/eclipse_jme3_android_jnindk_zh#,在Eclipse(含Android及JNI/NDK)中集成JME3>> *
+a| <<jme3/build_from_sources_zh#,编译JME3源码>> +<<jme3/build_jme3_sources_with_netbeans#,在NetBeans中编译JME3源码>> +<<jme3/simpleapplication_from_the_commandline#,在(Linux)命令行下开发JME3>>
+
+|===
+
+(*) jME SDK创建的是基于Ant的项目,任何Java IDE都可以导入。我们建议其他IDE的用户也下载jME SDK,并选择 “File→Import Project→External Project Assets 来创建一个不包含任何代码的资源项目,用以管理项目中的资源文件(如模型、材质、贴图等)。这样您就可以在自己选择的IDE中编码,并利用jME SDK来将您的模型转换成.j3o格式。
+
+
+== 创建jME工程
+
+下载安装jME之后,请把这个<<jme3_zh#,jME教程>>加入您的书签,然后动手开发您的第一个游戏吧!
+[cols="3", options="header"]
+|===
+
+a| 教程
+a| jMonkeyEngine SDK
+a| 其他文档
+
+a| <<jme3_zh#初级教程,jME3初级教程>>
+a| <<sdk_zh#,jMonkeyEngine SDK 文档和视频教程>>
+a| link:http://javadoc.jmonkeyengine.org/[Full API JavaDoc]
+
+a| <<jme3_zh#中级教程,jME3中级教程>>
+a| <<sdk/comic#,jMonkeyEngine SDK - 漫画 :-)>>
+a| <<jme3/external/blender#,Blender建模指南>>
+
+a| <<jme3#进阶教程,jME3进阶教程>>
+<a|
+a| <<jme3/faq#,FAQ>>
+
+|===
+
+
+== 贡献代码
+
+想给jME3贡献新的特性和功能吗?如果你是一名熟练的Java开发者,请看下列页面:
+
+*  了解已有的<<jme3/contributions#,贡献>>
+*  link:http://hub.jmonkeyengine.org/introduction/contributors-handbook/[阅读贡献者手册]
+*  link:http://hub.jmonkeyengine.org/[加入官方论坛的讨论]
+*  <<jme3/jme3_source_structure_zh#,学习jME3源码架构>>
+*  <<sdk_zh#development,开发jME SDK插件以及可视化编辑器>>
+*  <<report_bugs_zh#,报告bug &amp; 提交补丁>>
+
+
+== 联系我们
+
+欢迎您的贡献和咨询:请通过mailto:&#x63;&#x6f;&#x6e;&#x74;&#x61;&#x63;&#x74;&#x40;&#x6a;&#x6d;&#x6f;&#x6e;&#x6b;&#x65;&#x79;&#x65;&#x6e;&#x67;&#x69;&#x6e;&#x65;&#x2e;&#x63;&#x6f;&#x6d;[电子邮箱]联系link:http://jmonkeyengine.org/team/[开发团队],或者在 link:http://hub.jmonkeyengine.org/[官方论坛]发帖提问。
+
+*  mailto:&#x63;&#x6f;&#x6e;&#x74;&#x61;&#x63;&#x74;&#x40;&#x6a;&#x6d;&#x6f;&#x6e;&#x6b;&#x65;&#x79;&#x65;&#x6e;&#x67;&#x69;&#x6e;&#x65;&#x2e;&#x63;&#x6f;&#x6d;[联系jME团队]
+**  link:http://jmonkeyengine.org/team/[核心团队 - 我们是谁?]
+
+*  <<report_bugs#,发现bug>>
+*  link:http://hub.jmonkeyengine.org/c/documentation-jme3[发现文档内容含糊或文档不存在]
+
+
+== 本页的多国语言版
+
+<<documentation#,英文原版>> +
+<<документация#,俄语版>> +
+<<documentacao#,葡萄牙语>> +
+<<documentation_zh#,中文版>>
+
+
+== 中文开发者讨论群
+
+本群不是jME的官方QQ群,而是由一群国内的jME爱好者聚集的讨论群,欢迎加入讨论,群号:423979787。

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/getting-start/android_studio.adoc

@@ -0,0 +1,7 @@
+= ANDROID STUDIO
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/getting-start/eclipse.adoc

@@ -0,0 +1,7 @@
+= ECLIPSE
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/getting-start/gradle.adoc

@@ -0,0 +1,7 @@
+= GRADLE
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/getting-start/intellij_idea.adoc

@@ -0,0 +1,7 @@
+= INTELLIJ IDEA
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/getting-start/maven.adoc

@@ -0,0 +1,7 @@
+= MAVEN
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/getting-start/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/getting-start/sdk.adoc

@@ -0,0 +1,7 @@
+= SDK
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/install/engine.adoc

@@ -0,0 +1,7 @@
+= ENGINE
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/install/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 63 - 65
src/docs/asciidoc/jme3/requirements_zh.adoc → src/docs/asciidoc/zh-Hans-CN/install/requirements.adoc

@@ -1,65 +1,63 @@
-= jMonkeyEngine3 开发需求
-:author: 
-:revnumber: 
-:revdate: 2016/03/17 20:48
-:relfileprefix: ../
-:imagesdir: ..
-ifdef::env-github,env-browser[:outfilesuffix: .adoc]
-
-
-本文分别从游戏开发者和用户的2种视角,分别介绍使用jMonkeyEngine3所需的软硬件需求。
-
-
-== 开发者
-
-使用jMonkeyEngine SDK来开发游戏的最低配置需求如下:
-[cols="2", options="header"]
-|===
-
-a|操作系统
-a|Mac +++<abbr title="Operating System">OS</abbr>+++ X, Windows, Linux, Solaris 
-
-a|内存 (JVM heap size)
-a| &gt; 40 +++<abbr title="Megabyte">MB</abbr>+++ ++ 游戏资源所占用的内存 
-
-a|CPU
-a|&gt; 1 +++<abbr title="Gigahertz">GHz</abbr>+++
-
-a|显卡
-a|AMD/ATI Radeon 9500, NVIDIA GeForce 5 FX, Intel GMA 4500, 或者更高性能的显卡 +最好支持OpenGL 2.0(你下载jMonkeyEngine SDK中包含本地运行库)
-
-a|JDK
-a|JDK 6 或更高 +你的开发团队可以从 link:http://www.java.com[http://www.java.com] 免费下载JDK; 对于 Mac +++<abbr title="Operating System">OS</abbr>+++ 开发者, 请访问link:http://support.apple.com/kb/DL1421[apple.com]. +使用jMonkeyEngine SDK开发游戏,要求至少具备Java中级开发水准。 
-
-|===
-
-我们推荐开发者使用<<sdk#,jMonkeyEngine SDK>>作为游戏开发IDE。但是你也可以选择自己熟悉的第三方IDE来集成jMonkeyEngine框架进行开发,甚至可以使用记事本写代码然后在命令行下编译。对于第三方IDE的软硬件需求,请查看对应IDE的文档。
-
-
-== 用户
-
-下面是用户运行jMonkeyEngine框架开发的游戏所需的最低配置:
-[cols="2", options="header"]
-|===
-
-a|操作系统
-a|Mac +++<abbr title="Operating System">OS</abbr>+++ X, Windows, Linux, Solaris 
-
-a|内存 (JVM heap size)
-a| &gt; 10 +++<abbr title="Megabyte">MB</abbr>+++ ++ 游戏资源所占用的内存(一般包括模型、贴图、声音等) 
-
-a|CPU
-a|&gt; 1 +++<abbr title="Gigahertz">GHz</abbr>+++
-
-a|显卡
-a|AMD/ATI Radeon 9500, NVIDIA GeForce 5 FX, Intel GMA 4500, 或更高性能的显卡 +最好能够支持OpenGL 2.0
-
-a|link:http://jmonkeyengine.org/groups/android/forum/topic/does-my-phone-meet-the-requirements-necessary-to-run-jmonkeyengine-3/[Android 设备]
-a|(玩手游需要) Android 2.2 +++<abbr title="Operating System">OS</abbr>+++, 支持OpenGL 2的显卡
-
-a|Java 运行环境
-a|Java 5 及以上 +你需要JVM来运行jME游戏. +JVM通常需要提前安装。如果你的用户没有安装的话,可以通过 link:http://www.java.com[http://www.java.com] 免费下载; Mac +++<abbr title="Operating System">OS</abbr>+++ 用户请访问link:http://support.apple.com/kb/DL1421[apple.com]. 
-
-|===
-
-请确保你的用户了解上诉需求。
+= jMonkeyEngine3 开发需求
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:relfileprefix: ../../
+:imagesdir: ../../
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]
+
+本文分别从游戏开发者和用户的2种视角,分别介绍使用jMonkeyEngine3所需的软硬件需求。
+
+== 开发者
+
+使用jMonkeyEngine SDK来开发游戏的最低配置需求如下:
+[cols="2", options="header"]
+|===
+
+a|操作系统
+a|Mac +++<abbr title="Operating System">OS</abbr>+++ X, Windows, Linux, Solaris 
+
+a|内存 (JVM heap size)
+a| &gt; 40 +++<abbr title="Megabyte">MB</abbr>+++ ++ 游戏资源所占用的内存 
+
+a|CPU
+a|&gt; 1 +++<abbr title="Gigahertz">GHz</abbr>+++
+
+a|显卡
+a|AMD/ATI Radeon 9500, NVIDIA GeForce 5 FX, Intel GMA 4500, 或者更高性能的显卡 +最好支持OpenGL 2.0(你下载jMonkeyEngine SDK中包含本地运行库)
+
+a|JDK
+a|JDK 6 或更高 +你的开发团队可以从 link:http://www.java.com[http://www.java.com] 免费下载JDK; 对于 Mac +++<abbr title="Operating System">OS</abbr>+++ 开发者, 请访问link:http://support.apple.com/kb/DL1421[apple.com]. +使用jMonkeyEngine SDK开发游戏,要求至少具备Java中级开发水准。 
+
+|===
+
+我们推荐开发者使用<<sdk#,jMonkeyEngine SDK>>作为游戏开发IDE。但是你也可以选择自己熟悉的第三方IDE来集成jMonkeyEngine框架进行开发,甚至可以使用记事本写代码然后在命令行下编译。对于第三方IDE的软硬件需求,请查看对应IDE的文档。
+
+
+== 用户
+
+下面是用户运行jMonkeyEngine框架开发的游戏所需的最低配置:
+[cols="2", options="header"]
+|===
+
+a|操作系统
+a|Mac +++<abbr title="Operating System">OS</abbr>+++ X, Windows, Linux, Solaris 
+
+a|内存 (JVM heap size)
+a| &gt; 10 +++<abbr title="Megabyte">MB</abbr>+++ ++ 游戏资源所占用的内存(一般包括模型、贴图、声音等) 
+
+a|CPU
+a|&gt; 1 +++<abbr title="Gigahertz">GHz</abbr>+++
+
+a|显卡
+a|AMD/ATI Radeon 9500, NVIDIA GeForce 5 FX, Intel GMA 4500, 或更高性能的显卡 +最好能够支持OpenGL 2.0
+
+a|link:http://jmonkeyengine.org/groups/android/forum/topic/does-my-phone-meet-the-requirements-necessary-to-run-jmonkeyengine-3/[Android 设备]
+a|(玩手游需要) Android 2.2 +++<abbr title="Operating System">OS</abbr>+++, 支持OpenGL 2的显卡
+
+a|Java 运行环境
+a|Java 5 及以上 +你需要JVM来运行jME游戏. +JVM通常需要提前安装。如果你的用户没有安装的话,可以通过 link:http://www.java.com[http://www.java.com] 免费下载; Mac +++<abbr title="Operating System">OS</abbr>+++ 用户请访问link:http://support.apple.com/kb/DL1421[apple.com]. 
+
+|===
+
+请确保你的用户了解上诉需求。

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/install/sdk.adoc

@@ -0,0 +1,7 @@
+= SDK
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/install/source_code.adoc

@@ -0,0 +1,7 @@
+= SOURCE CODE
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 333 - 333
src/docs/asciidoc/jme3_zh.adoc → src/docs/asciidoc/zh-Hans-CN/jme3.adoc

@@ -1,333 +1,333 @@
-= jMonkeyEngine 教程 & 文档
-:author: 
-:revnumber: 
-:revdate: 2016/03/17 20:48
-:keywords: documentation, intro, intermediate, about
-ifdef::env-github,env-browser[:outfilesuffix: .adoc]
-
-
-
-== 初级教程
-
-初级教程将介绍一些常见的游戏开发实例,并解释一些基本概念。在正式学习前,请确认自己是否了解<<jme3/terminology#,3D游戏开发的一些基本概念>>,例如<<jme3/the_scene_graph#,场景图>>。如果你不太了解的话,建议先学习“<<jme3/math_for_dummies#,3D数学基础知识>>”以及“<<jme3/scenegraph_for_dummies#,3D场景图的基本概念>>”。
-
-link:https://github.com/jMonkeyEngine/jmonkeyengine/tree/master/jme3-examples/src/main/java/jme3test[所有示例代码]均已包含在jMonkeyEngine SDK中(yan:通过github搜索jMonkeyEngine也能找到源码),你只需要在创建工程时选择`JmeTests`模板,即可查阅这些代码。如果你要自己开发游戏的话,建议在创建工程时选择`BasicGame`模板。
-
-建议读者在学习的过程中把所有的示例代码都编写运行一遍,并且尝试着去修改这些代码,有助于加深对本教程的理解。
-
-
-[IMPORTANT]
-====
- * 使用<<sdk#,jMonkeyEngine SDK>>开发项目时,按F1键可以搜索并浏览本wiki的一份副本,帮助文档的内容与你所使用的SDK版本同步。本wiki随link:https://github.com/jMonkeyEngine/jmonkeyengine[jME3最新版本]同步更新。* 
-====
-
-
-
-image::jme3/beginner/beginner-physics.png[beginner-physics.png,with="360",height="291",align="right"]
-
-
-.  <<jme3/beginner/hello_simpleapplication_zh#,第一个JME3程序>> – 实现一个简单的程序
-..  <<jme3/beginner/hello_node_zh#,节点(Node)>> – 在场景图中改变几何体和节点属性
-..  <<jme3/beginner/hello_asset_zh#,资源(Assets)>> – 加载三维模型、场景和其他的资源
-..  <<jme3/beginner/hello_main_event_loop_zh#,事件循环(Loop)>> – 在事件循环中实现事件控制功能
-..  <<jme3/beginner/hello_input_system_zh#,输入(Input)>> – 对于键盘和鼠标的输入作出响应
-..  <<jme3/beginner/hello_material_zh#,材质(Material)>> – 设置材质、纹理、透明度
-..  <<jme3/beginner/hello_animation_zh#,动画(Animation)>> – 控制动画模型
-..  <<jme3/beginner/hello_picking_zh#,拣选(Picking)>> – 射击、压下按钮、选择、捡起选项
-..  <<jme3/beginner/hello_collision_zh#,碰撞(Collision)>> – 建造墙壁和固体地板
-..  <<jme3/beginner/hello_terrain_zh#,地形(Terrain)>> – 使用贴图创建小山的风景
-..  <<jme3/beginner/hello_audio_zh#,音效(Audio)>> – 按照位置和事件来实现三维音效
-..  <<jme3/beginner/hello_effects_zh#,特效(Effects)>> – 创建粒子特效,比如:火焰、爆炸、魔法
-..  <<jme3/beginner/hello_physics_zh#,物理(Physics)>> – 撞球和坠落的砖头
-..  <<jme3/beginner/hello_vector_zh#,向量(Vector)>> – 可视化向量与向量操作
-..  <<jme3/beginner/hello_chase_camera_zh#,摄像机(Camera)>> – aka的第三人称摄像机示例代码
-
-See also: <<sdk/sample_code#,运行示例代码遇到了问题吗>>?
-
-For more help getting started, check out this tuts+ guide on “link:http://gamedevelopment.tutsplus.com/articles/how-to-learn-jmonkeyengine-3--gamedev-10479[ How to learn jMonkeyEngine 3].
-
-
-== 中级教程
-
-学初级教程后,你已经了解了所有的基本概念,是时候把它们综合起来了。下面这些文章可以帮助你理解如何在实践开发中综合应用这些知识。
-
-*jMonkeyEngine3 概念*
-
-*  <<jme3/intermediate/best_practices#,最佳实践>>
-*  <<jme3/intermediate/simpleapplication#,深入SimpleApplication类>>
-*  <<jme3/intermediate/appsettings#,jME3显示配置>>
-*  <<jme3/intermediate/file_types#,文件类型>>
-*  <<jme3/intermediate/optimization#,优化>>
-*  <<jme3/faq#,常见问题解答(FAQ)>>
-
-*数学概念*
-
-*  <<jme3/math_for_dummies#,jME3数学基础>>
-*  <<jme3/intermediate/math#,Short 3D math &quot;cheat sheet&quot;>>
-*  <<jme3/math#,jME3数学概述>>
-*  <<jme3/math_video_tutorials#,视频: jME3数学系列教程>>
-
-*3D图形学概念*
-
-*  <<jme3/intermediate/multi-media_asset_pipeline#,多媒体资源管道>>
-*  <<jme3/scenegraph_for_dummies#,3D场景图的基本概念>>
-*  <<jme3/terminology#,3D图形学术语>>
-*  <<jme3/intermediate/how_to_use_materials#,如何使用材质>>
-*  <<jme3/intermediate/transparency_sorting#,透明度排序>>
-*  <<jme3/external/blender#,使用Blender创建兼容jME3的模型>>
-*  <<jme3/external/3dsmax#,使用3dsmax创建兼容jME3的模型>>
-
-*游戏教程*
-
-*  link:http://gamedevelopment.tutsplus.com/series/cross-platform-vector-shooter-jmonkeyengine--gamedev-13757[Neon Vector Shooter tutorial on Tuts+]
-
-*视频实例教程*
-- 注意:以下视频中使用了jME 3.1 alpha 版的一些特性
-
-*  link:http://www.youtube.com/watch?v=-OzRZscLlHY[Video: jMonkeyEngine SDK Use Case Demo 1 (Quixote)]
-*  link:http://www.youtube.com/watch?v=6-YWxD3JByE[Video: jMonkeyEngine SDK Use Case Demo 2 (Models and Materials)]
-
-Learn from sample code in link:https://github.com/jMonkeyEngine/jmonkeyengine/tree/master/jme3-examples/src/main/java/jme3test[src/main/java/jme3test] (also available in the sdk by File &gt; New Project &gt; JME3 Tests) and the example games provided by the community!
-
-
-== 进阶教程
-
-现在你已经学会了所有的概念,是时候学习jMonkeyEngine的全部内容了!深入到API中去了解所有的选项,包括那些不太常用的高级方法。但是不要过度延长自己,开发游戏需要时间和奉献精神,一步一个脚印,战士! :)
-
-*控制游戏逻辑*
-
-*  <<jme3/advanced/update_loop#,主循环>>
-*  <<jme3/advanced/application_states#,AppStates>>
-*  <<jme3/advanced/custom_controls#,自定义Control>>
-**  link:http://www.youtube.com/watch?v=MNDiZ9YHIpM[Video: How to control any scene node]
-**  link:http://www.youtube.com/watch?v=-OzRZscLlHY[Video: How to remote control a character in a scene]
-
-*  <<jme3/advanced/multithreading#,多线程>>
-
-*管理3D场景图中的对象*
-
-*  <<jme3/advanced/traverse_scenegraph#,遍历场景图>>
-*  <<jme3/advanced/spatial#,Spatial: Node与Geometry的对比>>
-*  <<jme3/advanced/mesh#,网格>>
-**  <<jme3/advanced/shape#,形状>>
-**  <<jme3/advanced/3d_models#,3D模型>>
-**  <<jme3/advanced/custom_meshes#,自定义网格>>
-
-*  <<jme3/advanced/asset_manager#,资源管理器>>
-*  <<jme3/advanced/save_and_load#,读写节点数据(.J3O文件)>>
-*  <<jme3/advanced/collision_and_intersection#,碰撞与交点>>
-*  <<jme3/advanced/level_of_detail#,层次细节(LOD)>>
-
-*动画和场景*
-
-*  <<jme3/advanced/animation#,Animation>>
-*  <<jme3/advanced/cinematics#,Cinematics (cutscenes, fake destruction physics)>>
-*  <<jme3/advanced/motionpath#,MotionPaths and waypoints>>
-*  <<jme3/external/blender#,Creating jME3 compatible 3D models in Blender>>
-*  <<jme3/advanced/makehuman_blender_ogrexml_toolchain#,MakeHuman Blender OgreXML toolchain for creating and importing animated human characters>>
-*  <<sdk/blender#,Converting Blender Models to JME3 (.J3o files)>>
-**  link:https://www.youtube.com/watch?v=QiLCs4AKh28[Video: Import animated models from Blender 2.6 to JME3]
-**  link:http://www.youtube.com/watch?v=NdjC9sCRV0s[Video: Creating and Exporting OgreXML Animations from Blender 2.61 to JME3]
-**  link:https://docs.google.com/fileview?id=0B9hhZie2D-fENDBlZDU5MzgtNzlkYi00YmQzLTliNTQtNzZhYTJhYjEzNWNk&hl=en[Scene Workflow:]
-
-
-Create jme3 compatible racing tracks in blender
-* link:http://www.youtube.com/watch?v=3481ueuDJwQ&feature=youtu.be[Video: Create jme3 compatible models in blender]
-
-Exporting OgreXML scenes from Blender to JME3
-
-*  link:https://docs.google.com/leaf?id=0B9hhZie2D-fEYmRkMTYwN2YtMzQ0My00NTM4LThhOTYtZTk1MTRlYTNjYTc3&hl=en[Animation Workflow: Create Animated UV-Mapped OgreXML Models in Blender, and use them in JME3]
-**  link:http://www.youtube.com/watch?v=IDHMWsu_PqA[Video: Creating Worlds with Instances in Blender]
-**  <<jme3/advanced/ogrecompatibility#,OgreCompatibility>>
-
-*材质、光影*
-
-*  <<jme3/intermediate/how_to_use_materials#,How to Use Materials>>
-*  <<jme3/advanced/j3m_material_files#,Creating .j3m Materials>>
-*  <<jme3/advanced/material_definitions#,How to Use Material Definitions (.j3md)>>
-*  <<jme3/advanced/materials_overview#,All Material Definition Properties>>
-*  <<jme3/advanced/anisotropic_filtering#,Anisotropic Filtering for Textures>>
-*  <<jme3/advanced/light_and_shadow#,Light and Shadow>>
-*  <<jme3/advanced/jme3_shaders#,About JME3 and Shaders>>
-*  <<jme3/advanced/jme3_shadernodes#,Shader Node System>>
-*  <<jme3/advanced/jme3_srgbpipeline#,Gamma correction or sRGB pipeline>>
-*  <<jme3/shader_video_tutorials#,Videos: jME3 introduction to shaders video tutorial series>>
-*  link:http://www.youtube.com/watch?v=IuEMUFwdheE[Video: jME3 Material with Alpha Channel]
-
-*物理集成*
-
-*  <<jme3/advanced/physics#,Physics: Gravity, Collisions, Forces>>
-*  <<jme3/advanced/bullet_multithreading#,Multi-Threaded Physics>>
-*  <<jme3/advanced/physics_listeners#,Physics Listeners and Collision Detection>>
-*  <<jme3/advanced/hinges_and_joints#,Hinges and Joints>>
-*  <<jme3/advanced/walking_character#,Walking Character>>
-*  <<jme3/advanced/ragdoll#,Ragdoll>>
-*  <<jme3/advanced/vehicles#,Vehicles>>
-*  <<jme3/advanced/ray_and_sweep_tests#,Physics Rays and Sweep Tests>>
-*  link:http://www.youtube.com/watch?v=yS9a9o4WzL8[Video: Mesh Tool &amp; Physics Editor]
-
-*音频和视频*
-
-*  <<jme3/advanced/audio#,Audio: Playing Sounds>>
-*  <<jme3/advanced/audio_environment_presets#,Audio Environment Presets>>
-*  <<jme3/advanced/video#,Video: Playing Clips>>
-*  <<jme3/advanced/screenshots#,Capture Screenshots>>
-*  <<jme3/advanced/capture_audio_video_to_a_file#,Capture Audio/Video to a File>>
-
-*后置处理过滤器与特效*
-
-*  <<jme3/advanced/effects_overview#,Effects and Filters Overview>>
-*  <<jme3/advanced/bloom_and_glow#,Bloom and Glow>>
-*  <<jme3/advanced/particle_emitters#,Particle Emitters>>
-
-*地形*
-
-*  <<jme3/advanced/sky#,Sky>>
-*  <<jme3/advanced/terrain#,Terrain (TerraMonkey)>>
-*  <<jme3/advanced/endless_terraingrid#,Endless Terrain (TerrainGrid)>>
-*  <<jme3/advanced/terrain_collision#,Terrain Collision>>
-*  <<jme3/contributions/cubes#,Cubes - A Block World Framework>>
-*  <<jme3/advanced/water#,Simple Water>>
-*  <<jme3/advanced/post-processor_water#,Post-Processor Water (SeaMonkey)>>
-*  <<jme3/contributions/vegetationsystem#,Vegetation System>>
-
-*人工智能(AI)*
-
-*  <<jme3/advanced/recast#,Recast Navigation>>
-*  <<jme3/advanced/building_recast#,Updating and building Recast Native Bindings>>
-*  <<jme3/advanced/monkey_brains#,Monkey Brains>>
-*  <<jme3/advanced/steer_behaviours#,Steer Behaviours>>
-
-*多人联网游戏*
-
-*  <<jme3/advanced/networking#,Multiplayer Networking (SpiderMonkey)>>
-*  <<jme3/advanced/headless_server#,Headless Server>>
-*  <<jme3/advanced/monkey_zone#,Monkey Zone: Multi-Player Demo Code>>
-*  <<jme3/advanced/open_game_finder#,Open Game Finder>>
-*  <<jme3/advanced/networking_video_tutorials#,Videos: jME3 networking video tutorial series>> 
-
-*实体系统*
-
-*  <<jme3/contributions/entitysystem#, The Zay-ES Entity System>>
-
-*摄像机*
-
-*  <<jme3/advanced/camera#,Camera>>
-*  <<jme3/advanced/making_the_camera_follow_a_character#,Making the Camera Follow a Character>>
-*  <<jme3/advanced/remote-controlling_the_camera#,Remote-Controlling the Camera>>
-*  <<jme3/advanced/multiple_camera_views#,Multiple Camera Views>> 
-
-*用户交互*
-
-*  <<jme3/advanced/input_handling#,Input Handling>>
-**  link:https://github.com/jMonkeyEngine-Contributions/Lemur/wiki/Modules[Lemur Scene Graph Tools]
-***  link:http://hub.jmonkeyengine.org/t/lemur-gems-1-inputmapper-based-camera-movement/28703[Lemur Gems #1 - Input mapper based camera movement. ]
-***  link:http://hub.jmonkeyengine.org/t/lemur-gems-2-inputmapper-delegates/28710[Lemur Gems #2 - Input mapper delegates]
-***  link:http://hub.jmonkeyengine.org/t/lemur-gems-3-scene-picking/28713[Lemur Gems #3 - Scene picking]
-
-
-*  <<jme3/advanced/combo_moves#,Combo Moves>>
-*  <<jme3/advanced/mouse_picking#,Mouse Picking: Click to Select>>
-
-*图形用户界面(+++<abbr title="Graphical User Interface">GUI</abbr>+++)*
-
-*  link:https://github.com/jMonkeyEngine-Contributions/Lemur[Lemur - a native jME3 GUI library with scene graph tools]
-*  <<jme3/contributions/tonegodgui#,tonegodGUI - a native jME3 GUI library>>
-*  <<jme3/advanced/nifty_gui#,Nifty GUI - JME3 Integration Tutorial>>
-*  <<jme3/advanced/nifty_gui_best_practices#,Nifty GUI - Best Practices>>
-*  <<jme3/advanced/nifty_gui_scenarios#,Nifty GUI Scenarios (Load Screen etc)>>
-*  <<jme3/advanced/hud#,Head-Up Display (HUD)>>
-*  <<jme3/advanced/localization#,Localization>>
-*  <<jme3/advanced/swing_canvas#,Swing Canvas>>
-
-*自定义渲染*
-
-*  <<jme3/advanced/jme3_forwardrendering#,Forward Rendering process>>
-*  <<jme3/advanced/jme3_renderbuckets#,Render Buckets>>
-
-*自定义工具*
-
-*  <<jme3/tools/navigation#,Mercator Projection Tool (Marine Navigation)>>
-*  <<jme3/tools/charts#,Visualizing Maps in JME3 (Marine Charts)>>
-*  <<jme3/advanced/atom_framework#,Atom framework. Mash-up of other plugins>>
-
-*日志与调试*
-
-*  <<jme3/advanced/logging#,Logging>>
-*  <<sdk/log_files#,Log Files>>
-*  <<jme3/advanced/read_graphic_card_capabilites#,Read Graphic Card Capabilites>>
-*  <<jme3/advanced/debugging#,Debugging with Wireframes>>
-
-*Android项目开发*
-
-*  <<jme3/advanced/android#,Android Project Cheat Sheet>>
-
-*项目部署*
-
-*  <<jme3/android#,Android>>
-*  <<sdk/application_deployment#,Application Deployment (using jMonkeyEngine SDK)>>
-*  <<jme3/webstart#,WebStart Deployment (without jMonkeyEngine SDK)>>
-
-*脚本*
-
-*  <<jme3/scripting#, Groovy 脚本语言>>
-
-*虚拟现实&amp;模拟器*
-
-*  <<jme3/virtualreality#, Virtual Reality. OpenCV &amp; JavaCV>>
-
-*jMonkey User Contributions*
-
-*  <<jme3/contributions#, Contributions - User made utilities to add functionality to the engine.>>
-
-*Sample Projects*
-
-*  <<sdk/sample_code#,JmeTests>> – The “official sample project JmeTests.
-*  link:http://code.google.com/p/jmonkeyengine/source/browse/BookSamples/#BookSamples%2Fsrc[BookSamples] – Some more jME3 code samples
-
-These code examples are not supported by the core team and we cannot guarantee their correctness:
-
-*  <<jme3/user_examples_project#,User Examples Project>> – The jME3 users examples project.
-*  <<jme3/shaderblow_project#,ShaderBlow Project>> – The jME3 users shaders project.
-*  <<jme3/rise_of_mutants_project#,Rise of Mutants Project>> – Rise of Mutants Project by BigBoots Team.
-*  <<jme3/atomixtuts#,atomixtuts>> – Atomix Tutorial Series
-*  link:http://code.google.com/p/street-rally-3d/source/browse/#svn%2Ftrunk%2Fsrc%2Fsr3d[Street rally 3d source code] – A racing game programmed by rhymez.
-
-
-== SDK Documentation
-
-
-image::sdk/jmonkeyplatform-docu-2.png[jmonkeyplatform-docu-2.png,with="420",height="300",align="right"]
-
-
-The <<sdk#,jMonkeyEngine SDK>> is our recommended game development environment.
-
-*  <<sdk/comic#,jMonkeyEngine SDK - the Comic>>
-*  <<sdk#,SDK Documentation (All editors, plugins, etc)>>
-
-Here are some videos of how the jMonkeyEngine SDK makes your development team's life easier:
-
-*  link:http://www.youtube.com/watch?v=nL7woH40i5c[Video: Importing Models]
-*  link:http://www.youtube.com/watch?v=ntPAmtsQ6eM[Video: Scene Composing]
-*  link:http://www.youtube.com/watch?v=DUmgAjiNzhY[Video: Dragging&amp;Dropping Nodes]
-*  link:http://www.youtube.com/watch?v=Feu3-mrpolc[Video: Working with Materials]
-*  link:http://www.youtube.com/watch?v=oZnssg8TBWQ[Video: WebStart Deployment]
-*  link:http://www.youtube.com/watch?v=MNDiZ9YHIpM[Video: Custom Controls]
-*  Read the <<sdk#,SDK documentation>> for details.
-
-
-== 下载和安装JME3
-
-*  <<bsd_license#,Use jMonkeyEngine 3 for free under the BSD License>>
-*  <<jme3/requirements#,Software and hardware requirements>>
-*  <<jme3/features#,All Supported Features>>
-*  <</#Installation,Download jMonkeyEngine 3 SDK>>
-
-
-== Feedback
-
-jME3 is in development; if a tutorial doesn't work as expected, try using the latest daily build. If that doesn't “fix it then:
-
-*  link:http://code.google.com/p/jmonkeyengine/issues/list?can=2&q=label:Component-Docs[Report a Documentation Task]
-*  <<report_bugs#,Report a Bug>>
-*  link:http://jmonkeyengine.org/forums[Ask (and Answer!) Questions on the Forum]
+= jMonkeyEngine 教程 & 文档
+:author: 
+:revnumber: 
+:revdate: 2016/03/17 20:48
+:keywords: documentation, intro, intermediate, about
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]
+
+
+
+== 初级教程
+
+初级教程将介绍一些常见的游戏开发实例,并解释一些基本概念。在正式学习前,请确认自己是否了解<<jme3/terminology#,3D游戏开发的一些基本概念>>,例如<<jme3/the_scene_graph#,场景图>>。如果你不太了解的话,建议先学习“<<jme3/math_for_dummies#,3D数学基础知识>>”以及“<<jme3/scenegraph_for_dummies#,3D场景图的基本概念>>”。
+
+link:https://github.com/jMonkeyEngine/jmonkeyengine/tree/master/jme3-examples/src/main/java/jme3test[所有示例代码]均已包含在jMonkeyEngine SDK中(yan:通过github搜索jMonkeyEngine也能找到源码),你只需要在创建工程时选择`JmeTests`模板,即可查阅这些代码。如果你要自己开发游戏的话,建议在创建工程时选择`BasicGame`模板。
+
+建议读者在学习的过程中把所有的示例代码都编写运行一遍,并且尝试着去修改这些代码,有助于加深对本教程的理解。
+
+
+[IMPORTANT]
+====
+ * 使用<<sdk#,jMonkeyEngine SDK>>开发项目时,按F1键可以搜索并浏览本wiki的一份副本,帮助文档的内容与你所使用的SDK版本同步。本wiki随link:https://github.com/jMonkeyEngine/jmonkeyengine[jME3最新版本]同步更新。* 
+====
+
+
+
+image::jme3/beginner/beginner-physics.png[beginner-physics.png,with="360",height="291",align="right"]
+
+
+.  <<jme3/beginner/hello_simpleapplication_zh#,第一个JME3程序>> – 实现一个简单的程序
+..  <<jme3/beginner/hello_node_zh#,节点(Node)>> – 在场景图中改变几何体和节点属性
+..  <<jme3/beginner/hello_asset_zh#,资源(Assets)>> – 加载三维模型、场景和其他的资源
+..  <<jme3/beginner/hello_main_event_loop_zh#,事件循环(Loop)>> – 在事件循环中实现事件控制功能
+..  <<jme3/beginner/hello_input_system_zh#,输入(Input)>> – 对于键盘和鼠标的输入作出响应
+..  <<jme3/beginner/hello_material_zh#,材质(Material)>> – 设置材质、纹理、透明度
+..  <<jme3/beginner/hello_animation_zh#,动画(Animation)>> – 控制动画模型
+..  <<jme3/beginner/hello_picking_zh#,拣选(Picking)>> – 射击、压下按钮、选择、捡起选项
+..  <<jme3/beginner/hello_collision_zh#,碰撞(Collision)>> – 建造墙壁和固体地板
+..  <<jme3/beginner/hello_terrain_zh#,地形(Terrain)>> – 使用贴图创建小山的风景
+..  <<jme3/beginner/hello_audio_zh#,音效(Audio)>> – 按照位置和事件来实现三维音效
+..  <<jme3/beginner/hello_effects_zh#,特效(Effects)>> – 创建粒子特效,比如:火焰、爆炸、魔法
+..  <<jme3/beginner/hello_physics_zh#,物理(Physics)>> – 撞球和坠落的砖头
+..  <<jme3/beginner/hello_vector_zh#,向量(Vector)>> – 可视化向量与向量操作
+..  <<jme3/beginner/hello_chase_camera_zh#,摄像机(Camera)>> – aka的第三人称摄像机示例代码
+
+See also: <<sdk/sample_code#,运行示例代码遇到了问题吗>>?
+
+For more help getting started, check out this tuts+ guide on “link:http://gamedevelopment.tutsplus.com/articles/how-to-learn-jmonkeyengine-3--gamedev-10479[ How to learn jMonkeyEngine 3].
+
+
+== 中级教程
+
+学初级教程后,你已经了解了所有的基本概念,是时候把它们综合起来了。下面这些文章可以帮助你理解如何在实践开发中综合应用这些知识。
+
+*jMonkeyEngine3 概念*
+
+*  <<jme3/intermediate/best_practices#,最佳实践>>
+*  <<jme3/intermediate/simpleapplication#,深入SimpleApplication类>>
+*  <<jme3/intermediate/appsettings#,jME3显示配置>>
+*  <<jme3/intermediate/file_types#,文件类型>>
+*  <<jme3/intermediate/optimization#,优化>>
+*  <<jme3/faq#,常见问题解答(FAQ)>>
+
+*数学概念*
+
+*  <<jme3/math_for_dummies#,jME3数学基础>>
+*  <<jme3/intermediate/math#,Short 3D math &quot;cheat sheet&quot;>>
+*  <<jme3/math#,jME3数学概述>>
+*  <<jme3/math_video_tutorials#,视频: jME3数学系列教程>>
+
+*3D图形学概念*
+
+*  <<jme3/intermediate/multi-media_asset_pipeline#,多媒体资源管道>>
+*  <<jme3/scenegraph_for_dummies#,3D场景图的基本概念>>
+*  <<jme3/terminology#,3D图形学术语>>
+*  <<jme3/intermediate/how_to_use_materials#,如何使用材质>>
+*  <<jme3/intermediate/transparency_sorting#,透明度排序>>
+*  <<jme3/external/blender#,使用Blender创建兼容jME3的模型>>
+*  <<jme3/external/3dsmax#,使用3dsmax创建兼容jME3的模型>>
+
+*游戏教程*
+
+*  link:http://gamedevelopment.tutsplus.com/series/cross-platform-vector-shooter-jmonkeyengine--gamedev-13757[Neon Vector Shooter tutorial on Tuts+]
+
+*视频实例教程*
+- 注意:以下视频中使用了jME 3.1 alpha 版的一些特性
+
+*  link:http://www.youtube.com/watch?v=-OzRZscLlHY[Video: jMonkeyEngine SDK Use Case Demo 1 (Quixote)]
+*  link:http://www.youtube.com/watch?v=6-YWxD3JByE[Video: jMonkeyEngine SDK Use Case Demo 2 (Models and Materials)]
+
+Learn from sample code in link:https://github.com/jMonkeyEngine/jmonkeyengine/tree/master/jme3-examples/src/main/java/jme3test[src/main/java/jme3test] (also available in the sdk by File &gt; New Project &gt; JME3 Tests) and the example games provided by the community!
+
+
+== 进阶教程
+
+现在你已经学会了所有的概念,是时候学习jMonkeyEngine的全部内容了!深入到API中去了解所有的选项,包括那些不太常用的高级方法。但是不要过度延长自己,开发游戏需要时间和奉献精神,一步一个脚印,战士! :)
+
+*控制游戏逻辑*
+
+*  <<jme3/advanced/update_loop#,主循环>>
+*  <<jme3/advanced/application_states#,AppStates>>
+*  <<jme3/advanced/custom_controls#,自定义Control>>
+**  link:http://www.youtube.com/watch?v=MNDiZ9YHIpM[Video: How to control any scene node]
+**  link:http://www.youtube.com/watch?v=-OzRZscLlHY[Video: How to remote control a character in a scene]
+
+*  <<jme3/advanced/multithreading#,多线程>>
+
+*管理3D场景图中的对象*
+
+*  <<jme3/advanced/traverse_scenegraph#,遍历场景图>>
+*  <<jme3/advanced/spatial#,Spatial: Node与Geometry的对比>>
+*  <<jme3/advanced/mesh#,网格>>
+**  <<jme3/advanced/shape#,形状>>
+**  <<jme3/advanced/3d_models#,3D模型>>
+**  <<jme3/advanced/custom_meshes#,自定义网格>>
+
+*  <<jme3/advanced/asset_manager#,资源管理器>>
+*  <<jme3/advanced/save_and_load#,读写节点数据(.J3O文件)>>
+*  <<jme3/advanced/collision_and_intersection#,碰撞与交点>>
+*  <<jme3/advanced/level_of_detail#,层次细节(LOD)>>
+
+*动画和场景*
+
+*  <<jme3/advanced/animation#,Animation>>
+*  <<jme3/advanced/cinematics#,Cinematics (cutscenes, fake destruction physics)>>
+*  <<jme3/advanced/motionpath#,MotionPaths and waypoints>>
+*  <<jme3/external/blender#,Creating jME3 compatible 3D models in Blender>>
+*  <<jme3/advanced/makehuman_blender_ogrexml_toolchain#,MakeHuman Blender OgreXML toolchain for creating and importing animated human characters>>
+*  <<sdk/blender#,Converting Blender Models to JME3 (.J3o files)>>
+**  link:https://www.youtube.com/watch?v=QiLCs4AKh28[Video: Import animated models from Blender 2.6 to JME3]
+**  link:http://www.youtube.com/watch?v=NdjC9sCRV0s[Video: Creating and Exporting OgreXML Animations from Blender 2.61 to JME3]
+**  link:https://docs.google.com/fileview?id=0B9hhZie2D-fENDBlZDU5MzgtNzlkYi00YmQzLTliNTQtNzZhYTJhYjEzNWNk&hl=en[Scene Workflow:]
+
+
+Create jme3 compatible racing tracks in blender
+* link:http://www.youtube.com/watch?v=3481ueuDJwQ&feature=youtu.be[Video: Create jme3 compatible models in blender]
+
+Exporting OgreXML scenes from Blender to JME3
+
+*  link:https://docs.google.com/leaf?id=0B9hhZie2D-fEYmRkMTYwN2YtMzQ0My00NTM4LThhOTYtZTk1MTRlYTNjYTc3&hl=en[Animation Workflow: Create Animated UV-Mapped OgreXML Models in Blender, and use them in JME3]
+**  link:http://www.youtube.com/watch?v=IDHMWsu_PqA[Video: Creating Worlds with Instances in Blender]
+**  <<jme3/advanced/ogrecompatibility#,OgreCompatibility>>
+
+*材质、光影*
+
+*  <<jme3/intermediate/how_to_use_materials#,How to Use Materials>>
+*  <<jme3/advanced/j3m_material_files#,Creating .j3m Materials>>
+*  <<jme3/advanced/material_definitions#,How to Use Material Definitions (.j3md)>>
+*  <<jme3/advanced/materials_overview#,All Material Definition Properties>>
+*  <<jme3/advanced/anisotropic_filtering#,Anisotropic Filtering for Textures>>
+*  <<jme3/advanced/light_and_shadow#,Light and Shadow>>
+*  <<jme3/advanced/jme3_shaders#,About JME3 and Shaders>>
+*  <<jme3/advanced/jme3_shadernodes#,Shader Node System>>
+*  <<jme3/advanced/jme3_srgbpipeline#,Gamma correction or sRGB pipeline>>
+*  <<jme3/shader_video_tutorials#,Videos: jME3 introduction to shaders video tutorial series>>
+*  link:http://www.youtube.com/watch?v=IuEMUFwdheE[Video: jME3 Material with Alpha Channel]
+
+*物理集成*
+
+*  <<jme3/advanced/physics#,Physics: Gravity, Collisions, Forces>>
+*  <<jme3/advanced/bullet_multithreading#,Multi-Threaded Physics>>
+*  <<jme3/advanced/physics_listeners#,Physics Listeners and Collision Detection>>
+*  <<jme3/advanced/hinges_and_joints#,Hinges and Joints>>
+*  <<jme3/advanced/walking_character#,Walking Character>>
+*  <<jme3/advanced/ragdoll#,Ragdoll>>
+*  <<jme3/advanced/vehicles#,Vehicles>>
+*  <<jme3/advanced/ray_and_sweep_tests#,Physics Rays and Sweep Tests>>
+*  link:http://www.youtube.com/watch?v=yS9a9o4WzL8[Video: Mesh Tool &amp; Physics Editor]
+
+*音频和视频*
+
+*  <<jme3/advanced/audio#,Audio: Playing Sounds>>
+*  <<jme3/advanced/audio_environment_presets#,Audio Environment Presets>>
+*  <<jme3/advanced/video#,Video: Playing Clips>>
+*  <<jme3/advanced/screenshots#,Capture Screenshots>>
+*  <<jme3/advanced/capture_audio_video_to_a_file#,Capture Audio/Video to a File>>
+
+*后置处理过滤器与特效*
+
+*  <<jme3/advanced/effects_overview#,Effects and Filters Overview>>
+*  <<jme3/advanced/bloom_and_glow#,Bloom and Glow>>
+*  <<jme3/advanced/particle_emitters#,Particle Emitters>>
+
+*地形*
+
+*  <<jme3/advanced/sky#,Sky>>
+*  <<jme3/advanced/terrain#,Terrain (TerraMonkey)>>
+*  <<jme3/advanced/endless_terraingrid#,Endless Terrain (TerrainGrid)>>
+*  <<jme3/advanced/terrain_collision#,Terrain Collision>>
+*  <<jme3/contributions/cubes#,Cubes - A Block World Framework>>
+*  <<jme3/advanced/water#,Simple Water>>
+*  <<jme3/advanced/post-processor_water#,Post-Processor Water (SeaMonkey)>>
+*  <<jme3/contributions/vegetationsystem#,Vegetation System>>
+
+*人工智能(AI)*
+
+*  <<jme3/advanced/recast#,Recast Navigation>>
+*  <<jme3/advanced/building_recast#,Updating and building Recast Native Bindings>>
+*  <<jme3/advanced/monkey_brains#,Monkey Brains>>
+*  <<jme3/advanced/steer_behaviours#,Steer Behaviours>>
+
+*多人联网游戏*
+
+*  <<jme3/advanced/networking#,Multiplayer Networking (SpiderMonkey)>>
+*  <<jme3/advanced/headless_server#,Headless Server>>
+*  <<jme3/advanced/monkey_zone#,Monkey Zone: Multi-Player Demo Code>>
+*  <<jme3/advanced/open_game_finder#,Open Game Finder>>
+*  <<jme3/advanced/networking_video_tutorials#,Videos: jME3 networking video tutorial series>> 
+
+*实体系统*
+
+*  <<jme3/contributions/entitysystem#, The Zay-ES Entity System>>
+
+*摄像机*
+
+*  <<jme3/advanced/camera#,Camera>>
+*  <<jme3/advanced/making_the_camera_follow_a_character#,Making the Camera Follow a Character>>
+*  <<jme3/advanced/remote-controlling_the_camera#,Remote-Controlling the Camera>>
+*  <<jme3/advanced/multiple_camera_views#,Multiple Camera Views>> 
+
+*用户交互*
+
+*  <<jme3/advanced/input_handling#,Input Handling>>
+**  link:https://github.com/jMonkeyEngine-Contributions/Lemur/wiki/Modules[Lemur Scene Graph Tools]
+***  link:http://hub.jmonkeyengine.org/t/lemur-gems-1-inputmapper-based-camera-movement/28703[Lemur Gems #1 - Input mapper based camera movement. ]
+***  link:http://hub.jmonkeyengine.org/t/lemur-gems-2-inputmapper-delegates/28710[Lemur Gems #2 - Input mapper delegates]
+***  link:http://hub.jmonkeyengine.org/t/lemur-gems-3-scene-picking/28713[Lemur Gems #3 - Scene picking]
+
+
+*  <<jme3/advanced/combo_moves#,Combo Moves>>
+*  <<jme3/advanced/mouse_picking#,Mouse Picking: Click to Select>>
+
+*图形用户界面(+++<abbr title="Graphical User Interface">GUI</abbr>+++)*
+
+*  link:https://github.com/jMonkeyEngine-Contributions/Lemur[Lemur - a native jME3 GUI library with scene graph tools]
+*  <<jme3/contributions/tonegodgui#,tonegodGUI - a native jME3 GUI library>>
+*  <<jme3/advanced/nifty_gui#,Nifty GUI - JME3 Integration Tutorial>>
+*  <<jme3/advanced/nifty_gui_best_practices#,Nifty GUI - Best Practices>>
+*  <<jme3/advanced/nifty_gui_scenarios#,Nifty GUI Scenarios (Load Screen etc)>>
+*  <<jme3/advanced/hud#,Head-Up Display (HUD)>>
+*  <<jme3/advanced/localization#,Localization>>
+*  <<jme3/advanced/swing_canvas#,Swing Canvas>>
+
+*自定义渲染*
+
+*  <<jme3/advanced/jme3_forwardrendering#,Forward Rendering process>>
+*  <<jme3/advanced/jme3_renderbuckets#,Render Buckets>>
+
+*自定义工具*
+
+*  <<jme3/tools/navigation#,Mercator Projection Tool (Marine Navigation)>>
+*  <<jme3/tools/charts#,Visualizing Maps in JME3 (Marine Charts)>>
+*  <<jme3/advanced/atom_framework#,Atom framework. Mash-up of other plugins>>
+
+*日志与调试*
+
+*  <<jme3/advanced/logging#,Logging>>
+*  <<sdk/log_files#,Log Files>>
+*  <<jme3/advanced/read_graphic_card_capabilites#,Read Graphic Card Capabilites>>
+*  <<jme3/advanced/debugging#,Debugging with Wireframes>>
+
+*Android项目开发*
+
+*  <<jme3/advanced/android#,Android Project Cheat Sheet>>
+
+*项目部署*
+
+*  <<jme3/android#,Android>>
+*  <<sdk/application_deployment#,Application Deployment (using jMonkeyEngine SDK)>>
+*  <<jme3/webstart#,WebStart Deployment (without jMonkeyEngine SDK)>>
+
+*脚本*
+
+*  <<jme3/scripting#, Groovy 脚本语言>>
+
+*虚拟现实&amp;模拟器*
+
+*  <<jme3/virtualreality#, Virtual Reality. OpenCV &amp; JavaCV>>
+
+*jMonkey User Contributions*
+
+*  <<jme3/contributions#, Contributions - User made utilities to add functionality to the engine.>>
+
+*Sample Projects*
+
+*  <<sdk/sample_code#,JmeTests>> – The “official sample project JmeTests.
+*  link:http://code.google.com/p/jmonkeyengine/source/browse/BookSamples/#BookSamples%2Fsrc[BookSamples] – Some more jME3 code samples
+
+These code examples are not supported by the core team and we cannot guarantee their correctness:
+
+*  <<jme3/user_examples_project#,User Examples Project>> – The jME3 users examples project.
+*  <<jme3/shaderblow_project#,ShaderBlow Project>> – The jME3 users shaders project.
+*  <<jme3/rise_of_mutants_project#,Rise of Mutants Project>> – Rise of Mutants Project by BigBoots Team.
+*  <<jme3/atomixtuts#,atomixtuts>> – Atomix Tutorial Series
+*  link:http://code.google.com/p/street-rally-3d/source/browse/#svn%2Ftrunk%2Fsrc%2Fsr3d[Street rally 3d source code] – A racing game programmed by rhymez.
+
+
+== SDK Documentation
+
+
+image::sdk/jmonkeyplatform-docu-2.png[jmonkeyplatform-docu-2.png,with="420",height="300",align="right"]
+
+
+The <<sdk#,jMonkeyEngine SDK>> is our recommended game development environment.
+
+*  <<sdk/comic#,jMonkeyEngine SDK - the Comic>>
+*  <<sdk#,SDK Documentation (All editors, plugins, etc)>>
+
+Here are some videos of how the jMonkeyEngine SDK makes your development team's life easier:
+
+*  link:http://www.youtube.com/watch?v=nL7woH40i5c[Video: Importing Models]
+*  link:http://www.youtube.com/watch?v=ntPAmtsQ6eM[Video: Scene Composing]
+*  link:http://www.youtube.com/watch?v=DUmgAjiNzhY[Video: Dragging&amp;Dropping Nodes]
+*  link:http://www.youtube.com/watch?v=Feu3-mrpolc[Video: Working with Materials]
+*  link:http://www.youtube.com/watch?v=oZnssg8TBWQ[Video: WebStart Deployment]
+*  link:http://www.youtube.com/watch?v=MNDiZ9YHIpM[Video: Custom Controls]
+*  Read the <<sdk#,SDK documentation>> for details.
+
+
+== 下载和安装JME3
+
+*  <<bsd_license#,Use jMonkeyEngine 3 for free under the BSD License>>
+*  <<jme3/requirements#,Software and hardware requirements>>
+*  <<jme3/features#,All Supported Features>>
+*  <</#Installation,Download jMonkeyEngine 3 SDK>>
+
+
+== Feedback
+
+jME3 is in development; if a tutorial doesn't work as expected, try using the latest daily build. If that doesn't “fix it then:
+
+*  link:http://code.google.com/p/jmonkeyengine/issues/list?can=2&q=label:Component-Docs[Report a Documentation Task]
+*  <<report_bugs#,Report a Bug>>
+*  link:http://jmonkeyengine.org/forums[Ask (and Answer!) Questions on the Forum]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/animation/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/asset_pipeline/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/audio/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/game_logic/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/graphics_pipeline/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/gui/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/input/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/light_shadow/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/material/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/math/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/networking/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/particle_system/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/physics/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/post_processor/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/scenegraph/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/shader/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/advanced/terrain/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_animation.adoc

@@ -0,0 +1,7 @@
+= HELLO ANIMATION
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_asset.adoc

@@ -0,0 +1,7 @@
+= HELLO ASSET
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_audio.adoc

@@ -0,0 +1,7 @@
+= HELLO AUDIO
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_collision.adoc

@@ -0,0 +1,7 @@
+= HELLO COLLISION
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_effects.adoc

@@ -0,0 +1,7 @@
+= HELLO EFFECTS
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_input.adoc

@@ -0,0 +1,7 @@
+= HELLO INPUT
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_loop.adoc

@@ -0,0 +1,7 @@
+= HELLO LOOP
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_material.adoc

@@ -0,0 +1,7 @@
+= HELLO MATERIAL
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_node.adoc

@@ -0,0 +1,7 @@
+= HELLO NODE
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_physics.adoc

@@ -0,0 +1,7 @@
+= HELLO PHYSICS
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_picking.adoc

@@ -0,0 +1,7 @@
+= HELLO PICKING
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_simpleapplication.adoc

@@ -0,0 +1,7 @@
+= HELLO SIMPLEAPPLICATION
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/hello_terrain.adoc

@@ -0,0 +1,7 @@
+= HELLO TERRAIN
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/beginners/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 338 - 333
src/docs/asciidoc/jme3/terminology_zh.adoc → src/docs/asciidoc/zh-Hans-CN/jme3/terminology.adoc

@@ -1,333 +1,338 @@
-= 3D游戏开发术语
-
-版本 2016/08/17 20:48
-
-开始学习之前,确保你熟知如下概念和术语。
-
-== 3D图形和音频
-
-**+++<abbr title="Open Graphics Library">OpenGL</abbr>+++** 即开放式图形库,是一个用来渲染二维或三维计算机图形的跨平台的专业图形程序接口。对于Java来说,有两种基于OpenGL实现的渲染器。
-
-. 轻量级Java游戏库 (LWJGL)
-. Java开放图形库 (JOGL)
-
-**+++<abbr title="Open Audio Library">OpenAL</abbr>+++** 即开放式音频库,是一个跨平台的3D音频程序接口。
-
-== 环境,显示,渲染器
-jME环境(Context)为JME3游戏提供了所需的一切,包括:配置管理、渲染器、计时器、输入监听器、事件监听器和显示系统。
-
-* **jME显示系统** 替代了Java Swing组件,用于绘制jME自定义窗口。
-
-* **输入系统** 可以让你对用户输入做出反应,包括:鼠标点击、鼠标滑动、键盘输入、手柄操作等。
-
-* **渲染器(Renderer)** 用于处理将3D场景图绘制到2D屏幕上的所有计算工作。
-
-** **染色器(Shader)**是整个渲染管线的编程部分,jME3游戏引擎用它制作高级自定义材质。
-
-== 几何(Geometry)
-
-=== 多边形,网格,顶点
-image:http://bbs.jmecn.net/uploads/default/original/1X/bc97a93e8c8168db86c9ad50dc739f9e18969be1.png[模型(例如此处的海豚)由多边形网格组成]
-
-3D场景里大部分的可见物体都是由多边形网格组成的——角色、地形、建筑等等。网格(Mesh)是一种可以表达复杂形状的网状结构。网格的优点是,从数学角度讲足够简单,可以实时处理形状变化,细节上也足够辨认该物体。
-
-每个形状都可以简化成一定数量相互连接的多边形(通常是三角形)。即便是圆形表面,比如球体,也可以简化成由许多三角形组成的网格形状。
-
-多边形的拐角称作顶点,每个顶点都可以用坐标定位,所有顶点一起就可以标绘出该物体的大致轮廓。
-
-你可以使用3D建模工具来创建3D网格,比如用Blender、3D Max、Maya、ZBrush等。jME可以加载3D网格模型,并把它们布置到场景里,但是引擎自己不能编辑网格。
-
-## 材质:颜色、光照/着色
-
-我们称作“颜色”的东西,仅仅是物体反射光的一部分。人脑用明暗对比和反射光推断物体的形状和材质。这些因素共同作用,使观察者能够区别粉笔与牛奶,皮肤与纸张,水与塑料等不同的物体。(link:http://www.shaders.org/ifw2_textures/whatsin10.htm[外部例子])
-
-=== 颜色
-
-==== +++<abbr title="Ambient Color">环境颜色</abbr>+++
-
-* 网格物体的基色,就是当物体不受任何光源影响时显现出的颜色。
-* 通常类似漫反射颜色。
-* 是使该物体肉眼可见所需最少的颜色。
-
-==== +++<abbr title="Diffuse Color">漫反射颜色</abbr>+++
-
-* 网格物体的基色加上受光源影响发出的碎光和阴影。
-* 通常类似环境颜色
-* 也叫作固有颜色
-
-=== 光源
-
-==== +++<abbr title="Emissive Color">发光色</abbr>+++
-
-* 由光源或发光材质散发出的光的颜色。
-* 只有发光材质,比如光源,才有发光色,普通物体不具备此特性。
-* 一般是白色(太阳光)。
- 
-=== 反光
-
-==== +++<abbr title="Shininess">反光度</abbr>+++
-
-* 物体表面的反光程度(1~128)。
-* 有光泽的物体可以发出小面积的、轮廓清晰的反射光。(例如:玻璃、水、银器等)
-* 普通物体的反射光通常是大面积的、模糊的。(例如:塑料、石头、抛光材质等)
-* 凹凸不平的物体表面没有光泽。(例如:衣服、纸张、木头)反射颜色通常设置为ColorRGBA.Black(黑色)。
-
-==== +++<abbr title="Specular Color">高光颜色</abbr>+++
-
-* 如果是有光泽的材质,那么它的高光颜色就是反射光的颜色。
-* 通常和光源的发光颜色一样(例如白色)。
-* 你可以用不同的颜色来制造特殊的反射效果,比如金属色泽或彩虹炫色。
-* 无光泽物体的高光颜色是黑色的。
-
-image:http://bbs.jmecn.net/uploads/default/original/1X/ddc58328366226903989e4b2e3eb31391881a8e1.png["tanlglow2"]
-
-== 材质:纹理
-纹理是材质的一部分。最简单的情况是,一个物体只有一种纹理,只需要从图片文件中导入颜色贴图(Color Map)就行。回想一下老式电脑游戏,你就知道做这方法做出来的东西看起来很素了。
-
-你(游戏设计者)把颜色贴图(Color Map)做得越详细,细节度和真实度就越高。无论你想做到像拍照一样的真实感,还是像卡通片一样的赛璐珞风格(Cel Shading),这完全取决于你的材质和纹理的质量。最新的3D图形技术使用多个图层来描述一份材质,每个图层就是一张纹理。
-
-[TIP]
-====
-没有纹理图片?在link:http://opengameart.org/[opengameart.org]上面下载免费纹理吧!记得使用纹理图片要尊重它的版权声明哦!
-====
-
-=== 纹理映射
-
-==== 颜色贴图/漫反射贴图
-
-image::http://bbs.jmecn.net/uploads/default/original/1X/1f42ac46d04c422c024743e9f6763eef4492c404.jpg[tank_diffuse.jpg,with="128",height="128",align="right"]
-
-* 是一个纯图片文件或程序纹理,用来描述物体可见的表面外观。
-* 该图片可以有Alpha透明通道。
-* 一张颜色贴图是最少的纹理。你可以做多个纹理映射,以改善画面质量。
-* 颜色贴图(Color Map)是没有经过渲染的。在Phong照明材质里这被称作漫反射贴图(Diffuse Map),因为纹理决定了物体漫反射光的基本色。
-
-==== 凸凹贴图(Bump Map)
-
-凸凹贴图是用来描述细节形状的,因为在网格编辑器里塑造细节形状会很费事,而且效率很低。有2种类型的凸凹贴图可用:
-
-* 用法线贴图(Normal Map)为细微之处塑模,比如墙壁裂纹、锈迹、皮肤纹理,或者帆布的编织纹理。(link:http://en.wikipedia.org/wiki/bump_mapping[更多关于凸凹贴图])
-* 用高度图(Height Map)为打过莫地形塑模,包括深谷和山脉。
-
-image::http://bbs.jmecn.net/uploads/default/original/1X/ecd306264b3ab11304a4eda8f2a3b858636bf49b.png[mountains512.png,with="128",height="128",align="right"]
-
-===== 高度图
-
-* 高度图就是灰度图,看起来像地形学历用的地形图。亮度高的灰度代表较高地区,较暗灰度代表低洼地区。
-* 高度图可以分为256个高度等级,用来勾勒地形轮廓。
-* 你可以在任何图形编辑器里手绘高度图。
-
-===== 法线贴图
-
-image::http://bbs.jmecn.net/uploads/default/original/1X/1278d052ccfefed303b0da7ba8daeacbbbb8781f.png[tank_normals.png,with="128",height="128",align="right"]
-
-* 做得好的法线贴图会让物体轮廓显得更精致——勿需再浪费精力给网格增加多边形。法线贴图里包含细微变化信息,让物体看起来更光滑,纹理更细密。
-* 如果在图形编辑器里打开法线图,它看起来就像上错色的颜色贴图。但是法线图不是用来上色的,它里面的颜色是用来计算表面凸凹程度和裂缝的编码位移数据的。位移数据用斜面的表面法线表示,正如它的名字。
-* 你不能手动绘制或者手工编辑法线贴图,专业设计师用专用软件在高质量3D模型上通过运算的方法获得法线贴图。你可以花钱买专业的纹理图集,或者找那种包括法线贴图的免费图集。
-
-==== 高光贴图(Specular Map)
-
-image::http://bbs.jmecn.net/uploads/default/original/1X/1e3da68cf28bf91d018554626ca1114e0c4d427c.jpg[tank_specular.jpg,with="128",height="128",align="right"]
-
-* 高光贴图可以进一步改善物体表面真实感:它包含亮度的额外信息,使物体光照效果看起来更加逼真。
-* 先复制一份中等灰度的漫反射贴图,所谓中等灰度是对应该材质的平均光度/钝度来说的。然后给较平滑、较闪亮、反射较强的区域增加较高亮度的灰度,或者把较暗、较粗糙、破旧的区域的灰度调暗。最后得到的图片看起来类似漫反射贴图的灰度级版本。
-* 你可以利用高光贴图里的颜色达成某种特殊反射效果(假晕彩,金属效果)。
-
-=== 无缝拼接纹理
-
-image::http://bbs.jmecn.net/uploads/default/original/1X/863786d6524c7c970971bf6a8d6a574469021018.jpg[BrickWall.jpg,with="128",height="128",align="right"]
-
-拼接纹理(Tiles)是一种简单常用的纹理类型。为一大片区域(如墙壁、地板)构造纹理的时候,不需要做大幅的纹理图片,而是做一小片纹理然后不断拼接直到填满整个区域。
-
-无缝纹理是一种经过特殊设计或改良的图片文件:它的右边可以拼接左边,顶边可以拼接底边。观众不容易辨别哪儿是头哪儿是尾,这样造成错觉以为是一大幅完整的纹理。但是对于复杂一点的模型,比如角色,你就不能使用这种纹理了。
-
-有关辅导材料请参考: link:http://www.photoshoptextures.com/texture-tutorials/seamless-textures.htm[如何用Photoshop做无缝纹理]
-
-=== UV贴图 / 纹理贴图集
-
-image::http://bbs.jmecn.net/uploads/default/original/1X/4036e8279eb3f3ae8c823e4bb940bf67fc00bc12.jpg[Car.jpg,with="128",height="128",align="right"]
-
-给立方体形状贴纹理容易——但是如果是角色,有面部和肢体,怎么办呢?对形状更复杂的物体,其纹理设计参照平面缝纫模式:即一个图形文件里包含物体前面、后面和侧面轮廓信息,一个接着一个。将指定的平面纹理区域(UV坐标表示)贴到3D模型(XYZ坐标表示)的指定区域,称为UV映射。使用UV映射(也叫纹理图集)的方法,一个模型的每个面都可以有不同的纹理。你可以为每种纹理建立一个相关UV映射。
-
-精确地找到接缝然后正确拼接显得十分重要:你必须需要某种图形工具(比如Blender)来创建UV贴图(纹理图集),还要依序保存坐标。值得花点功夫学习这方面技能,UV贴图模型看起来专业多啦。
-
-=== 环境映像
-
-image::http://jmonkeyengine.org/wp-content/uploads/2010/10/glass-teapot1.png[glass-teapot1.png,with="160",height="90",align="right"]
-
-环境映像,或者说反射映像,用来模拟实时反射和折射效果。这种方法比离线渲染程序中使用的射线追踪方法速度快,但是精确度低。
-
-你可以用立方图的方法表现周围环境;球面图也可以,但是看起来会变形失真。总的来说,就是把周围环境当成环境贴图,设计一整套图片来表现背景场景的360°视图——非常类似天空盒的表现形式。然后用渲染器做环境映射,做出反射表面的纹理,最后得到满意的"玻璃、镜面、水"效果。就像天空盒,反射贴图是静止的,移动的物体(比如行走的人)不属于反射效果的一部分。
-
-参见:<<jme3/advanced/water#,Water>>.
-
-=== 多对一贴图
-
-MIP是拉丁文 "multum in parvo",英文Many in one,意为多对一。
-
-多对一贴图(MIP Map)的意思是在一个图片文件中,为一个纹理提供两个或三个不同分辨率的图像。取决于摄像机的远近,引擎自动地为物体选择跟多(或更少)的纹理细节。这样物体近看很精致,远看也很不错。
-
-这种方法什么都好,美中不足的就是要花时间去制作纹理,还需要额外空间存储纹理文件。如果你不想自己做,jMonkeyEngine可以自动创建基本的MIP贴图,用于性能优化。
-
-=== 程序纹理
-
-程序纹理的制作方法是不断重复一个小图片,外加一些伪随机和梯度变化(称作Perlin噪声)。程序纹理比静态矩形纹理看起来更自然,球面失真度小。对大型网格物体,这种重复纹理看起来比无缝凭借纹理更自然。程序纹理若用于不规则大面积结构物体,效果更为立项,比如草地,土壤,石块,锈迹,还有围墙。可用jMonkeyEngine的 link:http://wiki.jmonkeyengine.org/sdk/neotexture.html[Neo Texture插件] 来制作程序纹理。
-
-image::http://jmonkeyengine.org/wp-content/uploads/2010/10/neotexture-2.jpg[neotexture-2.jpg,with="380",height="189",align="center"]
-
-还可以参见: link:http://www.blender.org/education-help/tutorials/materials/[用Blender创建材质], link:http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Every_Material_Known_to_Man[Blender: 人类已知的各种材质]
-
-== 动画
-
-3D游戏中,骨骼动画用于制作动画角色,理论上骨骼方法可以广泛应用到任何一种3D网格物体。(例如,一个板条箱,它开合的合页可以看做关节。)
-
-除非你真的做过3D动画,否则难以体会,动画角色如何实现往往是十分棘手的问题:角色动作像外星人一样呆板,再不就是断断续续的;角色形象空洞,或者看起来像是飘着的。专业游戏设计人员要花费大量精力让动画角色看起来自然一些,这里面包括要使用 link:http://en.wikipedia.org/wiki/Motion_capture[动作捕捉技术]。
-
-=== 装配和蒙皮
-
-image::http://pub.admc.com/misc/jme/blenderjmetut/blenderswordsman.png[blenderswordsman.png,with="195",height="151",align="right"]
-
-动画角色是有支架的:内里的骨骼(骨头)和外部表面(皮肤)。皮肤是角色的可见外表,此处所谓的皮肤也包括衣服。骨头肉眼不可见,它用来对皮肤的图像渐变做插值(计算)。
-
-JME3游戏引擎只能加载、显示录制好的动画,因此,你必须使用其他工具(比如Blender)创建角色(包括装配、蒙皮、制作动画的过程)。
-
-1. *装配:* 为角色构造骨架。
-**  使用骨头的数量尽量少,以降低复杂度。
-**  骨头之间的连接采用父子层次结构:移动一块骨头会拉着别的骨头跟它一起动(比如运动胳膊会带动手掌)。
-**  骨骼遵循命名规则,这样是为了方便3D引擎区别哪是哪。
-
-2.  *蒙皮:* 把单个骨头与相应的皮肤区域关联起来。
-**  每块骨头都与部分皮肤相连。动画制作的时候,(看不见的)骨头拽着(看得见的)皮肤跟它一起动。例子:大腿骨与大腿上部皮肤的连接。
-**  一块皮肤可能受不止一块骨头的影响。例如:膝盖、肘部。
-**  骨头与皮肤的连接过程是渐进的:你先制定每块多边形皮肤受骨头移动影响的权重。比如:当大腿动作的时候,整条腿全部受影响,髋关节受的影响小一些,而头部完全不受影响。
-**  jMonkeyEngine支持硬件蒙皮(在GPU上运算,而不是CPU)。
-
-3.  *关键帧动画:* 一幅关键帧就是某个动作序列的快照记录。
-**  一系列关键帧构成一个动画。
-**  每个模型可以有多个动画。每个动画都有一个名字,用于辨识(例如:“走”,“攻击”,“跳”)。
-**  你可以在游戏代码里指定加载哪个关键帧动画,指定何时显示它。
-
-[TIP]
-====
-动画制作(装配、蒙皮、关键帧)与动作变换(旋转、缩放、移动、插值)有何区别?
-
-*  动作变换比动画制作简单。有时候,做个几何图形变换,看起来似乎就是动画了。比如,旋转的风车,脉动的能量球,机器拉杆的移动。用JME3实现动作变换非常容易。 
-*  然而,动画制作就复杂多了,它以一种特别的编码形式保存(关键帧)。动画制作会扭曲网格皮肤,而且,它有复杂的动作系列,需要借用外部工具记录,再用JME3显示。
-====
-
-=== 运动学
-
-*  正向运动学:假如已知角色所有关节的角度,求该角色手部位置在哪里?
-*  逆向运动学:假设已知该角色手部位置,求该角色其它关节的角度是多少?
-
-=== 控制器和频道
-
-在JME3程序中,要把动画模型注册到动画控制器(AnimControl)里。用动画控制器来操作可用的动画序列。控制器有多个频道(AnimChannel),每个频道一次只能运行一个动画序列。要运行多个动画序列,你就得创建多个频道,然后并行运行它们。
-
-== 人工智能(AI)
-
-对于非玩家(电脑控制的)角色(简称NPC),只有他们不会蠢得去撞墙或者盲目地跑进火堆里,游戏才会有趣。你希望制作出来的?NPC对周遭环境有清醒意识,然后让他们自己根据游戏状态做调整——否则玩家就可以把他们忽略不计了。最常见的用例就是你希望设计出来的对手能对玩家构成威胁,这样互动才有趣。
-
-使游戏变聪明的游戏设计元素,称为人工智能(AI )。人工智能可以用于实现NPC敌人、宠物等;你还可以用他们建立自动报警西东,如果玩家触发了入侵警报,自动报警系统自动锁门,然后召唤警卫。
-
-人工智能涉及下列领域,当然还有其它未列出来的内容:
-
-*  *知识*——知识指的是数据,是AI可以访问的数据,而且AI所做决定是基于该数据的。理想的代理只“知道”它们看到和听到的。它的隐含意思是,为维护游戏公平,信息数据可以绕过AI不让其知晓。你可以设计无所不知的AI,也可以与部分AI共享数据,还可以只让附近的AI知晓当前状态。举个例子:玩家打开无线电了,只有部分装备了双向无线电的AO警卫朝玩家位置移动,而多数其他的警卫当时并没有意识到任何异样。
-*  *计划目标*——所谓计划就是AI如何__采取行动__。每个AI都有优先权达成某项具体目标,目的是为达到未来某种状态。编程的时候,你把AI的目标分解成几个小目标。AI求助于它的知识获取当前状态,从储备的战术/战略中甄选,同时做优先排序。AI不停地考察当前状态是否更接近目标。如果不是,AI舍弃当前战术/战略,选择另一个进行尝试。举例:AI在一个不断变化的环境里所搜到达玩家基地的最佳路径,同时还要避开陷阱。AI追踪玩家,目标是消灭他。AI藏起来不让玩家看到,目标是谋杀VIP。
-*  *问题解决*——问题解决是AI如何_对干扰做出反应_,就是摆在自己和目标之间的障碍。AI依据一套假定的事实和规则推算自己的状态——基于类似轻微疼痛、剧痛、厌倦或者陷入困境的觉知作出选择。在每个状态里,只有选择具体的反应子集才有意义。实际的反应还取决于该AI的目标,因为AI的行动不一定能阻碍自己的目标!举例:如果玩家接近自己,AI是选择攻击还是隐藏自己,亦或是给出警告?AI空闲的时候,他是布置陷阱呢,还是给自己疗伤,亦或是给魔法符文充能?如果有生命危险,AI是选择逃跑还是与对方同归于尽?
-
-你还可以学习更高级的AI技术,比如利用神经网络。
-
-有趣的AI算法资源还有很多,比如:
-
-*  link:http://www.policyalmanac.org/games/aStarTutorial.htm[A* (A-Star) pathfinding for beginners]
-*  link:http://theory.stanford.edu/~amitp/GameProgramming/[A* (A-star) pathfinding theory]
-*  link:http://hem.fyristorg.com/dawnbringer/z-path.html[&quot;Z-Path&quot; algorithm] (backwards pathfinding)
-*  link:http://web.media.mit.edu/~jorkin/goap.html[GOAP -- Goal-Oriented Action Planning]
-*  link:http://neuroph.sourceforge.net/[Neuroph -- Java Neural Networks]
-*  …
-
-== 数学
-
-image::http://bbs.jmecn.net/uploads/default/original/1X/7c68ac3778607127effff0592d0d5f6fdaff6ed8.png[coordinate-system.png,with="235",height="210",align="right"]
-
-=== 坐标
-
-[TIP]
-====
-jMonkeyEngine基于OpenGL,下文提到的坐标系,是OpenGL所采用的右手坐标系。
-====
-
-坐标代表坐标系统的具体位置。坐标是相对于原点(0,0,0)来说的。在3D空间,你需要指定三个坐标值以便确定某个点的位置:x(右),y(上),z(朝向你)。同理。-x(左),-y(下),-z(远离你)。相对于向量来说(两者看起来很相似),坐标是具体的位置,不是方向。
-
-==== 原点
-
-
-原点就是3D空间的中心点,是三轴交汇点。它的坐标永远是(0,0,0)。
-
-*举例:* `Vector3f origin = new Vector3f( Vector3f.ZERO );`
-
-=== 向量
-
-向量有唯一长度(数学上称为"模")和唯一方向,就像在3D空间里的一枚箭头。向量起点在坐标(x1, y1, z1)或原点,终点在目标坐标(x2, y2, z2)。反方向用负值表示。
-
-*举例:* 
-
-[source,java]
-----
-Vector3f v = new Vector3f( 17f , -4f , 0f ); // 起始于原点 (0/0/0)
-Vector3f v = new Vector3f( 8f , 0f , 33f ).add(new Vector3f( 0f , -2f , -2f )); // 起始于坐标(8,-2,31)
-----
-
-
-==== 单位向量
-
-_单位向量_就是基本向量,它的长度是1个空间单位。由于它的长度是固定的(而且它只能指向一个位置),因此单位向量唯一变化的只有方向。
-
-*  `Vector3f.UNIT_X`  = ( 1, 0, 0) = 右
-*  `Vector3f.UNIT_Y`  = ( 0, 1, 0) = 上
-*  `Vector3f.UNIT_Z`  = ( 0, 0, 1) = 前方
-*  `Vector3f.UNIT_XYZ` = 1 wu diagonal right-up-forewards
-
-对象量的分量求负,可以改变它的方向。例如:对右方向(1, 0, 0)求负得到左方向(-1, 0, 0)。
-
-==== 标准化向量
-
-_标准化向量_是一个自定义的_单位向量_。标准化向量与_(表面)法向量_并不相同。如果对一个向量做标准化处理,它的方向将保持不变,但是原来指向的坐标就丢失了。
-
-*举例:* 计算角度之前对向量作标准化处理。
-
-==== 表面法线
-
-image:http://bbs.jmecn.net/uploads/default/original/1X/a869c0b6ed8a9b948867068e9dd81e7fd0a9f394.png[300px-surface_normal.png,with="",height="",align="right"]
-
-表面法线就是垂直于(正交于)某平面的向量。要计算表面法线,可以做叉乘(向量积)运算。
-
-==== 叉乘
-
-叉乘是用来找垂直向量的运算(正交计算,90°直角)。在3D空间谈到正交这个概念,它只对相对某个平面来说才有意义。你需要两个向量来定义唯一平面。两个向量的叉乘,`v1 * v2`,就是垂直于该平面的向量。垂直于一个平面的向量称为_表面法线_。
-
-*举例:* x单位向量和y单位向量合在一起可以定义x/y平面。垂直于该平面的向量就是z轴。在JME中,下面的计算结果为真:
-`( Vector3f.UNIT_X.cross( Vector3f.UNIT_Y ) ).equals( Vector3f.UNIT_Z )` == true
-
-==== 动作变换
-
-动作变换的意思是指在3D场景下,表现物体的旋转、缩放(重新定义大小)或者位移。3D引擎针对这些过程提供简化方法,你写写代码就可以使节点完成动作变换。
-
-*举例:* 3D俄罗斯方块游戏里面下落并旋转的方块。
-
-==== 球面线性插值(Slerp)
-
-Slerp就是球面线性插值的英文单词快读结果,写出来是 Spherical linear interpolation。一个Slerp就是一个插值变换,用来做简化的3D引擎动画。定义初始状态和结束状态,然后slerp插入中间过程,做出从一个状态到另一个状态的等速变换。你可以正常播放、暂停、回放、快进该动作。 link:http://javadoc.jmonkeyengine.org/com/jme3/math/Quaternion.html#slerp-com.jme3.math.Quaternion-com.jme3.math.Quaternion-float-[JavaDoc:slerp()]
-
-*举例:* 一个正在燃烧的陨石形状几何体,位置p1,旋转速度r2,缩放比例s1。从天空下坠到地面"p2, r2, s2",对它做球面线性插值。
-
-<<jme3/math#, 了解更多有关3D数学内容请点击这里。>>
-
-== 游戏开发行话
-
-*  link:http://www.gamasutra.com/view/feature/6504/a_game_studio_culture_dictionary.php?print=1[A Game Studio Culture Dictionary]
-
-== 3D图形术语wiki百科
-
-*  link:http://en.wikipedia.org/wiki/User:Jreynaga/Books/3D_Graphics_Terms[http://en.wikipedia.org/wiki/User:Jreynaga/Books/3D_Graphics_Terms]
+= 3D游戏开发术语
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]
+
+
+开始学习之前,确保你熟知如下概念和术语。
+
+== 3D图形和音频
+
+**+++<abbr title="Open Graphics Library">OpenGL</abbr>+++** 即开放式图形库,是一个用来渲染二维或三维计算机图形的跨平台的专业图形程序接口。对于Java来说,有两种基于OpenGL实现的渲染器。
+
+. 轻量级Java游戏库 (LWJGL)
+. Java开放图形库 (JOGL)
+
+**+++<abbr title="Open Audio Library">OpenAL</abbr>+++** 即开放式音频库,是一个跨平台的3D音频程序接口。
+
+== 环境,显示,渲染器
+jME环境(Context)为JME3游戏提供了所需的一切,包括:配置管理、渲染器、计时器、输入监听器、事件监听器和显示系统。
+
+* **jME显示系统** 替代了Java Swing组件,用于绘制jME自定义窗口。
+
+* **输入系统** 可以让你对用户输入做出反应,包括:鼠标点击、鼠标滑动、键盘输入、手柄操作等。
+
+* **渲染器(Renderer)** 用于处理将3D场景图绘制到2D屏幕上的所有计算工作。
+
+** **染色器(Shader)**是整个渲染管线的编程部分,jME3游戏引擎用它制作高级自定义材质。
+
+== 几何(Geometry)
+
+=== 多边形,网格,顶点
+image:http://bbs.jmecn.net/uploads/default/original/1X/bc97a93e8c8168db86c9ad50dc739f9e18969be1.png[模型(例如此处的海豚)由多边形网格组成]
+
+3D场景里大部分的可见物体都是由多边形网格组成的——角色、地形、建筑等等。网格(Mesh)是一种可以表达复杂形状的网状结构。网格的优点是,从数学角度讲足够简单,可以实时处理形状变化,细节上也足够辨认该物体。
+
+每个形状都可以简化成一定数量相互连接的多边形(通常是三角形)。即便是圆形表面,比如球体,也可以简化成由许多三角形组成的网格形状。
+
+多边形的拐角称作顶点,每个顶点都可以用坐标定位,所有顶点一起就可以标绘出该物体的大致轮廓。
+
+你可以使用3D建模工具来创建3D网格,比如用Blender、3D Max、Maya、ZBrush等。jME可以加载3D网格模型,并把它们布置到场景里,但是引擎自己不能编辑网格。
+
+## 材质:颜色、光照/着色
+
+我们称作“颜色”的东西,仅仅是物体反射光的一部分。人脑用明暗对比和反射光推断物体的形状和材质。这些因素共同作用,使观察者能够区别粉笔与牛奶,皮肤与纸张,水与塑料等不同的物体。(link:http://www.shaders.org/ifw2_textures/whatsin10.htm[外部例子])
+
+=== 颜色
+
+==== +++<abbr title="Ambient Color">环境颜色</abbr>+++
+
+* 网格物体的基色,就是当物体不受任何光源影响时显现出的颜色。
+* 通常类似漫反射颜色。
+* 是使该物体肉眼可见所需最少的颜色。
+
+==== +++<abbr title="Diffuse Color">漫反射颜色</abbr>+++
+
+* 网格物体的基色加上受光源影响发出的碎光和阴影。
+* 通常类似环境颜色
+* 也叫作固有颜色
+
+=== 光源
+
+==== +++<abbr title="Emissive Color">发光色</abbr>+++
+
+* 由光源或发光材质散发出的光的颜色。
+* 只有发光材质,比如光源,才有发光色,普通物体不具备此特性。
+* 一般是白色(太阳光)。
+ 
+=== 反光
+
+==== +++<abbr title="Shininess">反光度</abbr>+++
+
+* 物体表面的反光程度(1~128)。
+* 有光泽的物体可以发出小面积的、轮廓清晰的反射光。(例如:玻璃、水、银器等)
+* 普通物体的反射光通常是大面积的、模糊的。(例如:塑料、石头、抛光材质等)
+* 凹凸不平的物体表面没有光泽。(例如:衣服、纸张、木头)反射颜色通常设置为ColorRGBA.Black(黑色)。
+
+==== +++<abbr title="Specular Color">高光颜色</abbr>+++
+
+* 如果是有光泽的材质,那么它的高光颜色就是反射光的颜色。
+* 通常和光源的发光颜色一样(例如白色)。
+* 你可以用不同的颜色来制造特殊的反射效果,比如金属色泽或彩虹炫色。
+* 无光泽物体的高光颜色是黑色的。
+
+image:http://bbs.jmecn.net/uploads/default/original/1X/ddc58328366226903989e4b2e3eb31391881a8e1.png["tanlglow2"]
+
+== 材质:纹理
+纹理是材质的一部分。最简单的情况是,一个物体只有一种纹理,只需要从图片文件中导入颜色贴图(Color Map)就行。回想一下老式电脑游戏,你就知道做这方法做出来的东西看起来很素了。
+
+你(游戏设计者)把颜色贴图(Color Map)做得越详细,细节度和真实度就越高。无论你想做到像拍照一样的真实感,还是像卡通片一样的赛璐珞风格(Cel Shading),这完全取决于你的材质和纹理的质量。最新的3D图形技术使用多个图层来描述一份材质,每个图层就是一张纹理。
+
+[TIP]
+====
+没有纹理图片?在link:http://opengameart.org/[opengameart.org]上面下载免费纹理吧!记得使用纹理图片要尊重它的版权声明哦!
+====
+
+=== 纹理映射
+
+==== 颜色贴图/漫反射贴图
+
+image::http://bbs.jmecn.net/uploads/default/original/1X/1f42ac46d04c422c024743e9f6763eef4492c404.jpg[tank_diffuse.jpg,with="128",height="128",align="right"]
+
+* 是一个纯图片文件或程序纹理,用来描述物体可见的表面外观。
+* 该图片可以有Alpha透明通道。
+* 一张颜色贴图是最少的纹理。你可以做多个纹理映射,以改善画面质量。
+* 颜色贴图(Color Map)是没有经过渲染的。在Phong照明材质里这被称作漫反射贴图(Diffuse Map),因为纹理决定了物体漫反射光的基本色。
+
+==== 凸凹贴图(Bump Map)
+
+凸凹贴图是用来描述细节形状的,因为在网格编辑器里塑造细节形状会很费事,而且效率很低。有2种类型的凸凹贴图可用:
+
+* 用法线贴图(Normal Map)为细微之处塑模,比如墙壁裂纹、锈迹、皮肤纹理,或者帆布的编织纹理。(link:http://en.wikipedia.org/wiki/bump_mapping[更多关于凸凹贴图])
+* 用高度图(Height Map)为打过莫地形塑模,包括深谷和山脉。
+
+image::http://bbs.jmecn.net/uploads/default/original/1X/ecd306264b3ab11304a4eda8f2a3b858636bf49b.png[mountains512.png,with="128",height="128",align="right"]
+
+===== 高度图
+
+* 高度图就是灰度图,看起来像地形学历用的地形图。亮度高的灰度代表较高地区,较暗灰度代表低洼地区。
+* 高度图可以分为256个高度等级,用来勾勒地形轮廓。
+* 你可以在任何图形编辑器里手绘高度图。
+
+===== 法线贴图
+
+image::http://bbs.jmecn.net/uploads/default/original/1X/1278d052ccfefed303b0da7ba8daeacbbbb8781f.png[tank_normals.png,with="128",height="128",align="right"]
+
+* 做得好的法线贴图会让物体轮廓显得更精致——勿需再浪费精力给网格增加多边形。法线贴图里包含细微变化信息,让物体看起来更光滑,纹理更细密。
+* 如果在图形编辑器里打开法线图,它看起来就像上错色的颜色贴图。但是法线图不是用来上色的,它里面的颜色是用来计算表面凸凹程度和裂缝的编码位移数据的。位移数据用斜面的表面法线表示,正如它的名字。
+* 你不能手动绘制或者手工编辑法线贴图,专业设计师用专用软件在高质量3D模型上通过运算的方法获得法线贴图。你可以花钱买专业的纹理图集,或者找那种包括法线贴图的免费图集。
+
+==== 高光贴图(Specular Map)
+
+image::http://bbs.jmecn.net/uploads/default/original/1X/1e3da68cf28bf91d018554626ca1114e0c4d427c.jpg[tank_specular.jpg,with="128",height="128",align="right"]
+
+* 高光贴图可以进一步改善物体表面真实感:它包含亮度的额外信息,使物体光照效果看起来更加逼真。
+* 先复制一份中等灰度的漫反射贴图,所谓中等灰度是对应该材质的平均光度/钝度来说的。然后给较平滑、较闪亮、反射较强的区域增加较高亮度的灰度,或者把较暗、较粗糙、破旧的区域的灰度调暗。最后得到的图片看起来类似漫反射贴图的灰度级版本。
+* 你可以利用高光贴图里的颜色达成某种特殊反射效果(假晕彩,金属效果)。
+
+=== 无缝拼接纹理
+
+image::http://bbs.jmecn.net/uploads/default/original/1X/863786d6524c7c970971bf6a8d6a574469021018.jpg[BrickWall.jpg,with="128",height="128",align="right"]
+
+拼接纹理(Tiles)是一种简单常用的纹理类型。为一大片区域(如墙壁、地板)构造纹理的时候,不需要做大幅的纹理图片,而是做一小片纹理然后不断拼接直到填满整个区域。
+
+无缝纹理是一种经过特殊设计或改良的图片文件:它的右边可以拼接左边,顶边可以拼接底边。观众不容易辨别哪儿是头哪儿是尾,这样造成错觉以为是一大幅完整的纹理。但是对于复杂一点的模型,比如角色,你就不能使用这种纹理了。
+
+有关辅导材料请参考: link:http://www.photoshoptextures.com/texture-tutorials/seamless-textures.htm[如何用Photoshop做无缝纹理]
+
+=== UV贴图 / 纹理贴图集
+
+image::http://bbs.jmecn.net/uploads/default/original/1X/4036e8279eb3f3ae8c823e4bb940bf67fc00bc12.jpg[Car.jpg,with="128",height="128",align="right"]
+
+给立方体形状贴纹理容易——但是如果是角色,有面部和肢体,怎么办呢?对形状更复杂的物体,其纹理设计参照平面缝纫模式:即一个图形文件里包含物体前面、后面和侧面轮廓信息,一个接着一个。将指定的平面纹理区域(UV坐标表示)贴到3D模型(XYZ坐标表示)的指定区域,称为UV映射。使用UV映射(也叫纹理图集)的方法,一个模型的每个面都可以有不同的纹理。你可以为每种纹理建立一个相关UV映射。
+
+精确地找到接缝然后正确拼接显得十分重要:你必须需要某种图形工具(比如Blender)来创建UV贴图(纹理图集),还要依序保存坐标。值得花点功夫学习这方面技能,UV贴图模型看起来专业多啦。
+
+=== 环境映像
+
+image::http://jmonkeyengine.org/wp-content/uploads/2010/10/glass-teapot1.png[glass-teapot1.png,with="160",height="90",align="right"]
+
+环境映像,或者说反射映像,用来模拟实时反射和折射效果。这种方法比离线渲染程序中使用的射线追踪方法速度快,但是精确度低。
+
+你可以用立方图的方法表现周围环境;球面图也可以,但是看起来会变形失真。总的来说,就是把周围环境当成环境贴图,设计一整套图片来表现背景场景的360°视图——非常类似天空盒的表现形式。然后用渲染器做环境映射,做出反射表面的纹理,最后得到满意的"玻璃、镜面、水"效果。就像天空盒,反射贴图是静止的,移动的物体(比如行走的人)不属于反射效果的一部分。
+
+参见:<<jme3/advanced/water#,Water>>.
+
+=== 多对一贴图
+
+MIP是拉丁文 "multum in parvo",英文Many in one,意为多对一。
+
+多对一贴图(MIP Map)的意思是在一个图片文件中,为一个纹理提供两个或三个不同分辨率的图像。取决于摄像机的远近,引擎自动地为物体选择跟多(或更少)的纹理细节。这样物体近看很精致,远看也很不错。
+
+这种方法什么都好,美中不足的就是要花时间去制作纹理,还需要额外空间存储纹理文件。如果你不想自己做,jMonkeyEngine可以自动创建基本的MIP贴图,用于性能优化。
+
+=== 程序纹理
+
+程序纹理的制作方法是不断重复一个小图片,外加一些伪随机和梯度变化(称作Perlin噪声)。程序纹理比静态矩形纹理看起来更自然,球面失真度小。对大型网格物体,这种重复纹理看起来比无缝凭借纹理更自然。程序纹理若用于不规则大面积结构物体,效果更为立项,比如草地,土壤,石块,锈迹,还有围墙。可用jMonkeyEngine的 link:http://wiki.jmonkeyengine.org/sdk/neotexture.html[Neo Texture插件] 来制作程序纹理。
+
+image::http://jmonkeyengine.org/wp-content/uploads/2010/10/neotexture-2.jpg[neotexture-2.jpg,with="380",height="189",align="center"]
+
+还可以参见: link:http://www.blender.org/education-help/tutorials/materials/[用Blender创建材质], link:http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Every_Material_Known_to_Man[Blender: 人类已知的各种材质]
+
+== 动画
+
+3D游戏中,骨骼动画用于制作动画角色,理论上骨骼方法可以广泛应用到任何一种3D网格物体。(例如,一个板条箱,它开合的合页可以看做关节。)
+
+除非你真的做过3D动画,否则难以体会,动画角色如何实现往往是十分棘手的问题:角色动作像外星人一样呆板,再不就是断断续续的;角色形象空洞,或者看起来像是飘着的。专业游戏设计人员要花费大量精力让动画角色看起来自然一些,这里面包括要使用 link:http://en.wikipedia.org/wiki/Motion_capture[动作捕捉技术]。
+
+=== 装配和蒙皮
+
+image::http://pub.admc.com/misc/jme/blenderjmetut/blenderswordsman.png[blenderswordsman.png,with="195",height="151",align="right"]
+
+动画角色是有支架的:内里的骨骼(骨头)和外部表面(皮肤)。皮肤是角色的可见外表,此处所谓的皮肤也包括衣服。骨头肉眼不可见,它用来对皮肤的图像渐变做插值(计算)。
+
+JME3游戏引擎只能加载、显示录制好的动画,因此,你必须使用其他工具(比如Blender)创建角色(包括装配、蒙皮、制作动画的过程)。
+
+1. *装配:* 为角色构造骨架。
+**  使用骨头的数量尽量少,以降低复杂度。
+**  骨头之间的连接采用父子层次结构:移动一块骨头会拉着别的骨头跟它一起动(比如运动胳膊会带动手掌)。
+**  骨骼遵循命名规则,这样是为了方便3D引擎区别哪是哪。
+
+2.  *蒙皮:* 把单个骨头与相应的皮肤区域关联起来。
+**  每块骨头都与部分皮肤相连。动画制作的时候,(看不见的)骨头拽着(看得见的)皮肤跟它一起动。例子:大腿骨与大腿上部皮肤的连接。
+**  一块皮肤可能受不止一块骨头的影响。例如:膝盖、肘部。
+**  骨头与皮肤的连接过程是渐进的:你先制定每块多边形皮肤受骨头移动影响的权重。比如:当大腿动作的时候,整条腿全部受影响,髋关节受的影响小一些,而头部完全不受影响。
+**  jMonkeyEngine支持硬件蒙皮(在GPU上运算,而不是CPU)。
+
+3.  *关键帧动画:* 一幅关键帧就是某个动作序列的快照记录。
+**  一系列关键帧构成一个动画。
+**  每个模型可以有多个动画。每个动画都有一个名字,用于辨识(例如:“走”,“攻击”,“跳”)。
+**  你可以在游戏代码里指定加载哪个关键帧动画,指定何时显示它。
+
+[TIP]
+====
+动画制作(装配、蒙皮、关键帧)与动作变换(旋转、缩放、移动、插值)有何区别?
+
+*  动作变换比动画制作简单。有时候,做个几何图形变换,看起来似乎就是动画了。比如,旋转的风车,脉动的能量球,机器拉杆的移动。用JME3实现动作变换非常容易。 
+*  然而,动画制作就复杂多了,它以一种特别的编码形式保存(关键帧)。动画制作会扭曲网格皮肤,而且,它有复杂的动作系列,需要借用外部工具记录,再用JME3显示。
+====
+
+=== 运动学
+
+*  正向运动学:假如已知角色所有关节的角度,求该角色手部位置在哪里?
+*  逆向运动学:假设已知该角色手部位置,求该角色其它关节的角度是多少?
+
+=== 控制器和频道
+
+在JME3程序中,要把动画模型注册到动画控制器(AnimControl)里。用动画控制器来操作可用的动画序列。控制器有多个频道(AnimChannel),每个频道一次只能运行一个动画序列。要运行多个动画序列,你就得创建多个频道,然后并行运行它们。
+
+== 人工智能(AI)
+
+对于非玩家(电脑控制的)角色(简称NPC),只有他们不会蠢得去撞墙或者盲目地跑进火堆里,游戏才会有趣。你希望制作出来的?NPC对周遭环境有清醒意识,然后让他们自己根据游戏状态做调整——否则玩家就可以把他们忽略不计了。最常见的用例就是你希望设计出来的对手能对玩家构成威胁,这样互动才有趣。
+
+使游戏变聪明的游戏设计元素,称为人工智能(AI )。人工智能可以用于实现NPC敌人、宠物等;你还可以用他们建立自动报警西东,如果玩家触发了入侵警报,自动报警系统自动锁门,然后召唤警卫。
+
+人工智能涉及下列领域,当然还有其它未列出来的内容:
+
+*  *知识*——知识指的是数据,是AI可以访问的数据,而且AI所做决定是基于该数据的。理想的代理只“知道”它们看到和听到的。它的隐含意思是,为维护游戏公平,信息数据可以绕过AI不让其知晓。你可以设计无所不知的AI,也可以与部分AI共享数据,还可以只让附近的AI知晓当前状态。举个例子:玩家打开无线电了,只有部分装备了双向无线电的AO警卫朝玩家位置移动,而多数其他的警卫当时并没有意识到任何异样。
+*  *计划目标*——所谓计划就是AI如何__采取行动__。每个AI都有优先权达成某项具体目标,目的是为达到未来某种状态。编程的时候,你把AI的目标分解成几个小目标。AI求助于它的知识获取当前状态,从储备的战术/战略中甄选,同时做优先排序。AI不停地考察当前状态是否更接近目标。如果不是,AI舍弃当前战术/战略,选择另一个进行尝试。举例:AI在一个不断变化的环境里所搜到达玩家基地的最佳路径,同时还要避开陷阱。AI追踪玩家,目标是消灭他。AI藏起来不让玩家看到,目标是谋杀VIP。
+*  *问题解决*——问题解决是AI如何_对干扰做出反应_,就是摆在自己和目标之间的障碍。AI依据一套假定的事实和规则推算自己的状态——基于类似轻微疼痛、剧痛、厌倦或者陷入困境的觉知作出选择。在每个状态里,只有选择具体的反应子集才有意义。实际的反应还取决于该AI的目标,因为AI的行动不一定能阻碍自己的目标!举例:如果玩家接近自己,AI是选择攻击还是隐藏自己,亦或是给出警告?AI空闲的时候,他是布置陷阱呢,还是给自己疗伤,亦或是给魔法符文充能?如果有生命危险,AI是选择逃跑还是与对方同归于尽?
+
+你还可以学习更高级的AI技术,比如利用神经网络。
+
+有趣的AI算法资源还有很多,比如:
+
+*  link:http://www.policyalmanac.org/games/aStarTutorial.htm[A* (A-Star) pathfinding for beginners]
+*  link:http://theory.stanford.edu/~amitp/GameProgramming/[A* (A-star) pathfinding theory]
+*  link:http://hem.fyristorg.com/dawnbringer/z-path.html[&quot;Z-Path&quot; algorithm] (backwards pathfinding)
+*  link:http://web.media.mit.edu/~jorkin/goap.html[GOAP -- Goal-Oriented Action Planning]
+*  link:http://neuroph.sourceforge.net/[Neuroph -- Java Neural Networks]
+*  …
+
+== 数学
+
+image::http://bbs.jmecn.net/uploads/default/original/1X/7c68ac3778607127effff0592d0d5f6fdaff6ed8.png[coordinate-system.png,with="235",height="210",align="right"]
+
+=== 坐标
+
+[TIP]
+====
+jMonkeyEngine基于OpenGL,下文提到的坐标系,是OpenGL所采用的右手坐标系。
+====
+
+坐标代表坐标系统的具体位置。坐标是相对于原点(0,0,0)来说的。在3D空间,你需要指定三个坐标值以便确定某个点的位置:x(右),y(上),z(朝向你)。同理。-x(左),-y(下),-z(远离你)。相对于向量来说(两者看起来很相似),坐标是具体的位置,不是方向。
+
+==== 原点
+
+
+原点就是3D空间的中心点,是三轴交汇点。它的坐标永远是(0,0,0)。
+
+*举例:* `Vector3f origin = new Vector3f( Vector3f.ZERO );`
+
+=== 向量
+
+向量有唯一长度(数学上称为"模")和唯一方向,就像在3D空间里的一枚箭头。向量起点在坐标(x1, y1, z1)或原点,终点在目标坐标(x2, y2, z2)。反方向用负值表示。
+
+*举例:* 
+
+[source,java]
+----
+Vector3f v = new Vector3f( 17f , -4f , 0f ); // 起始于原点 (0/0/0)
+Vector3f v = new Vector3f( 8f , 0f , 33f ).add(new Vector3f( 0f , -2f , -2f )); // 起始于坐标(8,-2,31)
+----
+
+
+==== 单位向量
+
+_单位向量_就是基本向量,它的长度是1个空间单位。由于它的长度是固定的(而且它只能指向一个位置),因此单位向量唯一变化的只有方向。
+
+*  `Vector3f.UNIT_X`  = ( 1, 0, 0) = 右
+*  `Vector3f.UNIT_Y`  = ( 0, 1, 0) = 上
+*  `Vector3f.UNIT_Z`  = ( 0, 0, 1) = 前方
+*  `Vector3f.UNIT_XYZ` = 1 wu diagonal right-up-forewards
+
+对象量的分量求负,可以改变它的方向。例如:对右方向(1, 0, 0)求负得到左方向(-1, 0, 0)。
+
+==== 标准化向量
+
+_标准化向量_是一个自定义的_单位向量_。标准化向量与_(表面)法向量_并不相同。如果对一个向量做标准化处理,它的方向将保持不变,但是原来指向的坐标就丢失了。
+
+*举例:* 计算角度之前对向量作标准化处理。
+
+==== 表面法线
+
+image:http://bbs.jmecn.net/uploads/default/original/1X/a869c0b6ed8a9b948867068e9dd81e7fd0a9f394.png[300px-surface_normal.png,with="",height="",align="right"]
+
+表面法线就是垂直于(正交于)某平面的向量。要计算表面法线,可以做叉乘(向量积)运算。
+
+==== 叉乘
+
+叉乘是用来找垂直向量的运算(正交计算,90°直角)。在3D空间谈到正交这个概念,它只对相对某个平面来说才有意义。你需要两个向量来定义唯一平面。两个向量的叉乘,`v1 * v2`,就是垂直于该平面的向量。垂直于一个平面的向量称为_表面法线_。
+
+*举例:* x单位向量和y单位向量合在一起可以定义x/y平面。垂直于该平面的向量就是z轴。在JME中,下面的计算结果为真:
+`( Vector3f.UNIT_X.cross( Vector3f.UNIT_Y ) ).equals( Vector3f.UNIT_Z )` == true
+
+==== 动作变换
+
+动作变换的意思是指在3D场景下,表现物体的旋转、缩放(重新定义大小)或者位移。3D引擎针对这些过程提供简化方法,你写写代码就可以使节点完成动作变换。
+
+*举例:* 3D俄罗斯方块游戏里面下落并旋转的方块。
+
+==== 球面线性插值(Slerp)
+
+Slerp就是球面线性插值的英文单词快读结果,写出来是 Spherical linear interpolation。一个Slerp就是一个插值变换,用来做简化的3D引擎动画。定义初始状态和结束状态,然后slerp插入中间过程,做出从一个状态到另一个状态的等速变换。你可以正常播放、暂停、回放、快进该动作。 link:http://javadoc.jmonkeyengine.org/com/jme3/math/Quaternion.html#slerp-com.jme3.math.Quaternion-com.jme3.math.Quaternion-float-[JavaDoc:slerp()]
+
+*举例:* 一个正在燃烧的陨石形状几何体,位置p1,旋转速度r2,缩放比例s1。从天空下坠到地面"p2, r2, s2",对它做球面线性插值。
+
+<<jme3/math#, 了解更多有关3D数学内容请点击这里。>>
+
+== 游戏开发行话
+
+*  link:http://www.gamasutra.com/view/feature/6504/a_game_studio_culture_dictionary.php?print=1[A Game Studio Culture Dictionary]
+
+== 3D图形术语wiki百科
+
+*  link:http://en.wikipedia.org/wiki/User:Jreynaga/Books/3D_Graphics_Terms[http://en.wikipedia.org/wiki/User:Jreynaga/Books/3D_Graphics_Terms]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/jme3/the_scene_graph.adoc

@@ -0,0 +1,7 @@
+= THE SCENE GRAPH
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/application_deployment.adoc

@@ -0,0 +1,7 @@
+= APPLICATION DEPLOYMENT
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/code_editor.adoc

@@ -0,0 +1,7 @@
+= CODE EDITOR
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/create_project.adoc

@@ -0,0 +1,7 @@
+= CREATE PROJECT
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/debugging_profiling_testing.adoc

@@ -0,0 +1,7 @@
+= DEBUGGING PROFILING TESTING
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/default_build_script.adoc

@@ -0,0 +1,7 @@
+= DEFAULT BUILD SCRIPT
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/deployment_android.adoc

@@ -0,0 +1,7 @@
+= DEPLOYMENT ANDROID
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/deployment_ios.adoc

@@ -0,0 +1,7 @@
+= DEPLOYMENT IOS
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/overview.adoc

@@ -0,0 +1,7 @@
+= OVERVIEW
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/trobleshooting.adoc

@@ -0,0 +1,7 @@
+= TROBLESHOOTING
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/update_center.adoc

@@ -0,0 +1,7 @@
+= UPDATE CENTER
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]

+ 7 - 0
src/docs/asciidoc/zh-Hans-CN/sdk/version_control.adoc

@@ -0,0 +1,7 @@
+= VERSION CONTROL
+:author: yanmaoyuan
+:revnumber:
+:revdate: 2018/01/15 16:29
+:experimental:
+:keywords:
+ifdef::env-github,env-browser[:outfilesuffix: .adoc]