hello_asset.html 66 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>jMonkeyEngine 3 Tutorial (3) - Hello Assets :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/3.8/tutorials/beginner/hello_asset.html">
  8. <link rel="prev" href="hello_node.html">
  9. <link rel="next" href="hello_main_event_loop.html">
  10. <meta name="keywords" content="beginner, intro, documentation, lightnode, material, model, node, gui, hud, texture">
  11. <meta name="generator" content="Antora 3.0.1">
  12. <link rel="stylesheet" href="../../../../_/css/site.css">
  13. <meta property="og:image" content="https://wiki.jmonkeyengine.org/_/img/iconx128.png">
  14. <meta property="og:description" content="jMonkeyEngine 3 Tutorial (3) - Hello Assets">
  15. <meta property="og:title" content="jMonkeyEngine Docs">
  16. <link rel="stylesheet" href="../../../../_/css/site-extra.css">
  17. <link rel="stylesheet" href="../../../../_/css/vendor/docsearch.min.css">
  18. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css -->
  19. <link rel="icon" href="../../../../_/img/favicon.ico" type="image/x-icon">
  20. </head>
  21. <body class="article">
  22. <header class="header">
  23. <nav class="navbar">
  24. <div class="navbar-brand">
  25. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  26. <img alt="" src="../../../../_/img/jme-logo.png" height="32" type="image/x-icon">
  27. </a>
  28. <div class="navbar-item hide-for-print">
  29. <input id="search-input" type="text" placeholder="Search docs">
  30. </div>
  31. <button class="navbar-burger" data-target="topbar-nav">
  32. <span></span>
  33. <span></span>
  34. <span></span>
  35. </button>
  36. </div>
  37. <div id="topbar-nav" class="navbar-menu">
  38. <div class="navbar-end">
  39. <div class="navbar-item theme-switch-wrapper">
  40. <label class="theme-switch" for="checkbox">
  41. <input type="checkbox" id="checkbox" />
  42. <div class="slider round"></div>
  43. </label>
  44. </div>
  45. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  46. </div>
  47. </div>
  48. </nav>
  49. </header>
  50. <div class="body">
  51. <div class="nav-container" data-component="docs" data-version="3.4">
  52. <aside class="nav">
  53. <div class="panels">
  54. <div class="nav-panel-menu is-active" data-panel="menu">
  55. <nav class="nav-menu">
  56. <h3 class="title"><a href="../../documentation.html">JME</a></h3>
  57. <ul class="nav-list">
  58. <li class="nav-item" data-depth="0">
  59. <ul class="nav-list">
  60. <li class="nav-item" data-depth="1">
  61. <a class="nav-link" href="../../documentation.html">Getting Started</a>
  62. </li>
  63. <li class="nav-item" data-depth="1">
  64. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.4.1-stable">JavaDoc</a>
  65. </li>
  66. <li class="nav-item" data-depth="1">
  67. <a class="nav-link" href="../../release.html">Release Guide</a>
  68. </li>
  69. </ul>
  70. </li>
  71. <li class="nav-item" data-depth="0">
  72. <ul class="nav-list">
  73. <li class="nav-item" data-depth="1">
  74. <button class="nav-item-toggle"></button>
  75. <a class="nav-link" href="beginner.html">Beginner Tutorials</a>
  76. <ul class="nav-list">
  77. <li class="nav-item" data-depth="2">
  78. <a class="nav-link" href="hello_simpleapplication.html">Hello SimpleApplication</a>
  79. </li>
  80. <li class="nav-item" data-depth="2">
  81. <a class="nav-link" href="hello_node.html">Hello Node</a>
  82. </li>
  83. <li class="nav-item is-current-page" data-depth="2">
  84. <a class="nav-link" href="hello_asset.html">Hello Asset</a>
  85. </li>
  86. <li class="nav-item" data-depth="2">
  87. <a class="nav-link" href="hello_main_event_loop.html">Hello Update Loop</a>
  88. </li>
  89. <li class="nav-item" data-depth="2">
  90. <a class="nav-link" href="hello_input_system.html">Hello Input System</a>
  91. </li>
  92. <li class="nav-item" data-depth="2">
  93. <a class="nav-link" href="hello_material.html">Hello Material</a>
  94. </li>
  95. <li class="nav-item" data-depth="2">
  96. <a class="nav-link" href="hello_animation.html">Hello Animation</a>
  97. </li>
  98. <li class="nav-item" data-depth="2">
  99. <a class="nav-link" href="hello_picking.html">Hello Picking</a>
  100. </li>
  101. <li class="nav-item" data-depth="2">
  102. <a class="nav-link" href="hello_collision.html">Hello Collision</a>
  103. </li>
  104. <li class="nav-item" data-depth="2">
  105. <a class="nav-link" href="hello_terrain.html">Hello Terrain</a>
  106. </li>
  107. <li class="nav-item" data-depth="2">
  108. <a class="nav-link" href="hello_audio.html">Hello Audio</a>
  109. </li>
  110. <li class="nav-item" data-depth="2">
  111. <a class="nav-link" href="hello_effects.html">Hello Effects</a>
  112. </li>
  113. <li class="nav-item" data-depth="2">
  114. <a class="nav-link" href="hello_physics.html">Hello Physics</a>
  115. </li>
  116. </ul>
  117. </li>
  118. <li class="nav-item" data-depth="1">
  119. <button class="nav-item-toggle"></button>
  120. <span class="nav-text">Key Concepts</span>
  121. <ul class="nav-list">
  122. <li class="nav-item" data-depth="2">
  123. <a class="nav-link" href="../concepts/best_practices.html">Best Practices</a>
  124. </li>
  125. <li class="nav-item" data-depth="2">
  126. <a class="nav-link" href="../concepts/optimization.html">Optimization</a>
  127. </li>
  128. <li class="nav-item" data-depth="2">
  129. <a class="nav-link" href="../concepts/faq.html">Frequently Asked Questions</a>
  130. </li>
  131. <li class="nav-item" data-depth="2">
  132. <a class="nav-link" href="../concepts/math_for_dummies.html">Math for Dummies</a>
  133. </li>
  134. <li class="nav-item" data-depth="2">
  135. <a class="nav-link" href="../concepts/math.html">Math overview</a>
  136. </li>
  137. <li class="nav-item" data-depth="2">
  138. <a class="nav-link" href="../concepts/math_cheet_sheet.html">3D math "cheat sheet"</a>
  139. </li>
  140. <li class="nav-item" data-depth="2">
  141. <a class="nav-link" href="../concepts/rotate.html">3-D Rotation</a>
  142. </li>
  143. <li class="nav-item" data-depth="2">
  144. <a class="nav-link" href="../concepts/math_video_tutorials.html">Math video tutorial series</a>
  145. </li>
  146. <li class="nav-item" data-depth="2">
  147. <a class="nav-link" href="../concepts/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  148. </li>
  149. <li class="nav-item" data-depth="2">
  150. <a class="nav-link" href="../concepts/the_scene_graph.html">The Scene Graph</a>
  151. </li>
  152. <li class="nav-item" data-depth="2">
  153. <a class="nav-link" href="../concepts/scenegraph_for_dummies.html">Scene Graph for Dummies</a>
  154. </li>
  155. <li class="nav-item" data-depth="2">
  156. <a class="nav-link" href="../concepts/terminology.html">3D Graphics Terminology</a>
  157. </li>
  158. <li class="nav-item" data-depth="2">
  159. <a class="nav-link" href="../concepts/transparency_sorting.html">Transparency Sorting</a>
  160. </li>
  161. </ul>
  162. </li>
  163. <li class="nav-item" data-depth="1">
  164. <button class="nav-item-toggle"></button>
  165. <span class="nav-text">Articles and How-to&#8217;s</span>
  166. <ul class="nav-list">
  167. <li class="nav-item" data-depth="2">
  168. <button class="nav-item-toggle"></button>
  169. <span class="nav-text">How to Model</span>
  170. <ul class="nav-list">
  171. <li class="nav-item" data-depth="3">
  172. <a class="nav-link" href="../how-to/modeling/3dsmax/3dsmax.html">3dsmax</a>
  173. </li>
  174. <li class="nav-item" data-depth="3">
  175. <button class="nav-item-toggle"></button>
  176. <a class="nav-link" href="../how-to/modeling/blender/blender.html">Blender</a>
  177. <ul class="nav-list">
  178. <li class="nav-item" data-depth="4">
  179. <a class="nav-link" href="../how-to/modeling/blender/blender_buffer_clearing.html">Buffer Clearing</a>
  180. </li>
  181. <li class="nav-item" data-depth="4">
  182. <a class="nav-link" href="../how-to/modeling/blender/blender_gltf.html">Export as GlTF</a>
  183. </li>
  184. <li class="nav-item" data-depth="4">
  185. <a class="nav-link" href="../how-to/modeling/blender/blender_ogre_export.html">Export as Ogre XML</a>
  186. </li>
  187. <li class="nav-item" data-depth="4">
  188. <a class="nav-link" href="../how-to/modeling/blender/blender_ogre_compatibility.html">Ogre Compatibility</a>
  189. </li>
  190. <li class="nav-item" data-depth="4">
  191. <a class="nav-link" href="../how-to/modeling/blender/makehuman.html">MakeHuman</a>
  192. </li>
  193. <li class="nav-item" data-depth="4">
  194. <a class="nav-link" href="../how-to/modeling/blender/makehuman_blender_ogrexml_toolchain.html">MakeHuman toolchain</a>
  195. </li>
  196. </ul>
  197. </li>
  198. </ul>
  199. </li>
  200. <li class="nav-item" data-depth="2">
  201. <button class="nav-item-toggle"></button>
  202. <span class="nav-text">How to Animate</span>
  203. <ul class="nav-list">
  204. <li class="nav-item" data-depth="3">
  205. <button class="nav-item-toggle"></button>
  206. <span class="nav-text">Mixamo</span>
  207. <ul class="nav-list">
  208. <li class="nav-item" data-depth="4">
  209. <a class="nav-link" href="../how-to/modeling/blender/mixamo.html">Blender Models</a>
  210. </li>
  211. <li class="nav-item" data-depth="4">
  212. <button class="nav-item-toggle"></button>
  213. <span class="nav-text">Video</span>
  214. <ul class="nav-list">
  215. <li class="nav-item" data-depth="5">
  216. <a class="nav-link" href="https://youtu.be/jHgAgTWIers?list=PLv6qR9TGkz8RcUr-fOHI2SksWA4BAU9TS">Part 1- Download Model</a>
  217. </li>
  218. <li class="nav-item" data-depth="5">
  219. <a class="nav-link" href="https://youtu.be/GQJSrOpNQwI?list=PLv6qR9TGkz8RcUr-fOHI2SksWA4BAU9TS">Part 2- Rig and Animate</a>
  220. </li>
  221. <li class="nav-item" data-depth="5">
  222. <a class="nav-link" href="https://youtu.be/JzRe2Dxbcmc?list=PLv6qR9TGkz8RcUr-fOHI2SksWA4BAU9TS">Part 3- Import to JME</a>
  223. </li>
  224. <li class="nav-item" data-depth="5">
  225. <a class="nav-link" href="https://youtu.be/8wwDRDJop7k?list=PLv6qR9TGkz8RcUr-fOHI2SksWA4BAU9TS">Part 4- Play Animation</a>
  226. </li>
  227. </ul>
  228. </li>
  229. </ul>
  230. </li>
  231. </ul>
  232. </li>
  233. <li class="nav-item" data-depth="2">
  234. <a class="nav-link" href="../how-to/debugging.html">Debugging with Wireframes</a>
  235. </li>
  236. <li class="nav-item" data-depth="2">
  237. <a class="nav-link" href="../how-to/util/free_skymaps.html">How to create free skymaps</a>
  238. </li>
  239. <li class="nav-item" data-depth="2">
  240. <button class="nav-item-toggle"></button>
  241. <span class="nav-text">Java Tips</span>
  242. <ul class="nav-list">
  243. <li class="nav-item" data-depth="3">
  244. <a class="nav-link" href="../how-to/java/localization.html">Localization</a>
  245. </li>
  246. <li class="nav-item" data-depth="3">
  247. <a class="nav-link" href="../how-to/java/swing_canvas.html">Swing Canvas</a>
  248. </li>
  249. <li class="nav-item" data-depth="3">
  250. <a class="nav-link" href="../how-to/java/logging.html">Logging</a>
  251. </li>
  252. <li class="nav-item" data-depth="3">
  253. <a class="nav-link" href="../how-to/java/read_graphic_card_capabilites.html">Read Graphics Capabilities</a>
  254. </li>
  255. </ul>
  256. </li>
  257. <li class="nav-item" data-depth="2">
  258. <button class="nav-item-toggle"></button>
  259. <span class="nav-text">Articles</span>
  260. <ul class="nav-list">
  261. <li class="nav-item" data-depth="3">
  262. <button class="nav-item-toggle"></button>
  263. <span class="nav-text">Physically Based Rendering</span>
  264. <ul class="nav-list">
  265. <li class="nav-item" data-depth="4">
  266. <a class="nav-link" href="../how-to/articles/pbr/pbr_part1.html">PBR – Part one</a>
  267. </li>
  268. <li class="nav-item" data-depth="4">
  269. <a class="nav-link" href="../how-to/articles/pbr/pbr_part2.html">PBR – Part two</a>
  270. </li>
  271. <li class="nav-item" data-depth="4">
  272. <a class="nav-link" href="../how-to/articles/pbr/pbr_part3.html">PBR – Part three</a>
  273. </li>
  274. </ul>
  275. </li>
  276. </ul>
  277. </li>
  278. </ul>
  279. </li>
  280. </ul>
  281. </li>
  282. <li class="nav-item" data-depth="0">
  283. <ul class="nav-list">
  284. <li class="nav-item" data-depth="1">
  285. <button class="nav-item-toggle"></button>
  286. <span class="nav-text">Core Engine</span>
  287. <ul class="nav-list">
  288. <li class="nav-item" data-depth="2">
  289. <a class="nav-link" href="../../core/app/simpleapplication.html">SimpleApplication</a>
  290. </li>
  291. <li class="nav-item" data-depth="2">
  292. <a class="nav-link" href="../../core/system/appsettings.html">AppSettings</a>
  293. </li>
  294. </ul>
  295. </li>
  296. <li class="nav-item" data-depth="1">
  297. <button class="nav-item-toggle"></button>
  298. <span class="nav-text">Controlling Game Logic</span>
  299. <ul class="nav-list">
  300. <li class="nav-item" data-depth="2">
  301. <a class="nav-link" href="../../core/app/update_loop.html">Update Loop</a>
  302. </li>
  303. <li class="nav-item" data-depth="2">
  304. <a class="nav-link" href="../../core/app/state/application_states.html">Application States</a>
  305. </li>
  306. <li class="nav-item" data-depth="2">
  307. <button class="nav-item-toggle"></button>
  308. <a class="nav-link" href="../../core/scene/control/custom_controls.html">Custom Controls</a>
  309. <ul class="nav-list">
  310. <li class="nav-item" data-depth="3">
  311. <button class="nav-item-toggle"></button>
  312. <span class="nav-text">Video</span>
  313. <ul class="nav-list">
  314. <li class="nav-item" data-depth="4">
  315. <a class="nav-link" href="https://www.youtube.com/watch?v=MNDiZ9YHIpM">Control any scene node</a>
  316. </li>
  317. <li class="nav-item" data-depth="4">
  318. <a class="nav-link" href="https://www.youtube.com/watch?v=-OzRZscLlHY">Control a character</a>
  319. </li>
  320. <li class="nav-item" data-depth="4">
  321. <a class="nav-link" href="https://wiki.jmonkeyengine.org/Scenes/SDK-UsecaseDemo_1.zip">Video Source Code</a>
  322. </li>
  323. </ul>
  324. </li>
  325. </ul>
  326. </li>
  327. <li class="nav-item" data-depth="2">
  328. <a class="nav-link" href="../../core/app/multithreading.html">Multithreading</a>
  329. </li>
  330. </ul>
  331. </li>
  332. <li class="nav-item" data-depth="1">
  333. <button class="nav-item-toggle"></button>
  334. <span class="nav-text">Scene Graph</span>
  335. <ul class="nav-list">
  336. <li class="nav-item" data-depth="2">
  337. <a class="nav-link" href="../../core/scene/traverse_scenegraph.html">Traverse SceneGraph</a>
  338. </li>
  339. <li class="nav-item" data-depth="2">
  340. <a class="nav-link" href="../../core/scene/spatial.html">Spatial: Node vs Geometry</a>
  341. </li>
  342. <li class="nav-item" data-depth="2">
  343. <button class="nav-item-toggle"></button>
  344. <a class="nav-link" href="../../core/scene/mesh.html">Mesh</a>
  345. <ul class="nav-list">
  346. <li class="nav-item" data-depth="3">
  347. <a class="nav-link" href="../../core/scene/custom_meshes.html">Custom Meshes</a>
  348. </li>
  349. <li class="nav-item" data-depth="3">
  350. <a class="nav-link" href="../../core/scene/shape/shape.html">Shape</a>
  351. </li>
  352. <li class="nav-item" data-depth="3">
  353. <a class="nav-link" href="../../core/scene/3d_models.html">3D Models</a>
  354. </li>
  355. </ul>
  356. </li>
  357. <li class="nav-item" data-depth="2">
  358. <a class="nav-link" href="../../core/asset/asset_manager.html">Asset Manager</a>
  359. </li>
  360. <li class="nav-item" data-depth="2">
  361. <a class="nav-link" href="../../core/export/save_and_load.html">Saving and Loading Nodes</a>
  362. </li>
  363. <li class="nav-item" data-depth="2">
  364. <a class="nav-link" href="../../core/collision/collision_and_intersection.html">Collision and Intersection</a>
  365. </li>
  366. <li class="nav-item" data-depth="2">
  367. <a class="nav-link" href="../../core/scene/control/level_of_detail.html">Level of Detail</a>
  368. </li>
  369. </ul>
  370. </li>
  371. <li class="nav-item" data-depth="1">
  372. <button class="nav-item-toggle"></button>
  373. <span class="nav-text">Animation, Scene</span>
  374. <ul class="nav-list">
  375. <li class="nav-item" data-depth="2">
  376. <a class="nav-link" href="../../core/animation/animation.html">Animation-Old</a>
  377. </li>
  378. <li class="nav-item" data-depth="2">
  379. <a class="nav-link" href="../../core/cinematic/cinematics.html">Cinematics (cutscenes, fake destruction physics)</a>
  380. </li>
  381. <li class="nav-item" data-depth="2">
  382. <a class="nav-link" href="../../core/cinematic/motionpath.html">MotionPaths and Waypoints</a>
  383. </li>
  384. </ul>
  385. </li>
  386. <li class="nav-item" data-depth="1">
  387. <button class="nav-item-toggle"></button>
  388. <span class="nav-text">Material, Light, Shadow</span>
  389. <ul class="nav-list">
  390. <li class="nav-item" data-depth="2">
  391. <a class="nav-link" href="../../core/material/how_to_use_materials.html">How to use Materials</a>
  392. </li>
  393. <li class="nav-item" data-depth="2">
  394. <a class="nav-link" href="../../core/material/j3m_material_files.html">.j3m Material Files</a>
  395. </li>
  396. <li class="nav-item" data-depth="2">
  397. <a class="nav-link" href="../../core/material/material_definitions.html">.j3md Material Definitions</a>
  398. </li>
  399. <li class="nav-item" data-depth="2">
  400. <a class="nav-link" href="../../core/material/materials_overview.html">.j3md Properties</a>
  401. </li>
  402. <li class="nav-item" data-depth="2">
  403. <a class="nav-link" href="../../core/shader/jme3_shaders.html">Shaders and JME3</a>
  404. </li>
  405. <li class="nav-item" data-depth="2">
  406. <a class="nav-link" href="../../core/shader/jme3_shadernodes.html">Shader Node System</a>
  407. </li>
  408. <li class="nav-item" data-depth="2">
  409. <a class="nav-link" href="../../core/shader/shader_video_tutorials.html">Shader Video Tutorials</a>
  410. </li>
  411. <li class="nav-item" data-depth="2">
  412. <a class="nav-link" href="../../core/light/light_and_shadow.html">Light and Shadow</a>
  413. </li>
  414. <li class="nav-item" data-depth="2">
  415. <a class="nav-link" href="../../core/texture/anisotropic_filtering.html">Anisotropic Filtering</a>
  416. </li>
  417. <li class="nav-item" data-depth="2">
  418. <a class="nav-link" href="../../core/system/jme3_srgbpipeline.html">Gamma Correction</a>
  419. </li>
  420. </ul>
  421. </li>
  422. <li class="nav-item" data-depth="1">
  423. <button class="nav-item-toggle"></button>
  424. <span class="nav-text">Audio, Video</span>
  425. <ul class="nav-list">
  426. <li class="nav-item" data-depth="2">
  427. <a class="nav-link" href="../../core/audio/audio.html">Playing Sounds</a>
  428. </li>
  429. <li class="nav-item" data-depth="2">
  430. <a class="nav-link" href="../../core/audio/audio_environment_presets.html">Audio Environment Presets</a>
  431. </li>
  432. <li class="nav-item" data-depth="2">
  433. <a class="nav-link" href="../../core/app/state/screenshots.html">Capture Screenshots</a>
  434. </li>
  435. <li class="nav-item" data-depth="2">
  436. <a class="nav-link" href="../../core/app/state/capture_audio_video_to_a_file.html">Capture Audio/Video</a>
  437. </li>
  438. </ul>
  439. </li>
  440. <li class="nav-item" data-depth="1">
  441. <button class="nav-item-toggle"></button>
  442. <span class="nav-text">Filter, Effect</span>
  443. <ul class="nav-list">
  444. <li class="nav-item" data-depth="2">
  445. <a class="nav-link" href="../../core/effect/effects_overview.html">Overview</a>
  446. </li>
  447. <li class="nav-item" data-depth="2">
  448. <a class="nav-link" href="../../core/effect/bloom_and_glow.html">Bloom and Glow</a>
  449. </li>
  450. <li class="nav-item" data-depth="2">
  451. <a class="nav-link" href="../../core/effect/particle_emitters.html">Particle Emitters</a>
  452. </li>
  453. </ul>
  454. </li>
  455. <li class="nav-item" data-depth="1">
  456. <button class="nav-item-toggle"></button>
  457. <span class="nav-text">Landscapes</span>
  458. <ul class="nav-list">
  459. <li class="nav-item" data-depth="2">
  460. <a class="nav-link" href="../../core/util/sky.html">Sky</a>
  461. </li>
  462. <li class="nav-item" data-depth="2">
  463. <a class="nav-link" href="../../core/terrain/terrain.html">Terrain (TerraMonkey)</a>
  464. </li>
  465. <li class="nav-item" data-depth="2">
  466. <a class="nav-link" href="../../core/collision/terrain_collision.html">Terrain Collision</a>
  467. </li>
  468. <li class="nav-item" data-depth="2">
  469. <a class="nav-link" href="../../core/effect/water.html">Simple Water</a>
  470. </li>
  471. <li class="nav-item" data-depth="2">
  472. <a class="nav-link" href="../../core/effect/post-processor_water.html">Post-Processor Water</a>
  473. </li>
  474. </ul>
  475. </li>
  476. <li class="nav-item" data-depth="1">
  477. <button class="nav-item-toggle"></button>
  478. <span class="nav-text">Camera</span>
  479. <ul class="nav-list">
  480. <li class="nav-item" data-depth="2">
  481. <a class="nav-link" href="../../core/renderer/camera.html">Camera</a>
  482. </li>
  483. <li class="nav-item" data-depth="2">
  484. <a class="nav-link" href="../../core/renderer/making_the_camera_follow_a_character.html">Follow a Character</a>
  485. </li>
  486. <li class="nav-item" data-depth="2">
  487. <a class="nav-link" href="../../core/renderer/remote-controlling_the_camera.html">Remote-Controlling</a>
  488. </li>
  489. <li class="nav-item" data-depth="2">
  490. <a class="nav-link" href="../../core/renderer/multiple_camera_views.html">Multiple Camera Views</a>
  491. </li>
  492. <li class="nav-item" data-depth="2">
  493. <a class="nav-link" href="../../core/renderer/jme3_renderbuckets.html">Render Buckets</a>
  494. </li>
  495. </ul>
  496. </li>
  497. <li class="nav-item" data-depth="1">
  498. <button class="nav-item-toggle"></button>
  499. <span class="nav-text">User Interaction</span>
  500. <ul class="nav-list">
  501. <li class="nav-item" data-depth="2">
  502. <a class="nav-link" href="../../core/input/input_handling.html">Input Handling</a>
  503. </li>
  504. <li class="nav-item" data-depth="2">
  505. <a class="nav-link" href="../../core/input/combo_moves.html">Combo Moves</a>
  506. </li>
  507. <li class="nav-item" data-depth="2">
  508. <a class="nav-link" href="../../core/input/mouse_picking.html">Mouse Picking</a>
  509. </li>
  510. </ul>
  511. </li>
  512. <li class="nav-item" data-depth="1">
  513. <button class="nav-item-toggle"></button>
  514. <a class="nav-link" href="../../core/gui/topic_gui.html">Graphical User Interface</a>
  515. <ul class="nav-list">
  516. <li class="nav-item" data-depth="2">
  517. <button class="nav-item-toggle"></button>
  518. <span class="nav-text">Nifty GUI</span>
  519. <ul class="nav-list">
  520. <li class="nav-item" data-depth="3">
  521. <a class="nav-link" href="../../core/gui/nifty_gui.html">Integration Tutorial</a>
  522. </li>
  523. <li class="nav-item" data-depth="3">
  524. <a class="nav-link" href="../../core/gui/nifty_gui_best_practices.html">Best Practices</a>
  525. </li>
  526. <li class="nav-item" data-depth="3">
  527. <a class="nav-link" href="../../core/gui/nifty_gui_scenarios.html">Scenarios</a>
  528. </li>
  529. </ul>
  530. </li>
  531. <li class="nav-item" data-depth="2">
  532. <a class="nav-link" href="../../core/ui/hud.html">Head-Up Display (HUD)</a>
  533. </li>
  534. </ul>
  535. </li>
  536. <li class="nav-item" data-depth="1">
  537. <button class="nav-item-toggle"></button>
  538. <span class="nav-text">Virtual Reality</span>
  539. <ul class="nav-list">
  540. <li class="nav-item" data-depth="2">
  541. <a class="nav-link" href="../../core/vr/virtualreality.html">Virtual Reality</a>
  542. </li>
  543. <li class="nav-item" data-depth="2">
  544. <a class="nav-link" href="../../core/vr/virtualrealitycontrollers.html">Virtual Reality Controllers</a>
  545. </li>
  546. </ul>
  547. </li>
  548. </ul>
  549. </li>
  550. <li class="nav-item" data-depth="0">
  551. <ul class="nav-list">
  552. <li class="nav-item" data-depth="1">
  553. <button class="nav-item-toggle"></button>
  554. <a class="nav-link" href="../../physics/physics.html">Physics</a>
  555. <ul class="nav-list">
  556. <li class="nav-item" data-depth="2">
  557. <a class="nav-link" href="../../physics/bullet_multithreading.html">Multi-Threaded Physics</a>
  558. </li>
  559. <li class="nav-item" data-depth="2">
  560. <a class="nav-link" href="../../physics/collision/physics_listeners.html">Collision Detection</a>
  561. </li>
  562. <li class="nav-item" data-depth="2">
  563. <a class="nav-link" href="../../physics/joint/hinges_and_joints.html">Hinges and Joints</a>
  564. </li>
  565. <li class="nav-item" data-depth="2">
  566. <a class="nav-link" href="../../physics/control/walking_character.html">Walking Character</a>
  567. </li>
  568. <li class="nav-item" data-depth="2">
  569. <a class="nav-link" href="../../physics/control/ragdoll.html">Ragdoll</a>
  570. </li>
  571. <li class="nav-item" data-depth="2">
  572. <a class="nav-link" href="../../physics/control/vehicles.html">Vehicles</a>
  573. </li>
  574. <li class="nav-item" data-depth="2">
  575. <a class="nav-link" href="../../physics/control/softbody.html">Softbody</a>
  576. </li>
  577. <li class="nav-item" data-depth="2">
  578. <a class="nav-link" href="../../physics/bullet_pitfalls.html">Bullet Physics Pitfalls</a>
  579. </li>
  580. </ul>
  581. </li>
  582. </ul>
  583. </li>
  584. <li class="nav-item" data-depth="0">
  585. <ul class="nav-list">
  586. <li class="nav-item" data-depth="1">
  587. <button class="nav-item-toggle"></button>
  588. <span class="nav-text">Networking</span>
  589. <ul class="nav-list">
  590. <li class="nav-item" data-depth="2">
  591. <a class="nav-link" href="../../networking/networking.html">Networking (SpiderMonkey)</a>
  592. </li>
  593. <li class="nav-item" data-depth="2">
  594. <a class="nav-link" href="../../networking/headless_server.html">Headless Server</a>
  595. </li>
  596. <li class="nav-item" data-depth="2">
  597. <a class="nav-link" href="../../networking/monkey_zone.html">Multi-Player Demo Code</a>
  598. </li>
  599. <li class="nav-item" data-depth="2">
  600. <a class="nav-link" href="../../networking/networking_video_tutorials.html">Networking Video Tutorials</a>
  601. </li>
  602. </ul>
  603. </li>
  604. </ul>
  605. </li>
  606. <li class="nav-item" data-depth="0">
  607. <ul class="nav-list">
  608. <li class="nav-item" data-depth="1">
  609. <button class="nav-item-toggle"></button>
  610. <span class="nav-text">User Contributions</span>
  611. <ul class="nav-list">
  612. <li class="nav-item" data-depth="2">
  613. <a class="nav-link" href="../../contributions/contributions.html">User Made Utilities</a>
  614. </li>
  615. <li class="nav-item" data-depth="2">
  616. <button class="nav-item-toggle"></button>
  617. <span class="nav-text">Shader</span>
  618. <ul class="nav-list">
  619. <li class="nav-item" data-depth="3">
  620. <a class="nav-link" href="../../contributions/shader/shaderblow_project.html">ShaderBlow Project</a>
  621. </li>
  622. </ul>
  623. </li>
  624. <li class="nav-item" data-depth="2">
  625. <button class="nav-item-toggle"></button>
  626. <span class="nav-text">Landscapes</span>
  627. <ul class="nav-list">
  628. <li class="nav-item" data-depth="3">
  629. <a class="nav-link" href="../../contributions/lanscapes/vegetationsystem/vegetationsystem.html">Vegetation System</a>
  630. </li>
  631. </ul>
  632. </li>
  633. <li class="nav-item" data-depth="2">
  634. <button class="nav-item-toggle"></button>
  635. <span class="nav-text">Networking</span>
  636. <ul class="nav-list">
  637. <li class="nav-item" data-depth="3">
  638. <a class="nav-link" href="../../contributions/networking/open_game_finder.html">Open Game Finder</a>
  639. </li>
  640. </ul>
  641. </li>
  642. <li class="nav-item" data-depth="2">
  643. <button class="nav-item-toggle"></button>
  644. <span class="nav-text">Entity System</span>
  645. <ul class="nav-list">
  646. <li class="nav-item" data-depth="3">
  647. <a class="nav-link" href="#es/entitysystem.adoc">The Zay-ES Entity System</a>
  648. </li>
  649. </ul>
  650. </li>
  651. <li class="nav-item" data-depth="2">
  652. <button class="nav-item-toggle"></button>
  653. <span class="nav-text">Artificial Intelligence</span>
  654. <ul class="nav-list">
  655. <li class="nav-item" data-depth="3">
  656. <a class="nav-link" href="../../contributions/ai/recast.html">Recast Navigation</a>
  657. </li>
  658. <li class="nav-item" data-depth="3">
  659. <a class="nav-link" href="../../contributions/ai/building_recast.html">Updating and building Recast Native Bindings</a>
  660. </li>
  661. <li class="nav-item" data-depth="3">
  662. <a class="nav-link" href="../../contributions/ai/monkey_brains.html">Monkey Brains</a>
  663. </li>
  664. <li class="nav-item" data-depth="3">
  665. <a class="nav-link" href="../../contributions/ai/steer_behaviours.html">Steer Behaviours</a>
  666. </li>
  667. <li class="nav-item" data-depth="3">
  668. <a class="nav-link" href="../../contributions/ai/jme3_ai.html">jME3 Artificial Intelligence</a>
  669. </li>
  670. </ul>
  671. </li>
  672. <li class="nav-item" data-depth="2">
  673. <button class="nav-item-toggle"></button>
  674. <a class="nav-link" href="../../contributions/gui/topic_contributions_gui.html">GUI</a>
  675. <ul class="nav-list">
  676. <li class="nav-item" data-depth="3">
  677. <a class="nav-link" href="../../contributions/contributions.html#lemur-gui-library">Lemur - a native jME3 GUI library with scene graph tools</a>
  678. </li>
  679. <li class="nav-item" data-depth="3">
  680. <a class="nav-link" href="../../contributions/contributions.html#tonegodgui">tonegodGUI - a native jME3 GUI library</a>
  681. </li>
  682. <li class="nav-item" data-depth="3">
  683. <a class="nav-link" href="../../contributions/contributions.html#immediate-graphical-user-interface">Immediate graphical user interface</a>
  684. </li>
  685. </ul>
  686. </li>
  687. <li class="nav-item" data-depth="2">
  688. <button class="nav-item-toggle"></button>
  689. <span class="nav-text">Tools</span>
  690. <ul class="nav-list">
  691. <li class="nav-item" data-depth="3">
  692. <a class="nav-link" href="../../contributions/tools/navigation.html">Mercator Projection Tool (Marine Navigation)</a>
  693. </li>
  694. <li class="nav-item" data-depth="3">
  695. <a class="nav-link" href="../../contributions/tools/charts.html">Visualizing Maps in JME3 (Marine Charts)</a>
  696. </li>
  697. </ul>
  698. </li>
  699. <li class="nav-item" data-depth="2">
  700. <button class="nav-item-toggle"></button>
  701. <span class="nav-text">Projects</span>
  702. <ul class="nav-list">
  703. <li class="nav-item" data-depth="3">
  704. <a class="nav-link" href="../../contributions/projects/rise_of_mutants_project.html">Rise of Mutants Project</a>
  705. </li>
  706. </ul>
  707. </li>
  708. </ul>
  709. </li>
  710. </ul>
  711. </li>
  712. <li class="nav-item" data-depth="0">
  713. <ul class="nav-list">
  714. <li class="nav-item" data-depth="1">
  715. <button class="nav-item-toggle"></button>
  716. <a class="nav-link" href="../../sdk/sdk.html">SDK</a>
  717. <ul class="nav-list">
  718. <li class="nav-item" data-depth="2">
  719. <button class="nav-item-toggle"></button>
  720. <span class="nav-text">Video Tutorials</span>
  721. <ul class="nav-list">
  722. <li class="nav-item" data-depth="3">
  723. <button class="nav-item-toggle"></button>
  724. <span class="nav-text">SDK Use Case Tutorials</span>
  725. <ul class="nav-list">
  726. <li class="nav-item" data-depth="4">
  727. <a class="nav-link" href="http://www.youtube.com/watch?v=-OzRZscLlHY">Demo 1 (Quixote demo)</a>
  728. </li>
  729. <li class="nav-item" data-depth="4">
  730. <a class="nav-link" href="http://www.youtube.com/watch?v=6-YWxD3JByE">Demo 2 (Models and Materials)</a>
  731. </li>
  732. </ul>
  733. </li>
  734. <li class="nav-item" data-depth="3">
  735. <button class="nav-item-toggle"></button>
  736. <span class="nav-text">SDK Tutorials</span>
  737. <ul class="nav-list">
  738. <li class="nav-item" data-depth="4">
  739. <a class="nav-link" href="http://www.youtube.com/watch?v=M1_0pbeyJzI">Basics</a>
  740. </li>
  741. <li class="nav-item" data-depth="4">
  742. <a class="nav-link" href="http://www.youtube.com/watch?v=nL7woH40i5c">Importing Models</a>
  743. </li>
  744. <li class="nav-item" data-depth="4">
  745. <a class="nav-link" href="http://www.youtube.com/watch?v=DUmgAjiNzhY">Dragging&amp;Dropping Nodes</a>
  746. </li>
  747. <li class="nav-item" data-depth="4">
  748. <a class="nav-link" href="http://www.youtube.com/watch?v=ntPAmtsQ6eM">Scene Composing</a>
  749. </li>
  750. <li class="nav-item" data-depth="4">
  751. <a class="nav-link" href="http://www.youtube.com/watch?v=zgPV3W6dD4s">Terrain with Collision Shape</a>
  752. </li>
  753. <li class="nav-item" data-depth="4">
  754. <a class="nav-link" href="http://www.youtube.com/watch?v=Feu3-mrpolc">Working with Materials</a>
  755. </li>
  756. <li class="nav-item" data-depth="4">
  757. <a class="nav-link" href="http://www.youtube.com/watch?v=MNDiZ9YHIpM">Custom Controls</a>
  758. </li>
  759. <li class="nav-item" data-depth="4">
  760. <a class="nav-link" href="http://www.youtube.com/watch?v=oZnssg8TBWQ">WebStart Deployment</a>
  761. </li>
  762. <li class="nav-item" data-depth="4">
  763. <a class="nav-link" href="http://www.youtube.com/watch?v=D7JM4VMKqPc">Animation and Effect TrackEditing</a>
  764. </li>
  765. </ul>
  766. </li>
  767. </ul>
  768. </li>
  769. <li class="nav-item" data-depth="2">
  770. <button class="nav-item-toggle"></button>
  771. <span class="nav-text">Getting Started</span>
  772. <ul class="nav-list">
  773. <li class="nav-item" data-depth="3">
  774. <a class="nav-link" href="../../sdk/update_center.html">Updating jMonkeyEngine SDK</a>
  775. </li>
  776. <li class="nav-item" data-depth="3">
  777. <a class="nav-link" href="../../sdk/troubleshooting.html">Troubleshooting</a>
  778. </li>
  779. </ul>
  780. </li>
  781. <li class="nav-item" data-depth="2">
  782. <button class="nav-item-toggle"></button>
  783. <span class="nav-text">Java Development Features</span>
  784. <ul class="nav-list">
  785. <li class="nav-item" data-depth="3">
  786. <a class="nav-link" href="../../sdk/project_creation.html">Project Creation</a>
  787. </li>
  788. <li class="nav-item" data-depth="3">
  789. <a class="nav-link" href="../../sdk/code_editor.html">Code Editor and Palette</a>
  790. </li>
  791. <li class="nav-item" data-depth="3">
  792. <a class="nav-link" href="../../sdk/version_control.html">File Version Control</a>
  793. </li>
  794. <li class="nav-item" data-depth="3">
  795. <a class="nav-link" href="../../sdk/debugging_profiling_testing.html">Debug, Profile, Test</a>
  796. </li>
  797. <li class="nav-item" data-depth="3">
  798. <button class="nav-item-toggle"></button>
  799. <a class="nav-link" href="../../sdk/application_deployment.html">Application Deployment</a>
  800. <ul class="nav-list">
  801. <li class="nav-item" data-depth="4">
  802. <a class="nav-link" href="../../sdk/default_build_script.html">Default Build Script</a>
  803. </li>
  804. <li class="nav-item" data-depth="4">
  805. <a class="nav-link" href="../../sdk/android.html">Android</a>
  806. </li>
  807. <li class="nav-item" data-depth="4">
  808. <a class="nav-link" href="../../sdk/android_cheat_sheet.html">Android Cheat Sheet</a>
  809. </li>
  810. <li class="nav-item" data-depth="4">
  811. <a class="nav-link" href="../../sdk/ios.html">iOS</a>
  812. </li>
  813. </ul>
  814. </li>
  815. </ul>
  816. </li>
  817. <li class="nav-item" data-depth="2">
  818. <button class="nav-item-toggle"></button>
  819. <span class="nav-text">Unique Features</span>
  820. <ul class="nav-list">
  821. <li class="nav-item" data-depth="3">
  822. <button class="nav-item-toggle"></button>
  823. <a class="nav-link" href="../../sdk/model_loader_and_viewer.html">Import, View, Convert Models</a>
  824. <ul class="nav-list">
  825. <li class="nav-item" data-depth="4">
  826. <a class="nav-link" href="../../sdk/asset_packs.html">Asset Packs</a>
  827. </li>
  828. </ul>
  829. </li>
  830. <li class="nav-item" data-depth="3">
  831. <a class="nav-link" href="../../sdk/scene_explorer.html">The SceneExplorer</a>
  832. </li>
  833. <li class="nav-item" data-depth="3">
  834. <a class="nav-link" href="../../sdk/scene_composer.html">Composing a Scene</a>
  835. </li>
  836. <li class="nav-item" data-depth="3">
  837. <a class="nav-link" href="../../sdk/terrain_editor.html">Terrain Editor</a>
  838. </li>
  839. <li class="nav-item" data-depth="3">
  840. <a class="nav-link" href="../../sdk/sample_code.html">Sample Code</a>
  841. </li>
  842. <li class="nav-item" data-depth="3">
  843. <a class="nav-link" href="../../sdk/material_editing.html">Material Editing</a>
  844. </li>
  845. <li class="nav-item" data-depth="3">
  846. <a class="nav-link" href="../../sdk/font_creation.html">Creating Bitmap Fonts</a>
  847. </li>
  848. <li class="nav-item" data-depth="3">
  849. <button class="nav-item-toggle"></button>
  850. <a class="nav-link" href="https://hub.jmonkeyengine.org/t/effecttrack-and-audiotrack-editing-in-the-sdk/23378">Audio and Effect Track Editing</a>
  851. <ul class="nav-list">
  852. <li class="nav-item" data-depth="4">
  853. <a class="nav-link" href="https://www.youtube.com/watch?v=D7JM4VMKqPc">Video: Effect and AudioTrack editing in jMonkeyEngine 3 sdk</a>
  854. </li>
  855. </ul>
  856. </li>
  857. <li class="nav-item" data-depth="3">
  858. <a class="nav-link" href="../../sdk/filters.html">Post-Processor Filter Editor and Viewer</a>
  859. </li>
  860. <li class="nav-item" data-depth="3">
  861. <a class="nav-link" href="../../core/app/state/application_states.html">Application States</a>
  862. </li>
  863. <li class="nav-item" data-depth="3">
  864. <a class="nav-link" href="../../core/scene/control/custom_controls.html">Custom Controls</a>
  865. </li>
  866. <li class="nav-item" data-depth="3">
  867. <a class="nav-link" href="../../sdk/vehicle_creator.html">Vehicle Creator</a>
  868. </li>
  869. </ul>
  870. </li>
  871. <li class="nav-item" data-depth="2">
  872. <button class="nav-item-toggle"></button>
  873. <span class="nav-text">Advanced Usage</span>
  874. <ul class="nav-list">
  875. <li class="nav-item" data-depth="3">
  876. <a class="nav-link" href="../../sdk/build_platform.html">Building jMonkeyEngine SDK</a>
  877. </li>
  878. <li class="nav-item" data-depth="3">
  879. <a class="nav-link" href="../../sdk/use_own_jme.html#.adoc">Using your own (modified) version of jME3 in jMonkeyEngine SDK</a>
  880. </li>
  881. <li class="nav-item" data-depth="3">
  882. <a class="nav-link" href="../../sdk/increasing_heap_memory.html">Increasing Heap Memory</a>
  883. </li>
  884. <li class="nav-item" data-depth="3">
  885. <a class="nav-link" href="../../sdk/log_files.html">Log Files</a>
  886. </li>
  887. </ul>
  888. </li>
  889. <li class="nav-item" data-depth="2">
  890. <button class="nav-item-toggle"></button>
  891. <span class="nav-text">Available external plugins</span>
  892. <ul class="nav-list">
  893. <li class="nav-item" data-depth="3">
  894. <a class="nav-link" href="../../contributions/contributions.html">Contributions</a>
  895. </li>
  896. <li class="nav-item" data-depth="3">
  897. <a class="nav-link" href="../../sdk/neotexture.html">Neo Texture Editor for procedural textures</a>
  898. </li>
  899. <li class="nav-item" data-depth="3">
  900. <a class="nav-link" href="http://www.youtube.com/watch?v=yS9a9o4WzL8">Video: Mesh Tool &amp; Physics Editor</a>
  901. </li>
  902. </ul>
  903. </li>
  904. <li class="nav-item" data-depth="2">
  905. <button class="nav-item-toggle"></button>
  906. <a class="nav-link" href="../../sdk/development.html">Developing plugins for jMonkeyEngine SDK</a>
  907. <ul class="nav-list">
  908. <li class="nav-item" data-depth="3">
  909. <a class="nav-link" href="../../sdk/development/setup.html">Creating a plugin</a>
  910. </li>
  911. <li class="nav-item" data-depth="3">
  912. <a class="nav-link" href="../../sdk/development/general.html">Creating components</a>
  913. </li>
  914. <li class="nav-item" data-depth="3">
  915. <a class="nav-link" href="../../sdk/development/scene.html">The Main Scene</a>
  916. </li>
  917. <li class="nav-item" data-depth="3">
  918. <a class="nav-link" href="../../sdk/development/sceneexplorer.html">The Scene Explorer</a>
  919. </li>
  920. <li class="nav-item" data-depth="3">
  921. <a class="nav-link" href="../../sdk/development/projects_assets.html">Projects and Assets</a>
  922. </li>
  923. <li class="nav-item" data-depth="3">
  924. <a class="nav-link" href="../../sdk/development/extension_library.html">Create a library plugin from a jar file</a>
  925. </li>
  926. <li class="nav-item" data-depth="3">
  927. <a class="nav-link" href="../../sdk/development/model_loader.html">Create a new or custom model filetype and loader</a>
  928. </li>
  929. </ul>
  930. </li>
  931. </ul>
  932. </li>
  933. </ul>
  934. </li>
  935. </ul>
  936. </nav>
  937. </div>
  938. <div class="nav-panel-explore" data-panel="explore">
  939. <div class="context">
  940. <span class="title">JME</span>
  941. <span class="version">3.4</span>
  942. </div>
  943. <ul class="components">
  944. <li class="component is-current">
  945. <span class="title">JME</span>
  946. <ul class="versions">
  947. <li class="version">
  948. <a href="../../../3.8/documentation.html">3.8</a>
  949. </li>
  950. <li class="version is-current">
  951. <a href="../../documentation.html">3.4</a>
  952. </li>
  953. <li class="version">
  954. <a href="../../../3.3/documentation.html">3.3</a>
  955. </li>
  956. <li class="version">
  957. <a href="../../../3.2/documentation.html">3.2</a>
  958. </li>
  959. </ul>
  960. </li>
  961. <li class="component">
  962. <span class="title">Wiki Contribution</span>
  963. <ul class="versions">
  964. <li class="version">
  965. <a href="../../../../docs-wiki/3.8/wiki_contributor.html">3.8</a>
  966. </li>
  967. </ul>
  968. </li>
  969. <li class="component">
  970. <span class="title">Wiki UI</span>
  971. <ul class="versions">
  972. <li class="version">
  973. <a href="../../../../wiki-ui/index.html">master</a>
  974. </li>
  975. </ul>
  976. </li>
  977. </ul>
  978. </div>
  979. </div>
  980. </aside>
  981. </div>
  982. <main class="article">
  983. <div class="toolbar" role="navigation">
  984. <button class="nav-toggle"></button>
  985. <nav class="breadcrumbs" aria-label="breadcrumbs">
  986. <ul>
  987. <li><a href="../../documentation.html">JME</a></li>
  988. <li><a href="beginner.html">Beginner Tutorials</a></li>
  989. <li><a href="hello_asset.html">Hello Asset</a></li>
  990. </ul>
  991. </nav>
  992. <div class="page-versions">
  993. <button class="version-menu-toggle" title="Show other versions of page">3.4</button>
  994. <div class="version-menu">
  995. <a class="version" href="../../../3.8/tutorials/beginner/hello_asset.html">3.8</a>
  996. <a class="version is-current" href="hello_asset.html">3.4</a>
  997. <a class="version" href="../../../3.3/tutorials/beginner/hello_asset.html">3.3</a>
  998. <a class="version" href="../../../3.2/tutorials/beginner/hello_asset.html">3.2</a>
  999. </div>
  1000. </div>
  1001. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/v3.4/docs/modules/tutorials/pages/beginner/hello_asset.adoc">Edit this Page</a></div>
  1002. </div>
  1003. <div class="content">
  1004. <article class="doc">
  1005. <h1 class="page">jMonkeyEngine 3 Tutorial (3) - Hello Assets</h1>
  1006. <div id="preamble">
  1007. <div class="sectionbody">
  1008. <div class="paragraph">
  1009. <p>In this tutorial we will learn to load 3D models and text into the scene graph, using the jME <a href="../../core/asset/asset_manager.html" class="xref page">Asset Manager</a>. You will also learn how to determine the correct paths, and which file formats to use.</p>
  1010. </div>
  1011. <div class="imageblock text-center">
  1012. <div class="content">
  1013. <img src="../_images/beginner/beginner-assets-models.png" alt="beginner-assets-models.png" width="320" height="250">
  1014. </div>
  1015. </div>
  1016. <div class="admonitionblock tip">
  1017. <table>
  1018. <tr>
  1019. <td class="icon">
  1020. <i class="fa icon-tip" title="Tip"></i>
  1021. </td>
  1022. <td class="content">
  1023. <div class="paragraph">
  1024. <p>To use the example assets in a new jMonkeyEngine SDK project, right-click your project, select <span class="menuseq"><b class="menu">Properties</b>&#160;<i class="fa fa-angle-right caret"></i> <b class="submenu">Libraries</b>&#160;<i class="fa fa-angle-right caret"></i> <b class="menuitem">Add Library</b></span>, and add the &#8220;jme3-test-data&#8221; library.</p>
  1025. </div>
  1026. </td>
  1027. </tr>
  1028. </table>
  1029. </div>
  1030. </div>
  1031. </div>
  1032. <div class="sect1">
  1033. <h2 id="code-sample"><a class="anchor" href="#code-sample"></a>Code Sample</h2>
  1034. <div class="sectionbody">
  1035. <div class="listingblock">
  1036. <div class="content">
  1037. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">package jme3test.helloworld;
  1038. import com.jme3.app.SimpleApplication;
  1039. import com.jme3.font.BitmapText;
  1040. import com.jme3.light.DirectionalLight;
  1041. import com.jme3.material.Material;
  1042. import com.jme3.math.Vector3f;
  1043. import com.jme3.scene.Geometry;
  1044. import com.jme3.scene.Spatial;
  1045. import com.jme3.scene.shape.Box;
  1046. /** Sample 3 - how to load an OBJ model, and OgreXML model,
  1047. * a material/texture, or text. */
  1048. public class HelloAssets extends SimpleApplication {
  1049. public static void main(String[] args) {
  1050. HelloAssets app = new HelloAssets();
  1051. app.start();
  1052. }
  1053. @Override
  1054. public void simpleInitApp() {
  1055. Spatial teapot = assetManager.loadModel("Models/Teapot/Teapot.obj");
  1056. Material mat_default = new Material(
  1057. assetManager, "Common/MatDefs/Misc/ShowNormals.j3md");
  1058. teapot.setMaterial(mat_default);
  1059. rootNode.attachChild(teapot);
  1060. // Create a wall with a simple texture from test_data
  1061. Box box = new Box(2.5f,2.5f,1.0f);
  1062. Spatial wall = new Geometry("Box", box );
  1063. Material mat_brick = new Material(
  1064. assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
  1065. mat_brick.setTexture("ColorMap",
  1066. assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"));
  1067. wall.setMaterial(mat_brick);
  1068. wall.setLocalTranslation(2.0f,-2.5f,0.0f);
  1069. rootNode.attachChild(wall);
  1070. // Display a line of text with a default font
  1071. guiNode.detachAllChildren();
  1072. guiFont = assetManager.loadFont("Interface/Fonts/Default.fnt");
  1073. BitmapText helloText = new BitmapText(guiFont, false);
  1074. helloText.setSize(guiFont.getCharSet().getRenderedSize());
  1075. helloText.setText("Hello World");
  1076. helloText.setLocalTranslation(300, helloText.getLineHeight(), 0);
  1077. guiNode.attachChild(helloText);
  1078. // Load a model from test_data (OgreXML + material + texture)
  1079. Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.mesh.xml");
  1080. ninja.scale(0.05f, 0.05f, 0.05f);
  1081. ninja.rotate(0.0f, -3.0f, 0.0f);
  1082. ninja.setLocalTranslation(0.0f, -5.0f, -2.0f);
  1083. rootNode.attachChild(ninja);
  1084. // You must add a light to make the model visible
  1085. DirectionalLight sun = new DirectionalLight();
  1086. sun.setDirection(new Vector3f(-0.1f, -0.7f, -1.0f));
  1087. rootNode.addLight(sun);
  1088. }
  1089. }</code></pre>
  1090. </div>
  1091. </div>
  1092. <div class="paragraph">
  1093. <p>Build and run the code sample. You should see a green Ninja with a colorful teapot standing behind a wall. The text on the screen should say &#8220;Hello World&#8221;.</p>
  1094. </div>
  1095. </div>
  1096. </div>
  1097. <div class="sect1">
  1098. <h2 id="the-asset-manager"><a class="anchor" href="#the-asset-manager"></a>The Asset Manager</h2>
  1099. <div class="sectionbody">
  1100. <div class="paragraph">
  1101. <p><strong>By game assets we mean all multi-media files, such as models, materials, textures, whole scenes, custom shaders, music and sound files, and custom fonts.</strong> JME3 comes with a handy AssetManager object that helps you access your assets.
  1102. The AssetManager can load files from:</p>
  1103. </div>
  1104. <div class="ulist">
  1105. <ul>
  1106. <li>
  1107. <p>The current classpath (the top level of your project directory).</p>
  1108. </li>
  1109. <li>
  1110. <p>The sub-folders of the <code>assets</code> directory of your project.</p>
  1111. </li>
  1112. <li>
  1113. <p>Optionally, custom paths that you register.</p>
  1114. </li>
  1115. </ul>
  1116. </div>
  1117. <div class="paragraph">
  1118. <p>The following is the recommended directory structure for storing assets in your project directory:</p>
  1119. </div>
  1120. <div class="listingblock">
  1121. <div class="content">
  1122. <pre class="highlightjs highlight"><code class="language-none hljs">MyGame/assets/
  1123. MyGame/assets/Interface/
  1124. MyGame/assets/MatDefs/
  1125. MyGame/assets/Materials/
  1126. MyGame/assets/Models/ &lt;-- your .j3o models go here
  1127. MyGame/assets/Scenes/
  1128. MyGame/assets/Shaders/
  1129. MyGame/assets/Sounds/ &lt;-- your audio files go here
  1130. MyGame/assets/Textures/ &lt;-- your textures go here
  1131. MyGame/build.xml &lt;-- Default Ant build script
  1132. MyGame/src/... &lt;-- your Java sources go here
  1133. MyGame/...</code></pre>
  1134. </div>
  1135. </div>
  1136. <div class="paragraph">
  1137. <p>This is just a suggested best practice, and it&#8217;s what you get by default when creating a new Java project in the jMonkeyEngine <a href="../../sdk/sdk.html" class="xref page">SDK</a>. You can create an <code>assets</code> directory and technically name the subdirectories whatever you like.</p>
  1138. </div>
  1139. <div class="admonitionblock important">
  1140. <table>
  1141. <tr>
  1142. <td class="icon">
  1143. <i class="fa icon-important" title="Important"></i>
  1144. </td>
  1145. <td class="content">
  1146. When you build your project for distribution, there will be no <code>assets</code> directory. Instead, you will generate an <code>assets.jar</code> file, located in the <code>dist/lib</code> folder of your project that will contain the sub-folders of the <code>assets</code> directory and all the assets in those folders.
  1147. </td>
  1148. </tr>
  1149. </table>
  1150. </div>
  1151. <div class="sect2">
  1152. <h3 id="loading-textures"><a class="anchor" href="#loading-textures"></a>Loading Textures</h3>
  1153. <div class="paragraph">
  1154. <p>Place your textures in a subdirectory of <code>assets/Textures/</code>. Load the texture into the material before you set the Material. The following code sample is from the <code>simpleInitApp()</code> method and loads a simple wall model:</p>
  1155. </div>
  1156. <div class="listingblock">
  1157. <div class="content">
  1158. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">// Create a wall with a simple texture from test_data
  1159. Box box = new Box(2.5f,2.5f,1.0f);
  1160. Spatial wall = new Geometry("Box", box );
  1161. Material mat_brick = new Material(
  1162. assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
  1163. mat_brick.setTexture("ColorMap",
  1164. assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"));
  1165. wall.setMaterial(mat_brick);
  1166. wall.setLocalTranslation(2.0f,-2.5f,0.0f);
  1167. rootNode.attachChild(wall);</code></pre>
  1168. </div>
  1169. </div>
  1170. <div class="paragraph">
  1171. <p>In this case, you <a href="hello_material.html" class="xref page">create your own Material</a> and apply it to a Geometry. You base Materials on default material descriptions (such as &#8220;Unshaded.j3md&#8221;), as shown in this example.</p>
  1172. </div>
  1173. </div>
  1174. <div class="sect2">
  1175. <h3 id="loading-text-and-fonts"><a class="anchor" href="#loading-text-and-fonts"></a>Loading Text and Fonts</h3>
  1176. <div class="paragraph">
  1177. <p>This example displays the text &#8220;Hello World&#8221; in the default font at the bottom edge of the window. You attach text to the <code>guiNode</code> – this is a special node for flat (orthogonal) display elements. You display text to show the game score, player health, etc.
  1178. The following code sample goes into the <code>simpleInitApp()</code> method.</p>
  1179. </div>
  1180. <div class="listingblock">
  1181. <div class="content">
  1182. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">// Display a line of text with a default font
  1183. guiNode.detachAllChildren();
  1184. guiFont = assetManager.loadFont("Interface/Fonts/Default.fnt");
  1185. BitmapText helloText = new BitmapText(guiFont, false);
  1186. helloText.setSize(guiFont.getCharSet().getRenderedSize());
  1187. helloText.setText("Hello World");
  1188. helloText.setLocalTranslation(300, helloText.getLineHeight(), 0);
  1189. guiNode.attachChild(helloText);</code></pre>
  1190. </div>
  1191. </div>
  1192. <div class="admonitionblock tip">
  1193. <table>
  1194. <tr>
  1195. <td class="icon">
  1196. <i class="fa icon-tip" title="Tip"></i>
  1197. </td>
  1198. <td class="content">
  1199. <div class="paragraph">
  1200. <p>Clear existing text in the guiNode by detaching all its children.</p>
  1201. </div>
  1202. </td>
  1203. </tr>
  1204. </table>
  1205. </div>
  1206. </div>
  1207. <div class="sect2">
  1208. <h3 id="loading-a-model"><a class="anchor" href="#loading-a-model"></a>Loading a Model</h3>
  1209. <div class="paragraph">
  1210. <p>Export your 3D model in a <a href="../../getting-started/features.html#supported-external-file-types" class="xref page">Supported External File Type</a> (.mesh.xml, .scene, .material, .skeleton.xml, .gltf) and place it in a subdirectory of <code>assets/Models/</code>. The following code sample goes into the <code>simpleInitApp()</code> method. Note that "jme3-plugins" library is needed to load these file types.</p>
  1211. </div>
  1212. <div class="listingblock">
  1213. <div class="content">
  1214. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">// Load a model from test_data (OgreXML + material + texture)
  1215. Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.mesh.xml");
  1216. ninja.scale(0.05f, 0.05f, 0.05f);
  1217. ninja.rotate(0.0f, -3.0f, 0.0f);
  1218. ninja.setLocalTranslation(0.0f, -5.0f, -2.0f);
  1219. rootNode.attachChild(ninja);
  1220. // You must add a directional light to make the model visible!
  1221. DirectionalLight sun = new DirectionalLight();
  1222. sun.setDirection(new Vector3f(-0.1f, -0.7f, -1.0f).normalizeLocal());
  1223. rootNode.addLight(sun);</code></pre>
  1224. </div>
  1225. </div>
  1226. <div class="admonitionblock note">
  1227. <table>
  1228. <tr>
  1229. <td class="icon">
  1230. <i class="fa icon-note" title="Note"></i>
  1231. </td>
  1232. <td class="content">
  1233. You do not need to create a Material if you exported the model with a material. Remember to add a light source, as shown, otherwise the material (and the whole model) is not visible!
  1234. </td>
  1235. </tr>
  1236. </table>
  1237. </div>
  1238. </div>
  1239. <div class="sect2">
  1240. <h3 id="loading-assets-from-custom-paths"><a class="anchor" href="#loading-assets-from-custom-paths"></a>Loading Assets From Custom Paths</h3>
  1241. <div class="paragraph">
  1242. <p>What if your game relies on user supplied model files, that are not included in the distribution? If a file is not located in the default location (e.g. assets directory), you can register a custom Locator and load it from any path.</p>
  1243. </div>
  1244. <div class="paragraph">
  1245. <p>Here is a usage example of a ZipLocator that is registered to a file <code>town.zip</code> in the top level of your project directory:</p>
  1246. </div>
  1247. <div class="listingblock">
  1248. <div class="content">
  1249. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> assetManager.registerLocator("town.zip", ZipLocator.class);
  1250. Spatial scene = assetManager.loadModel("main.scene");
  1251. rootNode.attachChild(scene);</code></pre>
  1252. </div>
  1253. </div>
  1254. <div class="paragraph">
  1255. <p>Here is a HttpZipLocator that can download zipped models and load them:</p>
  1256. </div>
  1257. <div class="listingblock">
  1258. <div class="content">
  1259. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> assetManager.registerLocator("https://storage.googleapis.com/"
  1260.          + "google-code-archive-downloads/v2/code.google.com/"
  1261.         + "jmonkeyengine/wildhouse.zip", HttpZipLocator.class);
  1262. Spatial scene = assetManager.loadModel("main.scene");
  1263. rootNode.attachChild(scene);</code></pre>
  1264. </div>
  1265. </div>
  1266. <div class="paragraph">
  1267. <p>Here is a FileLocator that allows assetManager to open asset file form a particular directory,</p>
  1268. </div>
  1269. <div class="listingblock">
  1270. <div class="content">
  1271. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> assetManager.registerLocator("&lt;Path to directory containing asset&gt;", FileLocator.class);
  1272. Spatial model = assetManager.loadModel("ModelName.gltf");
  1273. rootNode.attachChild(model);</code></pre>
  1274. </div>
  1275. </div>
  1276. <div class="paragraph">
  1277. <p>JME3 offers ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, and UrlLocator (see <code>com.jme3.asset.plugins</code>).</p>
  1278. </div>
  1279. </div>
  1280. </div>
  1281. </div>
  1282. <div class="sect1">
  1283. <h2 id="creating-models-and-scenes"><a class="anchor" href="#creating-models-and-scenes"></a>Creating Models and Scenes</h2>
  1284. <div class="sectionbody">
  1285. <div class="paragraph">
  1286. <p>To create 3D models and scenes, you need a 3D Mesh Editor. If you don&#8217;t have any tools, install Blender.
  1287. Then you <a href="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/UV_Map_Basics">create fully textured models (e.g. with Blender)</a>, export them to your project using a <a href="../../getting-started/features.html#supported-formats" class="xref page">Supported External File Type</a>, <a href="../../getting-started/features.html#supported-external-file-types" class="xref page">convert models</a> to <code>.j3o</code> using the recommended method for your chosen file type, <a href="#loading-models-and-scenes">load models</a>, and create 3D scenes from them.</p>
  1288. </div>
  1289. <div class="sect2">
  1290. <h3 id="model-file-formats"><a class="anchor" href="#model-file-formats"></a>Model File Formats</h3>
  1291. <div class="paragraph">
  1292. <p>JME3 can convert and load</p>
  1293. </div>
  1294. <div class="ulist">
  1295. <ul>
  1296. <li>
  1297. <p>Ogre XML models + materials.</p>
  1298. </li>
  1299. <li>
  1300. <p>Ogre DotScenes.</p>
  1301. </li>
  1302. <li>
  1303. <p>Wavefront OBJ + MTL models.</p>
  1304. </li>
  1305. <li>
  1306. <p>.gltf</p>
  1307. </li>
  1308. </ul>
  1309. </div>
  1310. <div class="paragraph">
  1311. <p>The <code>loadModel()</code> method loads these original file formats when you run your code directly from the SDK. If you however build the executables using the default build script, then the original model files (XML, OBJ, etc) <em>are not included</em>. This means, when you run the executable outside the SDK, and load any original models directly, you get the following error message:</p>
  1312. </div>
  1313. <div class="listingblock">
  1314. <div class="content">
  1315. <pre class="highlightjs highlight"><code class="language-none hljs">com.jme3.asset.DesktopAssetManager loadAsset
  1316. WARNING: Cannot locate resource: Models/Ninja/Ninja.mesh.xml
  1317. com.jme3.app.Application handleError
  1318. SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main]
  1319. java.lang.NullPointerException</code></pre>
  1320. </div>
  1321. </div>
  1322. <div class="paragraph">
  1323. <p>You see that loading the <strong>XML/OBJ/GLTF</strong> directly is only acceptable during the development phase in the SDK. For example, every time your graphic designer pushes updated files to the asset directory, you can quickly review the latest version in your development environment.</p>
  1324. </div>
  1325. <div class="paragraph">
  1326. <p>But for QA test builds and for the final release build, you use <strong>.j3o files</strong> exclusively. J3o is an optimized binary format for jME3 applications. When you do QA test builds, or are ready to release, use the <a href="../../sdk/sdk.html" class="xref page">SDK</a> to <a href="../../sdk/model_loader_and_viewer.html" class="xref page">convert</a> all .obj/.scene/.xml/.gltf files to .j3o files, and update all code to load the .j3o files. The default build script automatically packages .j3o files in the executables.</p>
  1327. </div>
  1328. <div class="paragraph">
  1329. <p>Open your JME3 Project in the jMonkeyEngine SDK.</p>
  1330. </div>
  1331. <div class="olist arabic">
  1332. <ol class="arabic">
  1333. <li>
  1334. <p>Right-click a .OBJ, GLTF, or .mesh.xml file in the Projects window, and choose &#8220;Convert to j3o Binary&#8221;.</p>
  1335. </li>
  1336. <li>
  1337. <p>The .j3o file appears next to the .mesh.xml file and has the same name.</p>
  1338. </li>
  1339. <li>
  1340. <p>Update all your <code>loadModel()</code> lines accordingly. For example:</p>
  1341. <div class="listingblock">
  1342. <div class="content">
  1343. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.j3o");</code></pre>
  1344. </div>
  1345. </div>
  1346. </li>
  1347. </ol>
  1348. </div>
  1349. <div class="admonitionblock tip">
  1350. <table>
  1351. <tr>
  1352. <td class="icon">
  1353. <i class="fa icon-tip" title="Tip"></i>
  1354. </td>
  1355. <td class="content">
  1356. <div class="paragraph">
  1357. <p>If your executable throws a &#8220;Cannot locate resource&#8221; runtime exception, check all load paths and make sure you have converted all models to .j3o files!</p>
  1358. </div>
  1359. </td>
  1360. </tr>
  1361. </table>
  1362. </div>
  1363. </div>
  1364. <div class="sect2">
  1365. <h3 id="loading-models-and-scenes"><a class="anchor" href="#loading-models-and-scenes"></a>Loading Models and Scenes</h3>
  1366. <table class="tableblock frame-all grid-all stretch">
  1367. <colgroup>
  1368. <col style="width: 15%;">
  1369. <col style="width: 85%;">
  1370. </colgroup>
  1371. <thead>
  1372. <tr>
  1373. <th class="tableblock halign-left valign-top">Task?</th>
  1374. <th class="tableblock halign-left valign-top">Solution!</th>
  1375. </tr>
  1376. </thead>
  1377. <tbody>
  1378. <tr>
  1379. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1380. <p>Load model W/ materials.</p>
  1381. </div></div></td>
  1382. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1383. <p>Use the asset manager&#8217;s <code>loadModel()</code> method and attach the Spatial to the rootNode.</p>
  1384. </div>
  1385. <div class="listingblock">
  1386. <div class="content">
  1387. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Spatial elephant = assetManager.loadModel("Models/Elephant/Elephant.mesh.xml");
  1388. rootNode.attachChild(elephant);</code></pre>
  1389. </div>
  1390. </div>
  1391. <div class="listingblock">
  1392. <div class="content">
  1393. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Spatial elephant = assetManager.loadModel("Models/Elephant/Elephant.j3o");
  1394. rootNode.attachChild(elephant);</code></pre>
  1395. </div>
  1396. </div></div></td>
  1397. </tr>
  1398. <tr>
  1399. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1400. <p>Load model W/O materials.</p>
  1401. </div></div></td>
  1402. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1403. <p>If you have a model without materials, you have to give it a material to make it visible.</p>
  1404. </div>
  1405. <div class="listingblock">
  1406. <div class="content">
  1407. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Spatial teapot = assetManager.loadModel("Models/Teapot/Teapot.j3o");
  1408. Material mat = new Material(assetManager, "Common/MatDefs/Misc/ShowNormals.j3md"); // default material
  1409. teapot.setMaterial(mat);
  1410. rootNode.attachChild(teapot);</code></pre>
  1411. </div>
  1412. </div></div></td>
  1413. </tr>
  1414. <tr>
  1415. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1416. <p>Load a scene.</p>
  1417. </div></div></td>
  1418. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1419. <p>You load scenes just like you load models:</p>
  1420. </div>
  1421. <div class="listingblock">
  1422. <div class="content">
  1423. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Spatial scene = assetManager.loadModel("Scenes/town/main.scene");
  1424. rootNode.attachChild(scene);</code></pre>
  1425. </div>
  1426. </div>
  1427. <div class="listingblock">
  1428. <div class="content">
  1429. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Spatial scene = assetManager.loadModel("Scenes/town/main.j3o");
  1430. rootNode.attachChild(scene);</code></pre>
  1431. </div>
  1432. </div></div></td>
  1433. </tr>
  1434. </tbody>
  1435. </table>
  1436. </div>
  1437. </div>
  1438. </div>
  1439. <div class="sect1">
  1440. <h2 id="exercise-how-to-load-assets"><a class="anchor" href="#exercise-how-to-load-assets"></a>Exercise - How to Load Assets</h2>
  1441. <div class="sectionbody">
  1442. <div class="paragraph">
  1443. <p>As an exercise, let&#8217;s try different ways of loading a scene. You will learn how to load the scene directly, or from a zip file.</p>
  1444. </div>
  1445. <div class="paragraph">
  1446. <p>Remember that there will be no <code>assets</code> folder in a final deployment. If you are going to use a zip, do not put it in the <code>assets</code> folder. Otherwise, you will likely get errors about a missing file. For final distribution, add it to your dist folder.</p>
  1447. </div>
  1448. <div class="olist arabic">
  1449. <ol class="arabic">
  1450. <li>
  1451. <p><a href="https://wiki.jmonkeyengine.org/Scenes/Town/town.zip">Download the town.zip</a> sample scene.</p>
  1452. </li>
  1453. <li>
  1454. <p>Place the town.zip file in the top level directory of your JME3 project, like so:</p>
  1455. <div class="listingblock">
  1456. <div class="content">
  1457. <pre class="highlightjs highlight"><code class="language-none hljs">jMonkeyProjects/MyGameProject/assets/
  1458. jMonkeyProjects/MyGameProject/build.xml
  1459. jMonkeyProjects/MyGameProject/src/
  1460. jMonkeyProjects/MyGameProject/town.zip
  1461. ...</code></pre>
  1462. </div>
  1463. </div>
  1464. <div class="paragraph">
  1465. <p>Use the following method to load models from a zip file:</p>
  1466. </div>
  1467. </li>
  1468. <li>
  1469. <p>Verify <code>town.zip</code> is in the project directory.</p>
  1470. </li>
  1471. <li>
  1472. <p>Register a zip file locator to the project directory: Add the following code under <code>simpleInitApp()</code>.</p>
  1473. <div class="listingblock">
  1474. <div class="content">
  1475. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> assetManager.registerLocator("town.zip", ZipLocator.class);
  1476. Spatial gameLevel = assetManager.loadModel("main.scene");
  1477. gameLevel.setLocalTranslation(0, -5.2f, 0);
  1478. gameLevel.setLocalScale(2);
  1479. rootNode.attachChild(gameLevel);</code></pre>
  1480. </div>
  1481. </div>
  1482. <div class="paragraph">
  1483. <p>The loadModel() method now searches this zip directly for the files to load.<br>
  1484. (This means, do not write <code>loadModel(town.zip/main.scene)</code> or similar!)</p>
  1485. </div>
  1486. </li>
  1487. <li>
  1488. <p>Clean, build and run the project.<br>
  1489. You should now see the Ninja+wall+teapot standing in a town.</p>
  1490. </li>
  1491. </ol>
  1492. </div>
  1493. <div class="admonitionblock tip">
  1494. <table>
  1495. <tr>
  1496. <td class="icon">
  1497. <i class="fa icon-tip" title="Tip"></i>
  1498. </td>
  1499. <td class="content">
  1500. <div class="paragraph">
  1501. <p>If you register new locators, make sure you do not get any file name conflicts: Don&#8217;t name all scenes <code>main.scene</code> but give each scene a unique name.</p>
  1502. </div>
  1503. </td>
  1504. </tr>
  1505. </table>
  1506. </div>
  1507. <div class="paragraph">
  1508. <p>Earlier in this tutorial, you loaded scenes and models from the asset directory. This is the most common way you will be loading scenes and models. Here is the typical procedure:</p>
  1509. </div>
  1510. <div class="olist arabic">
  1511. <ol class="arabic">
  1512. <li>
  1513. <p>Remove the code that you added for the previous exercise.</p>
  1514. </li>
  1515. <li>
  1516. <p>Unzip the town.zip to see the structure of the contained Ogre dotScene: You will get a directory named <code>town</code>. It contains XML, texture files, and a file called main.scene.</p>
  1517. </li>
  1518. <li>
  1519. <p>Move the unzipped <code>town/</code> directory into the <code>assets/Scenes/</code> directory of your project.</p>
  1520. </li>
  1521. <li>
  1522. <p>Add the following code under <code>simpleInitApp()</code>.</p>
  1523. <div class="listingblock">
  1524. <div class="content">
  1525. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> Spatial gameLevel = assetManager.loadModel("Scenes/town/main.scene");
  1526. gameLevel.setLocalTranslation(0, -5.2f, 0);
  1527. gameLevel.setLocalScale(2);
  1528. rootNode.attachChild(gameLevel);</code></pre>
  1529. </div>
  1530. </div>
  1531. <div class="paragraph">
  1532. <p>Note that the path is relative to the <code>assets/…</code> directory.</p>
  1533. </div>
  1534. </li>
  1535. <li>
  1536. <p>Clean, build and run the project.<br>
  1537. Again, you should see the Ninja+wall+teapot standing in a town.</p>
  1538. </li>
  1539. </ol>
  1540. </div>
  1541. <div class="paragraph">
  1542. <p>Here is a third method you must know, loading a scene/model from a .j3o file:</p>
  1543. </div>
  1544. <div class="olist arabic">
  1545. <ol class="arabic">
  1546. <li>
  1547. <p>Remove the code from the previous exercise.</p>
  1548. </li>
  1549. <li>
  1550. <p>If you haven&#8217;t already, open the <a href="../../sdk/sdk.html" class="xref page">SDK</a> and open the project that contains the HelloAsset class.</p>
  1551. </li>
  1552. <li>
  1553. <p>In the projects window, browse to the <code>assets/Scenes/town</code> directory.</p>
  1554. </li>
  1555. <li>
  1556. <p>Right-click the <code>main.scene</code> and convert the scene to binary: The jMonkeyPlatform generates a main.j3o file.</p>
  1557. </li>
  1558. <li>
  1559. <p>Add the following code under <code>simpleInitApp() {</code></p>
  1560. <div class="listingblock">
  1561. <div class="content">
  1562. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> Spatial gameLevel = assetManager.loadModel("Scenes/town/main.j3o");
  1563. gameLevel.setLocalTranslation(0, -5.2f, 0);
  1564. gameLevel.setLocalScale(2);
  1565. rootNode.attachChild(gameLevel);</code></pre>
  1566. </div>
  1567. </div>
  1568. <div class="paragraph">
  1569. <p>Again, note that the path is relative to the <code>assets/…</code> directory.</p>
  1570. </div>
  1571. </li>
  1572. <li>
  1573. <p>Clean, Build and run the project.<br>
  1574. Again, you should see the Ninja+wall+teapot standing in a town.</p>
  1575. </li>
  1576. </ol>
  1577. </div>
  1578. </div>
  1579. </div>
  1580. <div class="sect1">
  1581. <h2 id="conclusion"><a class="anchor" href="#conclusion"></a>Conclusion</h2>
  1582. <div class="sectionbody">
  1583. <div class="paragraph">
  1584. <p>Now you know how to populate the scenegraph with static shapes and models, and how to build scenes. You have learned how to load assets using the <code>assetManager</code> and you have seen that the paths start relative to your project directory. Another important thing you have learned is to convert models to .j3o format for the executable JARs etc.</p>
  1585. </div>
  1586. <div class="paragraph">
  1587. <p><strong>See also:</strong></p>
  1588. </div>
  1589. <div class="ulist">
  1590. <ul>
  1591. <li>
  1592. <p><a href="../how-to/modeling/blender/blender.html" class="xref page">The definitive Blender import tutorial</a></p>
  1593. </li>
  1594. <li>
  1595. <p><a href="../concepts/multi-media_asset_pipeline.html" class="xref page">Asset pipeline introduction</a></p>
  1596. </li>
  1597. <li>
  1598. <p>If you want to learn how to load sounds, see <a href="hello_audio.html" class="xref page">Hello Audio</a></p>
  1599. </li>
  1600. <li>
  1601. <p>If you want to learn more about loading textures and materials, see <a href="hello_material.html" class="xref page">Hello Material</a></p>
  1602. </li>
  1603. </ul>
  1604. </div>
  1605. </div>
  1606. </div>
  1607. <nav class="pagination">
  1608. <span class="prev"><a href="hello_node.html">Hello Node</a></span>
  1609. <span class="next"><a href="hello_main_event_loop.html">Hello Update Loop</a></span>
  1610. </nav>
  1611. </article>
  1612. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  1613. <div class="toc-menu"></div>
  1614. </aside>
  1615. </div>
  1616. </main>
  1617. </div>
  1618. <footer class="footer">
  1619. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  1620. </footer>
  1621. <script src="../../../../_/js/vendor/docsearch.min.js"></script>
  1622. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js -->
  1623. <script>
  1624. var search = docsearch({
  1625. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  1626. indexName: 'jmonkeyengine',
  1627. inputSelector: '#search-input',
  1628. autocompleteOptions: { hint: false, keyboardShortcuts: ['s'] },
  1629. algoliaOptions: { hitsPerPage: 10 }
  1630. }).autocomplete
  1631. search.on('autocomplete:closed', function () { search.autocomplete.setVal() })
  1632. function focusSearchInput () { document.querySelector('#search-input').focus() }
  1633. if (document.querySelector('.home-link.is-current')) window.addEventListener('load', focusSearchInput)
  1634. </script>
  1635. <script src="../../../../_/js/site.js"></script>
  1636. <script async src="../../../../_/js/vendor/highlight.js"></script>
  1637. </body>
  1638. </html>