terminology.html 77 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829
  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>3D Game Development Terminology :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/3.8/tutorials/concepts/terminology.html">
  8. <link rel="prev" href="scenegraph_for_dummies.html">
  9. <link rel="next" href="transparency_sorting.html">
  10. <meta name="generator" content="Antora 3.0.1">
  11. <link rel="stylesheet" href="../../../../_/css/site.css">
  12. <meta property="og:image" content="https://wiki.jmonkeyengine.org/_/img/iconx128.png">
  13. <meta property="og:description" content="3D Game Development Terminology">
  14. <meta property="og:title" content="jMonkeyEngine Docs">
  15. <link rel="stylesheet" href="../../../../_/css/site-extra.css">
  16. <link rel="stylesheet" href="../../../../_/css/vendor/docsearch.min.css">
  17. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css -->
  18. <link rel="icon" href="../../../../_/img/favicon.ico" type="image/x-icon">
  19. </head>
  20. <body class="article">
  21. <header class="header">
  22. <nav class="navbar">
  23. <div class="navbar-brand">
  24. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  25. <img alt="" src="../../../../_/img/jme-logo.png" height="32" type="image/x-icon">
  26. </a>
  27. <div class="navbar-item hide-for-print">
  28. <input id="search-input" type="text" placeholder="Search docs">
  29. </div>
  30. <button class="navbar-burger" data-target="topbar-nav">
  31. <span></span>
  32. <span></span>
  33. <span></span>
  34. </button>
  35. </div>
  36. <div id="topbar-nav" class="navbar-menu">
  37. <div class="navbar-end">
  38. <div class="navbar-item theme-switch-wrapper">
  39. <label class="theme-switch" for="checkbox">
  40. <input type="checkbox" id="checkbox" />
  41. <div class="slider round"></div>
  42. </label>
  43. </div>
  44. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  45. </div>
  46. </div>
  47. </nav>
  48. </header>
  49. <div class="body">
  50. <div class="nav-container" data-component="docs" data-version="3.8">
  51. <aside class="nav">
  52. <div class="panels">
  53. <div class="nav-panel-menu is-active" data-panel="menu">
  54. <nav class="nav-menu">
  55. <h3 class="title"><a href="../../documentation.html">JME</a></h3>
  56. <ul class="nav-list">
  57. <li class="nav-item" data-depth="0">
  58. <ul class="nav-list">
  59. <li class="nav-item" data-depth="1">
  60. <a class="nav-link" href="../../documentation.html">Getting Started</a>
  61. </li>
  62. <li class="nav-item" data-depth="1">
  63. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.4.1-stable">JavaDoc</a>
  64. </li>
  65. <li class="nav-item" data-depth="1">
  66. <a class="nav-link" href="../../release.html">Release Guide</a>
  67. </li>
  68. </ul>
  69. </li>
  70. <li class="nav-item" data-depth="0">
  71. <ul class="nav-list">
  72. <li class="nav-item" data-depth="1">
  73. <button class="nav-item-toggle"></button>
  74. <a class="nav-link" href="../beginner/beginner.html">Beginner Tutorials</a>
  75. <ul class="nav-list">
  76. <li class="nav-item" data-depth="2">
  77. <a class="nav-link" href="../beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
  78. </li>
  79. <li class="nav-item" data-depth="2">
  80. <a class="nav-link" href="../beginner/hello_node.html">Hello Node</a>
  81. </li>
  82. <li class="nav-item" data-depth="2">
  83. <a class="nav-link" href="../beginner/hello_asset.html">Hello Asset</a>
  84. </li>
  85. <li class="nav-item" data-depth="2">
  86. <a class="nav-link" href="../beginner/hello_main_event_loop.html">Hello Update Loop</a>
  87. </li>
  88. <li class="nav-item" data-depth="2">
  89. <a class="nav-link" href="../beginner/hello_input_system.html">Hello Input System</a>
  90. </li>
  91. <li class="nav-item" data-depth="2">
  92. <a class="nav-link" href="../beginner/hello_material.html">Hello Material</a>
  93. </li>
  94. <li class="nav-item" data-depth="2">
  95. <a class="nav-link" href="../beginner/hello_animation.html">Hello Animation</a>
  96. </li>
  97. <li class="nav-item" data-depth="2">
  98. <a class="nav-link" href="../beginner/hello_picking.html">Hello Picking</a>
  99. </li>
  100. <li class="nav-item" data-depth="2">
  101. <a class="nav-link" href="../beginner/hello_collision.html">Hello Collision</a>
  102. </li>
  103. <li class="nav-item" data-depth="2">
  104. <a class="nav-link" href="../beginner/hello_terrain.html">Hello Terrain</a>
  105. </li>
  106. <li class="nav-item" data-depth="2">
  107. <a class="nav-link" href="../beginner/hello_audio.html">Hello Audio</a>
  108. </li>
  109. <li class="nav-item" data-depth="2">
  110. <a class="nav-link" href="../beginner/hello_effects.html">Hello Effects</a>
  111. </li>
  112. <li class="nav-item" data-depth="2">
  113. <a class="nav-link" href="../beginner/hello_physics.html">Hello Physics</a>
  114. </li>
  115. </ul>
  116. </li>
  117. <li class="nav-item" data-depth="1">
  118. <button class="nav-item-toggle"></button>
  119. <span class="nav-text">Key Concepts</span>
  120. <ul class="nav-list">
  121. <li class="nav-item" data-depth="2">
  122. <a class="nav-link" href="best_practices.html">Best Practices</a>
  123. </li>
  124. <li class="nav-item" data-depth="2">
  125. <a class="nav-link" href="optimization.html">Optimization</a>
  126. </li>
  127. <li class="nav-item" data-depth="2">
  128. <a class="nav-link" href="faq.html">Frequently Asked Questions</a>
  129. </li>
  130. <li class="nav-item" data-depth="2">
  131. <a class="nav-link" href="math_for_dummies.html">Math for Dummies</a>
  132. </li>
  133. <li class="nav-item" data-depth="2">
  134. <a class="nav-link" href="math.html">Math overview</a>
  135. </li>
  136. <li class="nav-item" data-depth="2">
  137. <a class="nav-link" href="math_cheet_sheet.html">3D math "cheat sheet"</a>
  138. </li>
  139. <li class="nav-item" data-depth="2">
  140. <a class="nav-link" href="rotate.html">3-D Rotation</a>
  141. </li>
  142. <li class="nav-item" data-depth="2">
  143. <a class="nav-link" href="math_video_tutorials.html">Math video tutorial series</a>
  144. </li>
  145. <li class="nav-item" data-depth="2">
  146. <a class="nav-link" href="multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  147. </li>
  148. <li class="nav-item" data-depth="2">
  149. <a class="nav-link" href="the_scene_graph.html">The Scene Graph</a>
  150. </li>
  151. <li class="nav-item" data-depth="2">
  152. <a class="nav-link" href="scenegraph_for_dummies.html">Scene Graph for Dummies</a>
  153. </li>
  154. <li class="nav-item is-current-page" data-depth="2">
  155. <a class="nav-link" href="terminology.html">3D Graphics Terminology</a>
  156. </li>
  157. <li class="nav-item" data-depth="2">
  158. <a class="nav-link" href="transparency_sorting.html">Transparency Sorting</a>
  159. </li>
  160. </ul>
  161. </li>
  162. <li class="nav-item" data-depth="1">
  163. <button class="nav-item-toggle"></button>
  164. <span class="nav-text">Articles and How-to&#8217;s</span>
  165. <ul class="nav-list">
  166. <li class="nav-item" data-depth="2">
  167. <button class="nav-item-toggle"></button>
  168. <span class="nav-text">How to Model</span>
  169. <ul class="nav-list">
  170. <li class="nav-item" data-depth="3">
  171. <a class="nav-link" href="../how-to/modeling/3dsmax/3dsmax.html">3dsmax</a>
  172. </li>
  173. <li class="nav-item" data-depth="3">
  174. <button class="nav-item-toggle"></button>
  175. <a class="nav-link" href="../how-to/modeling/blender/blender.html">Blender</a>
  176. <ul class="nav-list">
  177. <li class="nav-item" data-depth="4">
  178. <a class="nav-link" href="../how-to/modeling/blender/blender_buffer_clearing.html">Buffer Clearing</a>
  179. </li>
  180. <li class="nav-item" data-depth="4">
  181. <a class="nav-link" href="../how-to/modeling/blender/blender_gltf.html">Export as GlTF</a>
  182. </li>
  183. <li class="nav-item" data-depth="4">
  184. <a class="nav-link" href="../how-to/modeling/blender/blender_ogre_export.html">Export as Ogre XML</a>
  185. </li>
  186. <li class="nav-item" data-depth="4">
  187. <a class="nav-link" href="../how-to/modeling/blender/blender_ogre_compatibility.html">Ogre Compatibility</a>
  188. </li>
  189. <li class="nav-item" data-depth="4">
  190. <a class="nav-link" href="../how-to/modeling/blender/makehuman.html">MakeHuman</a>
  191. </li>
  192. <li class="nav-item" data-depth="4">
  193. <a class="nav-link" href="../how-to/modeling/blender/makehuman_blender_ogrexml_toolchain.html">MakeHuman toolchain</a>
  194. </li>
  195. </ul>
  196. </li>
  197. </ul>
  198. </li>
  199. <li class="nav-item" data-depth="2">
  200. <button class="nav-item-toggle"></button>
  201. <span class="nav-text">How to Animate</span>
  202. <ul class="nav-list">
  203. <li class="nav-item" data-depth="3">
  204. <button class="nav-item-toggle"></button>
  205. <span class="nav-text">Mixamo</span>
  206. <ul class="nav-list">
  207. <li class="nav-item" data-depth="4">
  208. <a class="nav-link" href="../how-to/modeling/blender/mixamo.html">Blender Models</a>
  209. </li>
  210. </ul>
  211. </li>
  212. </ul>
  213. </li>
  214. <li class="nav-item" data-depth="2">
  215. <a class="nav-link" href="../how-to/debugging.html">Debugging with Wireframes</a>
  216. </li>
  217. <li class="nav-item" data-depth="2">
  218. <a class="nav-link" href="../how-to/util/free_skymaps.html">How to create free skymaps</a>
  219. </li>
  220. <li class="nav-item" data-depth="2">
  221. <button class="nav-item-toggle"></button>
  222. <span class="nav-text">Java Tips</span>
  223. <ul class="nav-list">
  224. <li class="nav-item" data-depth="3">
  225. <a class="nav-link" href="../how-to/java/localization.html">Localization</a>
  226. </li>
  227. <li class="nav-item" data-depth="3">
  228. <a class="nav-link" href="../how-to/java/swing_canvas.html">Swing Canvas</a>
  229. </li>
  230. <li class="nav-item" data-depth="3">
  231. <a class="nav-link" href="../how-to/java/logging.html">Logging</a>
  232. </li>
  233. <li class="nav-item" data-depth="3">
  234. <a class="nav-link" href="../how-to/java/read_graphic_card_capabilites.html">Read Graphics Capabilities</a>
  235. </li>
  236. </ul>
  237. </li>
  238. <li class="nav-item" data-depth="2">
  239. <button class="nav-item-toggle"></button>
  240. <span class="nav-text">Articles</span>
  241. <ul class="nav-list">
  242. <li class="nav-item" data-depth="3">
  243. <button class="nav-item-toggle"></button>
  244. <span class="nav-text">Physically Based Rendering</span>
  245. <ul class="nav-list">
  246. <li class="nav-item" data-depth="4">
  247. <a class="nav-link" href="../how-to/articles/pbr/pbr_part1.html">PBR – Part one</a>
  248. </li>
  249. <li class="nav-item" data-depth="4">
  250. <a class="nav-link" href="../how-to/articles/pbr/pbr_part2.html">PBR – Part two</a>
  251. </li>
  252. <li class="nav-item" data-depth="4">
  253. <a class="nav-link" href="../how-to/articles/pbr/pbr_part3.html">PBR – Part three</a>
  254. </li>
  255. </ul>
  256. </li>
  257. </ul>
  258. </li>
  259. </ul>
  260. </li>
  261. </ul>
  262. </li>
  263. <li class="nav-item" data-depth="0">
  264. <ul class="nav-list">
  265. <li class="nav-item" data-depth="1">
  266. <button class="nav-item-toggle"></button>
  267. <span class="nav-text">Core Engine</span>
  268. <ul class="nav-list">
  269. <li class="nav-item" data-depth="2">
  270. <a class="nav-link" href="../../core/app/simpleapplication.html">SimpleApplication</a>
  271. </li>
  272. <li class="nav-item" data-depth="2">
  273. <a class="nav-link" href="../../core/system/appsettings.html">AppSettings</a>
  274. </li>
  275. </ul>
  276. </li>
  277. <li class="nav-item" data-depth="1">
  278. <button class="nav-item-toggle"></button>
  279. <span class="nav-text">Controlling Game Logic</span>
  280. <ul class="nav-list">
  281. <li class="nav-item" data-depth="2">
  282. <a class="nav-link" href="../../core/app/update_loop.html">Update Loop</a>
  283. </li>
  284. <li class="nav-item" data-depth="2">
  285. <a class="nav-link" href="../../core/app/state/application_states.html">Application States</a>
  286. </li>
  287. <li class="nav-item" data-depth="2">
  288. <button class="nav-item-toggle"></button>
  289. <a class="nav-link" href="../../core/scene/control/custom_controls.html">Custom Controls</a>
  290. <ul class="nav-list">
  291. <li class="nav-item" data-depth="3">
  292. <button class="nav-item-toggle"></button>
  293. <span class="nav-text">Video</span>
  294. <ul class="nav-list">
  295. <li class="nav-item" data-depth="4">
  296. <a class="nav-link" href="https://www.youtube.com/watch?v=MNDiZ9YHIpM">Control any scene node</a>
  297. </li>
  298. <li class="nav-item" data-depth="4">
  299. <a class="nav-link" href="https://www.youtube.com/watch?v=-OzRZscLlHY">Control a character</a>
  300. </li>
  301. <li class="nav-item" data-depth="4">
  302. <a class="nav-link" href="https://wiki.jmonkeyengine.org/Scenes/SDK-UsecaseDemo_1.zip">Video Source Code</a>
  303. </li>
  304. </ul>
  305. </li>
  306. </ul>
  307. </li>
  308. <li class="nav-item" data-depth="2">
  309. <a class="nav-link" href="../../core/app/multithreading.html">Multithreading</a>
  310. </li>
  311. </ul>
  312. </li>
  313. <li class="nav-item" data-depth="1">
  314. <button class="nav-item-toggle"></button>
  315. <span class="nav-text">Scene Graph</span>
  316. <ul class="nav-list">
  317. <li class="nav-item" data-depth="2">
  318. <a class="nav-link" href="../../core/scene/traverse_scenegraph.html">Traverse SceneGraph</a>
  319. </li>
  320. <li class="nav-item" data-depth="2">
  321. <a class="nav-link" href="../../core/scene/spatial.html">Spatial: Node vs Geometry</a>
  322. </li>
  323. <li class="nav-item" data-depth="2">
  324. <button class="nav-item-toggle"></button>
  325. <a class="nav-link" href="../../core/scene/mesh.html">Mesh</a>
  326. <ul class="nav-list">
  327. <li class="nav-item" data-depth="3">
  328. <a class="nav-link" href="../../core/scene/custom_meshes.html">Custom Meshes</a>
  329. </li>
  330. <li class="nav-item" data-depth="3">
  331. <a class="nav-link" href="../../core/scene/shape/shape.html">Shape</a>
  332. </li>
  333. <li class="nav-item" data-depth="3">
  334. <a class="nav-link" href="../../core/scene/3d_models.html">3D Models</a>
  335. </li>
  336. </ul>
  337. </li>
  338. <li class="nav-item" data-depth="2">
  339. <a class="nav-link" href="../../core/asset/asset_manager.html">Asset Manager</a>
  340. </li>
  341. <li class="nav-item" data-depth="2">
  342. <a class="nav-link" href="../../core/export/save_and_load.html">Saving and Loading Nodes</a>
  343. </li>
  344. <li class="nav-item" data-depth="2">
  345. <a class="nav-link" href="../../core/collision/collision_and_intersection.html">Collision and Intersection</a>
  346. </li>
  347. <li class="nav-item" data-depth="2">
  348. <a class="nav-link" href="../../core/scene/control/level_of_detail.html">Level of Detail</a>
  349. </li>
  350. </ul>
  351. </li>
  352. <li class="nav-item" data-depth="1">
  353. <button class="nav-item-toggle"></button>
  354. <span class="nav-text">Animation, Scene</span>
  355. <ul class="nav-list">
  356. <li class="nav-item" data-depth="2">
  357. <a class="nav-link" href="../../core/animation/animation_new.html">Animation with AnimComposer</a>
  358. </li>
  359. <li class="nav-item" data-depth="2">
  360. <a class="nav-link" href="../../core/animation/animation.html">Animation-Old (AnimControl)</a>
  361. </li>
  362. <li class="nav-item" data-depth="2">
  363. <a class="nav-link" href="../../core/cinematic/cinematics.html">Cinematics (cutscenes, fake destruction physics)</a>
  364. </li>
  365. <li class="nav-item" data-depth="2">
  366. <a class="nav-link" href="../../core/cinematic/motionpath.html">MotionPaths and Waypoints</a>
  367. </li>
  368. </ul>
  369. </li>
  370. <li class="nav-item" data-depth="1">
  371. <button class="nav-item-toggle"></button>
  372. <span class="nav-text">Material, Light, Shadow</span>
  373. <ul class="nav-list">
  374. <li class="nav-item" data-depth="2">
  375. <a class="nav-link" href="../../core/material/how_to_use_materials.html">How to use Materials</a>
  376. </li>
  377. <li class="nav-item" data-depth="2">
  378. <a class="nav-link" href="../../core/material/j3m_material_files.html">.j3m Material Files</a>
  379. </li>
  380. <li class="nav-item" data-depth="2">
  381. <a class="nav-link" href="../../core/material/material_definitions.html">.j3md Material Definitions</a>
  382. </li>
  383. <li class="nav-item" data-depth="2">
  384. <a class="nav-link" href="../../core/material/materials_overview.html">.j3md Properties</a>
  385. </li>
  386. <li class="nav-item" data-depth="2">
  387. <a class="nav-link" href="../../core/shader/jme3_shaders.html">Shaders and JME3</a>
  388. </li>
  389. <li class="nav-item" data-depth="2">
  390. <a class="nav-link" href="../../core/shader/jme3_shadernodes.html">Shader Node System</a>
  391. </li>
  392. <li class="nav-item" data-depth="2">
  393. <a class="nav-link" href="../../core/shader/shader_video_tutorials.html">Shader Video Tutorials</a>
  394. </li>
  395. <li class="nav-item" data-depth="2">
  396. <a class="nav-link" href="../../core/light/light_and_shadow.html">Light and Shadow</a>
  397. </li>
  398. <li class="nav-item" data-depth="2">
  399. <a class="nav-link" href="../../core/texture/anisotropic_filtering.html">Anisotropic Filtering</a>
  400. </li>
  401. <li class="nav-item" data-depth="2">
  402. <a class="nav-link" href="../../core/system/jme3_srgbpipeline.html">Gamma Correction</a>
  403. </li>
  404. <li class="nav-item" data-depth="2">
  405. <a class="nav-link" href="../../core/material/normal_types.html">Normal Map Conventions</a>
  406. </li>
  407. </ul>
  408. </li>
  409. <li class="nav-item" data-depth="1">
  410. <button class="nav-item-toggle"></button>
  411. <span class="nav-text">Audio, Video</span>
  412. <ul class="nav-list">
  413. <li class="nav-item" data-depth="2">
  414. <a class="nav-link" href="../../core/audio/audio.html">Playing Sounds</a>
  415. </li>
  416. <li class="nav-item" data-depth="2">
  417. <a class="nav-link" href="../../core/audio/audio_environment_presets.html">Audio Environment Presets</a>
  418. </li>
  419. <li class="nav-item" data-depth="2">
  420. <a class="nav-link" href="../../core/app/state/screenshots.html">Capture Screenshots</a>
  421. </li>
  422. <li class="nav-item" data-depth="2">
  423. <a class="nav-link" href="../../core/app/state/capture_audio_video_to_a_file.html">Capture Audio/Video</a>
  424. </li>
  425. </ul>
  426. </li>
  427. <li class="nav-item" data-depth="1">
  428. <button class="nav-item-toggle"></button>
  429. <span class="nav-text">Filter, Effect</span>
  430. <ul class="nav-list">
  431. <li class="nav-item" data-depth="2">
  432. <a class="nav-link" href="../../core/effect/effects_overview.html">Overview</a>
  433. </li>
  434. <li class="nav-item" data-depth="2">
  435. <a class="nav-link" href="../../core/effect/bloom_and_glow.html">Bloom and Glow</a>
  436. </li>
  437. <li class="nav-item" data-depth="2">
  438. <a class="nav-link" href="../../core/effect/particle_emitters.html">Particle Emitters</a>
  439. </li>
  440. </ul>
  441. </li>
  442. <li class="nav-item" data-depth="1">
  443. <button class="nav-item-toggle"></button>
  444. <span class="nav-text">Landscapes</span>
  445. <ul class="nav-list">
  446. <li class="nav-item" data-depth="2">
  447. <a class="nav-link" href="../../core/util/sky.html">Sky</a>
  448. </li>
  449. <li class="nav-item" data-depth="2">
  450. <a class="nav-link" href="../../core/terrain/terrain.html">Terrain (TerraMonkey)</a>
  451. </li>
  452. <li class="nav-item" data-depth="2">
  453. <a class="nav-link" href="../../core/collision/terrain_collision.html">Terrain Collision</a>
  454. </li>
  455. <li class="nav-item" data-depth="2">
  456. <a class="nav-link" href="../../core/effect/water.html">Simple Water</a>
  457. </li>
  458. <li class="nav-item" data-depth="2">
  459. <a class="nav-link" href="../../core/effect/post-processor_water.html">Post-Processor Water</a>
  460. </li>
  461. </ul>
  462. </li>
  463. <li class="nav-item" data-depth="1">
  464. <button class="nav-item-toggle"></button>
  465. <span class="nav-text">Camera</span>
  466. <ul class="nav-list">
  467. <li class="nav-item" data-depth="2">
  468. <a class="nav-link" href="../../core/renderer/camera.html">Camera</a>
  469. </li>
  470. <li class="nav-item" data-depth="2">
  471. <a class="nav-link" href="../../core/renderer/making_the_camera_follow_a_character.html">Follow a Character</a>
  472. </li>
  473. <li class="nav-item" data-depth="2">
  474. <a class="nav-link" href="../../core/renderer/remote-controlling_the_camera.html">Remote-Controlling</a>
  475. </li>
  476. <li class="nav-item" data-depth="2">
  477. <a class="nav-link" href="../../core/renderer/multiple_camera_views.html">Multiple Camera Views</a>
  478. </li>
  479. <li class="nav-item" data-depth="2">
  480. <a class="nav-link" href="../../core/renderer/jme3_renderbuckets.html">Render Buckets</a>
  481. </li>
  482. </ul>
  483. </li>
  484. <li class="nav-item" data-depth="1">
  485. <button class="nav-item-toggle"></button>
  486. <span class="nav-text">Rendering</span>
  487. <ul class="nav-list">
  488. <li class="nav-item" data-depth="2">
  489. <a class="nav-link" href="../../core/renderer/render_pipeline.html">Render Pipelines</a>
  490. </li>
  491. </ul>
  492. </li>
  493. <li class="nav-item" data-depth="1">
  494. <button class="nav-item-toggle"></button>
  495. <span class="nav-text">User Interaction</span>
  496. <ul class="nav-list">
  497. <li class="nav-item" data-depth="2">
  498. <a class="nav-link" href="../../core/input/input_handling.html">Input Handling</a>
  499. </li>
  500. <li class="nav-item" data-depth="2">
  501. <a class="nav-link" href="../../core/input/combo_moves.html">Combo Moves</a>
  502. </li>
  503. <li class="nav-item" data-depth="2">
  504. <a class="nav-link" href="../../core/input/mouse_picking.html">Mouse Picking</a>
  505. </li>
  506. </ul>
  507. </li>
  508. <li class="nav-item" data-depth="1">
  509. <button class="nav-item-toggle"></button>
  510. <a class="nav-link" href="../../core/gui/topic_gui.html">Graphical User Interface</a>
  511. <ul class="nav-list">
  512. <li class="nav-item" data-depth="2">
  513. <button class="nav-item-toggle"></button>
  514. <span class="nav-text">Nifty GUI</span>
  515. <ul class="nav-list">
  516. <li class="nav-item" data-depth="3">
  517. <a class="nav-link" href="../../core/gui/nifty_gui.html">Integration Tutorial</a>
  518. </li>
  519. <li class="nav-item" data-depth="3">
  520. <a class="nav-link" href="../../core/gui/nifty_gui_best_practices.html">Best Practices</a>
  521. </li>
  522. <li class="nav-item" data-depth="3">
  523. <a class="nav-link" href="../../core/gui/nifty_gui_scenarios.html">Scenarios</a>
  524. </li>
  525. </ul>
  526. </li>
  527. <li class="nav-item" data-depth="2">
  528. <a class="nav-link" href="../../core/ui/hud.html">Head-Up Display (HUD)</a>
  529. </li>
  530. </ul>
  531. </li>
  532. <li class="nav-item" data-depth="1">
  533. <button class="nav-item-toggle"></button>
  534. <span class="nav-text">Virtual Reality</span>
  535. <ul class="nav-list">
  536. <li class="nav-item" data-depth="2">
  537. <a class="nav-link" href="../../core/vr/virtualreality.html">Virtual Reality</a>
  538. </li>
  539. <li class="nav-item" data-depth="2">
  540. <a class="nav-link" href="../../core/vr/legacyOpenVr.html">Virtual Reality Legacy Support</a>
  541. </li>
  542. <li class="nav-item" data-depth="2">
  543. <a class="nav-link" href="../../core/vr/virtualrealitycontrollers.html">Virtual Reality Legacy Controller Support</a>
  544. </li>
  545. </ul>
  546. </li>
  547. </ul>
  548. </li>
  549. <li class="nav-item" data-depth="0">
  550. <ul class="nav-list">
  551. <li class="nav-item" data-depth="1">
  552. <button class="nav-item-toggle"></button>
  553. <a class="nav-link" href="../../physics/physics.html">Physics</a>
  554. <ul class="nav-list">
  555. <li class="nav-item" data-depth="2">
  556. <a class="nav-link" href="../../physics/bullet_multithreading.html">Multi-Threaded Physics</a>
  557. </li>
  558. <li class="nav-item" data-depth="2">
  559. <a class="nav-link" href="../../physics/collision/physics_listeners.html">Collision Detection</a>
  560. </li>
  561. <li class="nav-item" data-depth="2">
  562. <a class="nav-link" href="../../physics/joint/hinges_and_joints.html">Hinges and Joints</a>
  563. </li>
  564. <li class="nav-item" data-depth="2">
  565. <a class="nav-link" href="../../physics/control/walking_character.html">Walking Character</a>
  566. </li>
  567. <li class="nav-item" data-depth="2">
  568. <a class="nav-link" href="../../physics/control/ragdoll.html">Ragdoll</a>
  569. </li>
  570. <li class="nav-item" data-depth="2">
  571. <a class="nav-link" href="../../physics/control/vehicles.html">Vehicles</a>
  572. </li>
  573. <li class="nav-item" data-depth="2">
  574. <a class="nav-link" href="../../physics/control/softbody.html">Softbody</a>
  575. </li>
  576. <li class="nav-item" data-depth="2">
  577. <a class="nav-link" href="../../physics/bullet_pitfalls.html">Bullet Physics Pitfalls</a>
  578. </li>
  579. </ul>
  580. </li>
  581. </ul>
  582. </li>
  583. <li class="nav-item" data-depth="0">
  584. <ul class="nav-list">
  585. <li class="nav-item" data-depth="1">
  586. <button class="nav-item-toggle"></button>
  587. <span class="nav-text">Networking</span>
  588. <ul class="nav-list">
  589. <li class="nav-item" data-depth="2">
  590. <a class="nav-link" href="../../networking/networking.html">Networking (SpiderMonkey)</a>
  591. </li>
  592. <li class="nav-item" data-depth="2">
  593. <a class="nav-link" href="../../networking/headless_server.html">Headless Server</a>
  594. </li>
  595. <li class="nav-item" data-depth="2">
  596. <a class="nav-link" href="../../networking/monkey_zone.html">Multi-Player Demo Code</a>
  597. </li>
  598. <li class="nav-item" data-depth="2">
  599. <a class="nav-link" href="../../networking/networking_video_tutorials.html">Networking Video Tutorials</a>
  600. </li>
  601. </ul>
  602. </li>
  603. </ul>
  604. </li>
  605. <li class="nav-item" data-depth="0">
  606. <ul class="nav-list">
  607. <li class="nav-item" data-depth="1">
  608. <button class="nav-item-toggle"></button>
  609. <span class="nav-text">User Contributions</span>
  610. <ul class="nav-list">
  611. <li class="nav-item" data-depth="2">
  612. <a class="nav-link" href="../../contributions/contributions.html">User Made Utilities</a>
  613. </li>
  614. <li class="nav-item" data-depth="2">
  615. <button class="nav-item-toggle"></button>
  616. <span class="nav-text">Shader</span>
  617. <ul class="nav-list">
  618. <li class="nav-item" data-depth="3">
  619. <a class="nav-link" href="../../contributions/shader/shaderblow_project.html">ShaderBlow Project</a>
  620. </li>
  621. </ul>
  622. </li>
  623. <li class="nav-item" data-depth="2">
  624. <button class="nav-item-toggle"></button>
  625. <span class="nav-text">Landscapes</span>
  626. <ul class="nav-list">
  627. <li class="nav-item" data-depth="3">
  628. <a class="nav-link" href="../../contributions/lanscapes/vegetationsystem/vegetationsystem.html">Vegetation System</a>
  629. </li>
  630. </ul>
  631. </li>
  632. <li class="nav-item" data-depth="2">
  633. <button class="nav-item-toggle"></button>
  634. <span class="nav-text">Networking</span>
  635. <ul class="nav-list">
  636. <li class="nav-item" data-depth="3">
  637. <a class="nav-link" href="../../contributions/networking/open_game_finder.html">Open Game Finder</a>
  638. </li>
  639. </ul>
  640. </li>
  641. <li class="nav-item" data-depth="2">
  642. <button class="nav-item-toggle"></button>
  643. <span class="nav-text">Entity System</span>
  644. <ul class="nav-list">
  645. <li class="nav-item" data-depth="3">
  646. <a class="nav-link" href="#es/entitysystem.adoc">The Zay-ES Entity System</a>
  647. </li>
  648. </ul>
  649. </li>
  650. <li class="nav-item" data-depth="2">
  651. <button class="nav-item-toggle"></button>
  652. <span class="nav-text">Artificial Intelligence</span>
  653. <ul class="nav-list">
  654. <li class="nav-item" data-depth="3">
  655. <a class="nav-link" href="../../contributions/ai/recast.html">Recast Navigation</a>
  656. </li>
  657. <li class="nav-item" data-depth="3">
  658. <a class="nav-link" href="../../contributions/ai/building_recast.html">Updating and building Recast Native Bindings</a>
  659. </li>
  660. <li class="nav-item" data-depth="3">
  661. <a class="nav-link" href="../../contributions/ai/monkey_brains.html">Monkey Brains</a>
  662. </li>
  663. <li class="nav-item" data-depth="3">
  664. <a class="nav-link" href="../../contributions/ai/steer_behaviours.html">Steer Behaviours</a>
  665. </li>
  666. <li class="nav-item" data-depth="3">
  667. <a class="nav-link" href="../../contributions/ai/jme3_ai.html">jME3 Artificial Intelligence</a>
  668. </li>
  669. </ul>
  670. </li>
  671. <li class="nav-item" data-depth="2">
  672. <button class="nav-item-toggle"></button>
  673. <a class="nav-link" href="../../contributions/gui/topic_contributions_gui.html">GUI</a>
  674. <ul class="nav-list">
  675. <li class="nav-item" data-depth="3">
  676. <a class="nav-link" href="../../contributions/contributions.html#lemur-gui-library">Lemur - a native jME3 GUI library with scene graph tools</a>
  677. </li>
  678. <li class="nav-item" data-depth="3">
  679. <a class="nav-link" href="../../contributions/contributions.html#tonegodgui">tonegodGUI - a native jME3 GUI library</a>
  680. </li>
  681. <li class="nav-item" data-depth="3">
  682. <a class="nav-link" href="../../contributions/contributions.html#immediate-graphical-user-interface">Immediate graphical user interface</a>
  683. </li>
  684. </ul>
  685. </li>
  686. <li class="nav-item" data-depth="2">
  687. <button class="nav-item-toggle"></button>
  688. <span class="nav-text">Tools</span>
  689. <ul class="nav-list">
  690. <li class="nav-item" data-depth="3">
  691. <a class="nav-link" href="../../contributions/tools/navigation.html">Mercator Projection Tool (Marine Navigation)</a>
  692. </li>
  693. <li class="nav-item" data-depth="3">
  694. <a class="nav-link" href="../../contributions/tools/charts.html">Visualizing Maps in JME3 (Marine Charts)</a>
  695. </li>
  696. </ul>
  697. </li>
  698. <li class="nav-item" data-depth="2">
  699. <button class="nav-item-toggle"></button>
  700. <a class="nav-link" href="../../contributions/vr/topic_contributions_vr.html">Virtual Reality (And augmented reality)</a>
  701. <ul class="nav-list">
  702. <li class="nav-item" data-depth="3">
  703. <a class="nav-link" href="../../contributions/contributions.html#tamarin-openxr">Tamarin OpenXR</a>
  704. </li>
  705. </ul>
  706. </li>
  707. <li class="nav-item" data-depth="2">
  708. <button class="nav-item-toggle"></button>
  709. <span class="nav-text">Projects</span>
  710. <ul class="nav-list">
  711. <li class="nav-item" data-depth="3">
  712. <a class="nav-link" href="../../contributions/projects/rise_of_mutants_project.html">Rise of Mutants Project</a>
  713. </li>
  714. </ul>
  715. </li>
  716. </ul>
  717. </li>
  718. </ul>
  719. </li>
  720. <li class="nav-item" data-depth="0">
  721. <ul class="nav-list">
  722. <li class="nav-item" data-depth="1">
  723. <button class="nav-item-toggle"></button>
  724. <a class="nav-link" href="../../sdk/sdk.html">SDK</a>
  725. <ul class="nav-list">
  726. <li class="nav-item" data-depth="2">
  727. <button class="nav-item-toggle"></button>
  728. <span class="nav-text">Video Tutorials</span>
  729. <ul class="nav-list">
  730. <li class="nav-item" data-depth="3">
  731. <button class="nav-item-toggle"></button>
  732. <span class="nav-text">SDK Use Case Tutorials</span>
  733. <ul class="nav-list">
  734. <li class="nav-item" data-depth="4">
  735. <a class="nav-link" href="http://www.youtube.com/watch?v=-OzRZscLlHY">Demo 1 (Quixote demo)</a>
  736. </li>
  737. <li class="nav-item" data-depth="4">
  738. <a class="nav-link" href="http://www.youtube.com/watch?v=6-YWxD3JByE">Demo 2 (Models and Materials)</a>
  739. </li>
  740. </ul>
  741. </li>
  742. <li class="nav-item" data-depth="3">
  743. <button class="nav-item-toggle"></button>
  744. <span class="nav-text">SDK Tutorials</span>
  745. <ul class="nav-list">
  746. <li class="nav-item" data-depth="4">
  747. <a class="nav-link" href="http://www.youtube.com/watch?v=M1_0pbeyJzI">Basics</a>
  748. </li>
  749. <li class="nav-item" data-depth="4">
  750. <a class="nav-link" href="http://www.youtube.com/watch?v=nL7woH40i5c">Importing Models</a>
  751. </li>
  752. <li class="nav-item" data-depth="4">
  753. <a class="nav-link" href="http://www.youtube.com/watch?v=DUmgAjiNzhY">Dragging&amp;Dropping Nodes</a>
  754. </li>
  755. <li class="nav-item" data-depth="4">
  756. <a class="nav-link" href="http://www.youtube.com/watch?v=ntPAmtsQ6eM">Scene Composing</a>
  757. </li>
  758. <li class="nav-item" data-depth="4">
  759. <a class="nav-link" href="http://www.youtube.com/watch?v=zgPV3W6dD4s">Terrain with Collision Shape</a>
  760. </li>
  761. <li class="nav-item" data-depth="4">
  762. <a class="nav-link" href="http://www.youtube.com/watch?v=Feu3-mrpolc">Working with Materials</a>
  763. </li>
  764. <li class="nav-item" data-depth="4">
  765. <a class="nav-link" href="http://www.youtube.com/watch?v=MNDiZ9YHIpM">Custom Controls</a>
  766. </li>
  767. <li class="nav-item" data-depth="4">
  768. <a class="nav-link" href="http://www.youtube.com/watch?v=oZnssg8TBWQ">WebStart Deployment</a>
  769. </li>
  770. <li class="nav-item" data-depth="4">
  771. <a class="nav-link" href="http://www.youtube.com/watch?v=D7JM4VMKqPc">Animation and Effect TrackEditing</a>
  772. </li>
  773. </ul>
  774. </li>
  775. </ul>
  776. </li>
  777. <li class="nav-item" data-depth="2">
  778. <button class="nav-item-toggle"></button>
  779. <span class="nav-text">Getting Started</span>
  780. <ul class="nav-list">
  781. <li class="nav-item" data-depth="3">
  782. <a class="nav-link" href="../../sdk/update_center.html">Updating jMonkeyEngine SDK</a>
  783. </li>
  784. <li class="nav-item" data-depth="3">
  785. <a class="nav-link" href="../../sdk/troubleshooting.html">Troubleshooting</a>
  786. </li>
  787. </ul>
  788. </li>
  789. <li class="nav-item" data-depth="2">
  790. <button class="nav-item-toggle"></button>
  791. <span class="nav-text">Java Development Features</span>
  792. <ul class="nav-list">
  793. <li class="nav-item" data-depth="3">
  794. <a class="nav-link" href="../../sdk/project_creation.html">Project Creation</a>
  795. </li>
  796. <li class="nav-item" data-depth="3">
  797. <a class="nav-link" href="../../sdk/code_editor.html">Code Editor and Palette</a>
  798. </li>
  799. <li class="nav-item" data-depth="3">
  800. <a class="nav-link" href="../../sdk/version_control.html">File Version Control</a>
  801. </li>
  802. <li class="nav-item" data-depth="3">
  803. <a class="nav-link" href="../../sdk/debugging_profiling_testing.html">Debug, Profile, Test</a>
  804. </li>
  805. <li class="nav-item" data-depth="3">
  806. <button class="nav-item-toggle"></button>
  807. <a class="nav-link" href="../../sdk/application_deployment.html">Application Deployment</a>
  808. <ul class="nav-list">
  809. <li class="nav-item" data-depth="4">
  810. <a class="nav-link" href="../../sdk/default_build_script.html">Default Build Script</a>
  811. </li>
  812. <li class="nav-item" data-depth="4">
  813. <a class="nav-link" href="../../sdk/android.html">Android</a>
  814. </li>
  815. <li class="nav-item" data-depth="4">
  816. <a class="nav-link" href="../../sdk/android_cheat_sheet.html">Android Cheat Sheet</a>
  817. </li>
  818. <li class="nav-item" data-depth="4">
  819. <a class="nav-link" href="../../sdk/ios.html">iOS</a>
  820. </li>
  821. </ul>
  822. </li>
  823. </ul>
  824. </li>
  825. <li class="nav-item" data-depth="2">
  826. <button class="nav-item-toggle"></button>
  827. <span class="nav-text">Unique Features</span>
  828. <ul class="nav-list">
  829. <li class="nav-item" data-depth="3">
  830. <button class="nav-item-toggle"></button>
  831. <a class="nav-link" href="../../sdk/model_loader_and_viewer.html">Import, View, Convert Models</a>
  832. <ul class="nav-list">
  833. <li class="nav-item" data-depth="4">
  834. <a class="nav-link" href="../../sdk/asset_packs.html">Asset Packs</a>
  835. </li>
  836. </ul>
  837. </li>
  838. <li class="nav-item" data-depth="3">
  839. <a class="nav-link" href="../../sdk/scene_explorer.html">The SceneExplorer</a>
  840. </li>
  841. <li class="nav-item" data-depth="3">
  842. <a class="nav-link" href="../../sdk/scene_composer.html">Composing a Scene</a>
  843. </li>
  844. <li class="nav-item" data-depth="3">
  845. <a class="nav-link" href="../../sdk/terrain_editor.html">Terrain Editor</a>
  846. </li>
  847. <li class="nav-item" data-depth="3">
  848. <a class="nav-link" href="../../sdk/sample_code.html">Sample Code</a>
  849. </li>
  850. <li class="nav-item" data-depth="3">
  851. <a class="nav-link" href="../../sdk/material_editing.html">Material Editing</a>
  852. </li>
  853. <li class="nav-item" data-depth="3">
  854. <a class="nav-link" href="../../sdk/font_creation.html">Creating Bitmap Fonts</a>
  855. </li>
  856. <li class="nav-item" data-depth="3">
  857. <button class="nav-item-toggle"></button>
  858. <a class="nav-link" href="https://hub.jmonkeyengine.org/t/effecttrack-and-audiotrack-editing-in-the-sdk/23378">Audio and Effect Track Editing</a>
  859. <ul class="nav-list">
  860. <li class="nav-item" data-depth="4">
  861. <a class="nav-link" href="https://www.youtube.com/watch?v=D7JM4VMKqPc">Video: Effect and AudioTrack editing in jMonkeyEngine 3 sdk</a>
  862. </li>
  863. </ul>
  864. </li>
  865. <li class="nav-item" data-depth="3">
  866. <a class="nav-link" href="../../sdk/filters.html">Post-Processor Filter Editor and Viewer</a>
  867. </li>
  868. <li class="nav-item" data-depth="3">
  869. <a class="nav-link" href="../../core/app/state/application_states.html">Application States</a>
  870. </li>
  871. <li class="nav-item" data-depth="3">
  872. <a class="nav-link" href="../../core/scene/control/custom_controls.html">Custom Controls</a>
  873. </li>
  874. <li class="nav-item" data-depth="3">
  875. <a class="nav-link" href="../../sdk/vehicle_creator.html">Vehicle Creator</a>
  876. </li>
  877. <li class="nav-item" data-depth="3">
  878. <a class="nav-link" href="../../sdk/assetbrowser.html">Asset Browser</a>
  879. </li>
  880. <li class="nav-item" data-depth="3">
  881. <a class="nav-link" href="../../sdk/animations.html">Animations</a>
  882. </li>
  883. </ul>
  884. </li>
  885. <li class="nav-item" data-depth="2">
  886. <button class="nav-item-toggle"></button>
  887. <span class="nav-text">Advanced Usage</span>
  888. <ul class="nav-list">
  889. <li class="nav-item" data-depth="3">
  890. <a class="nav-link" href="../../sdk/build_platform.html">Building jMonkeyEngine SDK</a>
  891. </li>
  892. <li class="nav-item" data-depth="3">
  893. <a class="nav-link" href="../../sdk/use_own_jme.html#.adoc">Using your own (modified) version of jME3 in jMonkeyEngine SDK</a>
  894. </li>
  895. <li class="nav-item" data-depth="3">
  896. <a class="nav-link" href="../../sdk/increasing_heap_memory.html">Increasing Heap Memory</a>
  897. </li>
  898. <li class="nav-item" data-depth="3">
  899. <a class="nav-link" href="../../sdk/log_files.html">Log Files</a>
  900. </li>
  901. </ul>
  902. </li>
  903. <li class="nav-item" data-depth="2">
  904. <button class="nav-item-toggle"></button>
  905. <span class="nav-text">Available external plugins</span>
  906. <ul class="nav-list">
  907. <li class="nav-item" data-depth="3">
  908. <a class="nav-link" href="../../contributions/contributions.html">Contributions</a>
  909. </li>
  910. <li class="nav-item" data-depth="3">
  911. <a class="nav-link" href="../../sdk/neotexture.html">Neo Texture Editor for procedural textures</a>
  912. </li>
  913. <li class="nav-item" data-depth="3">
  914. <a class="nav-link" href="http://www.youtube.com/watch?v=yS9a9o4WzL8">Video: Mesh Tool &amp; Physics Editor</a>
  915. </li>
  916. </ul>
  917. </li>
  918. <li class="nav-item" data-depth="2">
  919. <button class="nav-item-toggle"></button>
  920. <a class="nav-link" href="../../sdk/development.html">Developing plugins for jMonkeyEngine SDK</a>
  921. <ul class="nav-list">
  922. <li class="nav-item" data-depth="3">
  923. <a class="nav-link" href="../../sdk/development/setup.html">Creating a plugin</a>
  924. </li>
  925. <li class="nav-item" data-depth="3">
  926. <a class="nav-link" href="../../sdk/development/general.html">Creating components</a>
  927. </li>
  928. <li class="nav-item" data-depth="3">
  929. <a class="nav-link" href="../../sdk/development/scene.html">The Main Scene</a>
  930. </li>
  931. <li class="nav-item" data-depth="3">
  932. <a class="nav-link" href="../../sdk/development/sceneexplorer.html">The Scene Explorer</a>
  933. </li>
  934. <li class="nav-item" data-depth="3">
  935. <a class="nav-link" href="../../sdk/development/projects_assets.html">Projects and Assets</a>
  936. </li>
  937. <li class="nav-item" data-depth="3">
  938. <a class="nav-link" href="../../sdk/development/extension_library.html">Create a library plugin from a jar file</a>
  939. </li>
  940. <li class="nav-item" data-depth="3">
  941. <a class="nav-link" href="../../sdk/development/model_loader.html">Create a new or custom model filetype and loader</a>
  942. </li>
  943. </ul>
  944. </li>
  945. </ul>
  946. </li>
  947. </ul>
  948. </li>
  949. </ul>
  950. </nav>
  951. </div>
  952. <div class="nav-panel-explore" data-panel="explore">
  953. <div class="context">
  954. <span class="title">JME</span>
  955. <span class="version">3.8</span>
  956. </div>
  957. <ul class="components">
  958. <li class="component is-current">
  959. <span class="title">JME</span>
  960. <ul class="versions">
  961. <li class="version is-current">
  962. <a href="../../documentation.html">3.8</a>
  963. </li>
  964. <li class="version">
  965. <a href="../../../3.4/documentation.html">3.4</a>
  966. </li>
  967. <li class="version">
  968. <a href="../../../3.3/documentation.html">3.3</a>
  969. </li>
  970. <li class="version">
  971. <a href="../../../3.2/documentation.html">3.2</a>
  972. </li>
  973. </ul>
  974. </li>
  975. <li class="component">
  976. <span class="title">Wiki Contribution</span>
  977. <ul class="versions">
  978. <li class="version">
  979. <a href="../../../../docs-wiki/3.8/wiki_contributor.html">3.8</a>
  980. </li>
  981. </ul>
  982. </li>
  983. <li class="component">
  984. <span class="title">Wiki UI</span>
  985. <ul class="versions">
  986. <li class="version">
  987. <a href="../../../../wiki-ui/index.html">master</a>
  988. </li>
  989. </ul>
  990. </li>
  991. </ul>
  992. </div>
  993. </div>
  994. </aside>
  995. </div>
  996. <main class="article">
  997. <div class="toolbar" role="navigation">
  998. <button class="nav-toggle"></button>
  999. <nav class="breadcrumbs" aria-label="breadcrumbs">
  1000. <ul>
  1001. <li><a href="../../documentation.html">JME</a></li>
  1002. <li>Key Concepts</li>
  1003. <li><a href="terminology.html">3D Graphics Terminology</a></li>
  1004. </ul>
  1005. </nav>
  1006. <div class="page-versions">
  1007. <button class="version-menu-toggle" title="Show other versions of page">3.8</button>
  1008. <div class="version-menu">
  1009. <a class="version is-current" href="terminology.html">3.8</a>
  1010. <a class="version" href="../../../3.4/tutorials/concepts/terminology.html">3.4</a>
  1011. <a class="version" href="../../../3.3/tutorials/concepts/terminology.html">3.3</a>
  1012. <a class="version" href="../../../3.2/tutorials/concepts/terminology.html">3.2</a>
  1013. </div>
  1014. </div>
  1015. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/tutorials/pages/concepts/terminology.adoc">Edit this Page</a></div>
  1016. </div>
  1017. <div class="content">
  1018. <article class="doc">
  1019. <h1 class="page">3D Game Development Terminology</h1>
  1020. <div id="preamble">
  1021. <div class="sectionbody">
  1022. <div class="paragraph">
  1023. <p>Before you start, make certain you are familiar with the following concepts and terminology.</p>
  1024. </div>
  1025. </div>
  1026. </div>
  1027. <div class="sect1">
  1028. <h2 id="3d-graphics-and-audio"><a class="anchor" href="#3d-graphics-and-audio"></a>3D Graphics and Audio</h2>
  1029. <div class="sectionbody">
  1030. <div class="paragraph">
  1031. <p><strong>OpenGL</strong> is the Open Graphics Library, a platform-independent specification for rendering 2D/3D computer graphics. For Java, there are two implementations of OpenGL-based renderers:</p>
  1032. </div>
  1033. <div class="olist arabic">
  1034. <ol class="arabic">
  1035. <li>
  1036. <p>Lightweight Java Game Library (LWJGL).</p>
  1037. </li>
  1038. <li>
  1039. <p>Java OpenGL (JOGL)</p>
  1040. </li>
  1041. </ol>
  1042. </div>
  1043. <div class="paragraph">
  1044. <p><strong>OpenAL</strong> is the Open Audio Library, a platform-independent 3D audio <abbr title="Application Programming Interface">API</abbr>.</p>
  1045. </div>
  1046. </div>
  1047. </div>
  1048. <div class="sect1">
  1049. <h2 id="context-display-renderer"><a class="anchor" href="#context-display-renderer"></a>Context, Display, Renderer</h2>
  1050. <div class="sectionbody">
  1051. <div class="paragraph">
  1052. <p>The <strong>jME Context</strong> makes settings, renderer, timer, input and event listeners, display system, accessible to a JME game.</p>
  1053. </div>
  1054. <div class="ulist">
  1055. <ul>
  1056. <li>
  1057. <p>The <strong>jME Display System</strong> is what draws the custom JME window (instead of Java Swing).</p>
  1058. </li>
  1059. <li>
  1060. <p>The <strong>Input System</strong> is the component that lets you respond to user input: Mouse clicks and movements, keyboard presses, and joystick motions.</p>
  1061. </li>
  1062. <li>
  1063. <p>The <strong>Renderer</strong> is what does all the work of calculating how to draw the 3D scenegraph to the 2D screen.</p>
  1064. <div class="ulist">
  1065. <ul>
  1066. <li>
  1067. <p>The <strong>Shader</strong> is a programmable part of the rendering pipeline. The jME3 game engine uses it to offer advanced customizable materials.</p>
  1068. </li>
  1069. </ul>
  1070. </div>
  1071. </li>
  1072. </ul>
  1073. </div>
  1074. </div>
  1075. </div>
  1076. <div class="sect1">
  1077. <h2 id="geometry"><a class="anchor" href="#geometry"></a>Geometry</h2>
  1078. <div class="sectionbody">
  1079. <div class="sect2">
  1080. <h3 id="polygon-mesh-vertex"><a class="anchor" href="#polygon-mesh-vertex"></a>Polygon, Mesh, Vertex</h3>
  1081. <div class="imageblock right">
  1082. <div class="content">
  1083. <img src="../../core/_images/scene/dolphin-mesh.png" alt="dolphin-mesh.png" width="" height="">
  1084. </div>
  1085. </div>
  1086. <div class="paragraph">
  1087. <p>Most visible objects in a 3D scene are made up of polygon meshes – characters, terrains, buildings, etc. A mesh is a grid-like structure that represents a complex shape. The advantage of a mesh is that it is mathematically simple enough to render in real time, and detailed enough to be recognizable.</p>
  1088. </div>
  1089. <div class="paragraph">
  1090. <p>Every shape is reduced to a number of connected polygons, usually triangles; even round surfaces such as spheres are reduced to a grid of triangles. The polygons' corner points are called vertices. Every vertex is positioned at a coordinate, all vertices together describe the outline of the shape.</p>
  1091. </div>
  1092. <div class="paragraph">
  1093. <p>You create 3D meshes in tools called mesh editors, e.g in Blender. The jMonkeyEngine can load finished meshes (=models) and arrange them to scenes, but it cannot edit the mesh itself.</p>
  1094. </div>
  1095. </div>
  1096. </div>
  1097. </div>
  1098. <div class="sect1">
  1099. <h2 id="materials-color-lightingshading"><a class="anchor" href="#materials-color-lightingshading"></a>Materials: Color, Lighting/Shading</h2>
  1100. <div class="sectionbody">
  1101. <div class="paragraph">
  1102. <p>What we call &#8220;color&#8221; is merely part of an object&#8217;s light reflection. The onlooker&#8217;s brain uses shading and reflecting properties to infer an object&#8217;s shape and material. Factors like these make all the difference between chalk vs milk, skin vs paper, water vs plastic, etc!</p>
  1103. </div>
  1104. <div class="sect2">
  1105. <h3 id="color"><a class="anchor" href="#color"></a>Color</h3>
  1106. <div class="sect3">
  1107. <h4 id="ambient-color"><a class="anchor" href="#ambient-color"></a>Ambient color</h4>
  1108. <div class="ulist">
  1109. <ul>
  1110. <li>
  1111. <p>The uniform base color of the mesh – what it looks like when not influenced by any light source.</p>
  1112. </li>
  1113. <li>
  1114. <p>Usually similar to the Diffuse color.</p>
  1115. </li>
  1116. <li>
  1117. <p>This is the minimum color you need for an object to be visible.</p>
  1118. </li>
  1119. </ul>
  1120. </div>
  1121. </div>
  1122. <div class="sect3">
  1123. <h4 id="diffuse-color"><a class="anchor" href="#diffuse-color"></a>Diffuse color</h4>
  1124. <div class="ulist">
  1125. <ul>
  1126. <li>
  1127. <p>The base color of the mesh plus shattered light and shadows that are caused by a light source.</p>
  1128. </li>
  1129. <li>
  1130. <p>Usually similar to the Ambient color.</p>
  1131. </li>
  1132. </ul>
  1133. </div>
  1134. </div>
  1135. </div>
  1136. <div class="sect2">
  1137. <h3 id="light-sources"><a class="anchor" href="#light-sources"></a>Light Sources</h3>
  1138. <div class="sect3">
  1139. <h4 id="emissive-color"><a class="anchor" href="#emissive-color"></a>Emissive color</h4>
  1140. <div class="ulist">
  1141. <ul>
  1142. <li>
  1143. <p>The color of light emitted by a light source or glowing material.</p>
  1144. </li>
  1145. <li>
  1146. <p>Only glowing materials such as lights have an emissive color, normal objects don&#8217;t have this property.</p>
  1147. </li>
  1148. <li>
  1149. <p>Often white (sun light).</p>
  1150. </li>
  1151. </ul>
  1152. </div>
  1153. </div>
  1154. </div>
  1155. <div class="sect2">
  1156. <h3 id="reflections"><a class="anchor" href="#reflections"></a>Reflections</h3>
  1157. <div class="sect3">
  1158. <h4 id="shininess"><a class="anchor" href="#shininess"></a>Shininess</h4>
  1159. <div class="ulist">
  1160. <ul>
  1161. <li>
  1162. <p>Degree of shininess of a surface (1-128).</p>
  1163. </li>
  1164. <li>
  1165. <p>Shiny objects have small, clearly outlined specular highlights. (E.g. glass, water, silver)</p>
  1166. </li>
  1167. <li>
  1168. <p>Normal objects have wide, blurry specular highlights. (E.g. metal, plastic, stone, polished materials)</p>
  1169. </li>
  1170. <li>
  1171. <p>Uneven objects are not shiny and have no specular highlights. (E.g. cloth, paper, wood, snow)<br>
  1172. Set the Specular color to ColorRGBA.Black to switch off shininess.</p>
  1173. </li>
  1174. </ul>
  1175. </div>
  1176. </div>
  1177. <div class="sect3">
  1178. <h4 id="specular-color"><a class="anchor" href="#specular-color"></a>Specular Color</h4>
  1179. <div class="ulist">
  1180. <ul>
  1181. <li>
  1182. <p>If the material is shiny, then the Specular Color is the color of the reflected highlights.</p>
  1183. </li>
  1184. <li>
  1185. <p>Usually the same as the emissive color of the light source (e.g. white).</p>
  1186. </li>
  1187. <li>
  1188. <p>You can use colors to achieve special specular effects, such as metallic or iridescent reflections.</p>
  1189. </li>
  1190. <li>
  1191. <p>Non-shiny objects have a black specular color.</p>
  1192. </li>
  1193. </ul>
  1194. </div>
  1195. <div class="imageblock text-center">
  1196. <div class="content">
  1197. <img src="../_images/concepts/tanlglow2.png" alt="tanlglow2.png" width="400" height="234">
  1198. </div>
  1199. </div>
  1200. </div>
  1201. </div>
  1202. </div>
  1203. </div>
  1204. <div class="sect1">
  1205. <h2 id="materials-textures"><a class="anchor" href="#materials-textures"></a>Materials: Textures</h2>
  1206. <div class="sectionbody">
  1207. <div class="paragraph">
  1208. <p>Textures are part of Materials. In the simplest case, an object could have just one texture, the Color Map, loaded from one image file. When you think back of old computer games you&#8217;ll remember this looks quite plain.</p>
  1209. </div>
  1210. <div class="paragraph">
  1211. <p>The more information you (the game designer) provide additionally to the Color Map, the higher the degree of detail and realism. Whether you want photo-realistic rendering or &#8220;toon&#8221; rendering (Cel Shading), everything depends on the quality of your materials and textures. Modern 3D graphics use several layers of information to describe one material, each mapped layer is a texture.</p>
  1212. </div>
  1213. <div class="admonitionblock tip">
  1214. <table>
  1215. <tr>
  1216. <td class="icon">
  1217. <i class="fa icon-tip" title="Tip"></i>
  1218. </td>
  1219. <td class="content">
  1220. <div class="paragraph">
  1221. <p>Got no textures? <a href="http://opengameart.org">Download free textures from opengameart.org</a>. Remember to keep the copyright notice together with the textures!</p>
  1222. </div>
  1223. </td>
  1224. </tr>
  1225. </table>
  1226. </div>
  1227. <div class="sect2">
  1228. <h3 id="texture-mapping"><a class="anchor" href="#texture-mapping"></a>Texture Mapping</h3>
  1229. <div class="imageblock right">
  1230. <div class="content">
  1231. <img src="https://raw.githubusercontent.com/jMonkeyEngine/jmonkeyengine/master/jme3-testdata/src/main/resources/Models/HoverTank/tank_diffuse.jpg" alt="tank_diffuse.jpg" width="128" height="128">
  1232. </div>
  1233. </div>
  1234. <div class="ulist">
  1235. <ul>
  1236. <li>
  1237. <p><strong>Color Map / Diffuse Map</strong></p>
  1238. <div class="ulist">
  1239. <ul>
  1240. <li>
  1241. <p>A plain image file or a procedural texture that describes an object&#8217;s visible surface.</p>
  1242. </li>
  1243. <li>
  1244. <p>The image can have alpha channels for transparency.</p>
  1245. </li>
  1246. <li>
  1247. <p><strong>A Color Map is the minimum texture.</strong> You can map more textures as optional improvements.</p>
  1248. </li>
  1249. <li>
  1250. <p>Color Maps are unshaded. The same is called Diffuse Map in a Phong-illuminated material, because this texture defines the basic colors of light that are <em>diffused</em> by this object.</p>
  1251. </li>
  1252. </ul>
  1253. </div>
  1254. </li>
  1255. <li>
  1256. <p><strong>Bump Map</strong></p>
  1257. <div class="openblock">
  1258. <div class="content">
  1259. <div class="paragraph">
  1260. <p>Bump maps are used to describe detailed shapes that would be too hard or simply too inefficient to sculpt in a mesh editor.</p>
  1261. </div>
  1262. <div class="paragraph">
  1263. <p>There are two types:</p>
  1264. </div>
  1265. <div class="ulist">
  1266. <ul>
  1267. <li>
  1268. <p>You use Normal Maps to model tiny details such as cracks in walls, rust, skin texture, or a canvas weave ( (<a href="http://en.wikipedia.org/wiki/Bump_mapping">More on BumpMaps</a>).</p>
  1269. </li>
  1270. <li>
  1271. <p>You use Height Maps to model large terrains with valleys and mountains.</p>
  1272. </li>
  1273. </ul>
  1274. </div>
  1275. </div>
  1276. </div>
  1277. <div class="imageblock right">
  1278. <div class="content">
  1279. <img src="../_images/beginner/mountains512.png" alt="mountains512.png" width="128" height="128">
  1280. </div>
  1281. </div>
  1282. </li>
  1283. <li>
  1284. <p><strong>Height Map</strong></p>
  1285. <div class="ulist">
  1286. <ul>
  1287. <li>
  1288. <p>A height map is a grayscale image looking similar to a terrain map used in topography. Brighter grays represent higher areas and darker grays lower areas.</p>
  1289. </li>
  1290. <li>
  1291. <p>A heightmap can represent 256 height levels and is mostly used to roughly outline terrains.</p>
  1292. </li>
  1293. <li>
  1294. <p>You can draw a heightmap by hand in any image editor.</p>
  1295. </li>
  1296. </ul>
  1297. </div>
  1298. </li>
  1299. </ul>
  1300. </div>
  1301. <div class="imageblock right">
  1302. <div class="content">
  1303. <img src="https://raw.githubusercontent.com/jMonkeyEngine/jmonkeyengine/master/jme3-testdata/src/main/resources/Models/HoverTank/tank_normals.png" alt="tank_normals.png" width="128" height="128">
  1304. </div>
  1305. </div>
  1306. <div class="ulist">
  1307. <ul>
  1308. <li>
  1309. <p><strong>Normal Map</strong></p>
  1310. <div class="ulist">
  1311. <ul>
  1312. <li>
  1313. <p>A well-done Normal Map makes a shape more detailed – without the need to add costly polygons to the mesh. It contains shading information that makes the object appear smoother and more fine-grained.</p>
  1314. </li>
  1315. <li>
  1316. <p>When you open a Normal Map in an image editor, it looks like a false-color version of the Color Map. Normal maps however are never used for coloring, instead, each the color values encode displacement data of bumps and cracks on the surface. Displacement data is represented by the Surface Normals of the slopes, hence the name.</p>
  1317. </li>
  1318. <li>
  1319. <p>You cannot draw or edit normal maps by hand, professional designers use software to calculate them off high-quality 3D models. You can either buy a professional texture set, or find free collections that include Normal Maps.</p>
  1320. </li>
  1321. </ul>
  1322. </div>
  1323. </li>
  1324. </ul>
  1325. </div>
  1326. <div class="imageblock right">
  1327. <div class="content">
  1328. <img src="https://raw.githubusercontent.com/jMonkeyEngine/jmonkeyengine/master/jme3-testdata/src/main/resources/Models/HoverTank/tank_specular.jpg" alt="tank_specular.jpg" width="128" height="128">
  1329. </div>
  1330. </div>
  1331. <div class="ulist">
  1332. <ul>
  1333. <li>
  1334. <p><strong>Specular Map</strong></p>
  1335. <div class="ulist">
  1336. <ul>
  1337. <li>
  1338. <p>A Specular Map further improves the realism of an object&#8217;s surface: It contains extra information about shininess and makes the shape appear more realistically illuminated.</p>
  1339. </li>
  1340. <li>
  1341. <p>Start out with a copy of the Diffuse Map in a medium gray that corresponds to the average shininess/dullness of this material. Then add lighter grays for smoother, shinier, more reflective areas; and darker grays for duller, rougher, worn-out areas. The resulting image file looks similar to a grayscale version of the Diffuse Map.</p>
  1342. </li>
  1343. <li>
  1344. <p>You can use colors in a Specular map to create certain reflective effects (fake iridescence, metallic effect).</p>
  1345. </li>
  1346. </ul>
  1347. </div>
  1348. </li>
  1349. </ul>
  1350. </div>
  1351. <div class="imageblock right">
  1352. <div class="content">
  1353. <img src="https://raw.githubusercontent.com/jMonkeyEngine/jmonkeyengine/master/jme3-testdata/src/main/resources/Textures/Terrain/BrickWall/BrickWall.jpg" alt="BrickWall.jpg" width="128" height="128">
  1354. </div>
  1355. </div>
  1356. <div class="ulist">
  1357. <ul>
  1358. <li>
  1359. <p><strong>Seamless Tiled Textures</strong></p>
  1360. <div class="openblock">
  1361. <div class="content">
  1362. <div class="paragraph">
  1363. <p>Tiles are a very simple, commonly used type of texture. When texturing a wide area (e.g. walls, floors), you don&#8217;t create one huge texture – instead you tile a small texture repeatedly to fill the area.</p>
  1364. </div>
  1365. <div class="paragraph">
  1366. <p>A seamless texture is an image file that has been designed or modified so that it can be used as tiles: The right edge matches the left edge, and the top edge matches the bottom edge. The onlooker cannot easily tell where one starts and the next one ends, thus creating an illusion of a huge texture. The downside is that the tiling becomes painfully obvious when the area is viewed from a distance. Also you cannot use it on more complex models such as characters.</p>
  1367. </div>
  1368. <div class="paragraph">
  1369. <p>See also this tutorial on <a href="http://www.photoshoptextures.com/texture-tutorials/seamless-textures.htm">How to make seamless textures in Photoshop</a>.</p>
  1370. </div>
  1371. </div>
  1372. </div>
  1373. </li>
  1374. </ul>
  1375. </div>
  1376. <div class="imageblock right">
  1377. <div class="content">
  1378. <img src="https://raw.githubusercontent.com/jMonkeyEngine/jmonkeyengine/master/jme3-testdata/src/main/resources/Models/Ferrari/Car.jpg" alt="Car.jpg" width="128" height="128">
  1379. </div>
  1380. </div>
  1381. <div class="ulist">
  1382. <ul>
  1383. <li>
  1384. <p><strong>UV Maps / Texture Atlas</strong></p>
  1385. <div class="openblock">
  1386. <div class="content">
  1387. <div class="paragraph">
  1388. <p>Creating a texture for a cube is easy – but what about a character with a face and extremities? For more complex objects, you design the texture in the same ways as a flat sewing pattern: One image file contains the outline of the front, back, and side of the object, next to one another. Specific areas of the flat texture (UV coordinates) map onto certain areas of your 3D model (XYZ coordinates), hence the name UV map. Using UV Maps (also known as Texture Atlas), one model can have different textures on each side. You create one corresponding UV map for each texture.</p>
  1389. </div>
  1390. <div class="paragraph">
  1391. <p>Getting the seams and mappings right is crucial: You must use a graphic tool like Blender to create UV Maps (Texture Atlas) and store the coordinates correctly. It&#8217;s worth the while to learn this, UV mapped models look a lot more professional.</p>
  1392. </div>
  1393. </div>
  1394. </div>
  1395. </li>
  1396. <li>
  1397. <p><strong>Albedo Maps</strong></p>
  1398. <div class="openblock">
  1399. <div class="content">
  1400. <div class="paragraph">
  1401. <p>Albedo maps are similar to Diffuse maps with the exceptions that they don&#8217;t have shadows or highlights. They are used as the base color of a PBR material.</p>
  1402. </div>
  1403. </div>
  1404. </div>
  1405. </li>
  1406. </ul>
  1407. </div>
  1408. </div>
  1409. <div class="sect2">
  1410. <h3 id="environment-mapping"><a class="anchor" href="#environment-mapping"></a>Environment Mapping</h3>
  1411. <div class="imageblock right">
  1412. <div class="content">
  1413. <img src="../_images/concepts/glass-teapot1.png" alt="glass-teapot1.png" width="160" height="90">
  1414. </div>
  1415. </div>
  1416. <div class="paragraph">
  1417. <p>Environment Mapping or Reflection Mapping is used to create the impression of reflections and refractions in real time. It&#8217;s faster (but less accurate) than the raytracing methods used in offline rendering applications.</p>
  1418. </div>
  1419. <div class="paragraph">
  1420. <p>You create a Cube Map to represent your environment; Sphere Maps are also possible, but often look distorted. Basically you give the environment map a set of images showing a &#8220;360°&#8221; view of the background scene – very similar to a skybox. The renderer maps the environment on the texture of the reflective surface, which results in an acceptable &#8220;glass/mirror/water&#8221; effect. Just like a skybox, the reflection map is static, so dynamic things (such as the player walking) are not part of the reflection. (!)</p>
  1421. </div>
  1422. <div class="paragraph">
  1423. <p>See also: <a href="../../core/effect/water.html" class="xref page">Water</a>.</p>
  1424. </div>
  1425. </div>
  1426. <div class="sect2">
  1427. <h3 id="mip-map-texture"><a class="anchor" href="#mip-map-texture"></a>MIP Map Texture</h3>
  1428. <div class="paragraph">
  1429. <p>MIP Map means that you provide one texture in two or three resolutions in one file (MIP = &#8220;multum&#8221; in parvo = &#8220;many&#8221; in one). Depending on how close (or far) the camera is, the engine automatically renders a more (or less) detailed texture for the object. Thus objects look detailed at close up, but also look good when viewed from far away. Good for everything, but requires more time to create and more space to store textures. If you don&#8217;t provide custom ones, the jMonkeyEngine creates basic MIP maps automatically as an optimization.</p>
  1430. </div>
  1431. </div>
  1432. <div class="sect2">
  1433. <h3 id="procedural-textures"><a class="anchor" href="#procedural-textures"></a>Procedural Textures</h3>
  1434. <div class="paragraph">
  1435. <p>A procedural texture is generated from repeating one small image, plus some pseudo-random, gradient variations (called Perlin noise). Procedural textures look more natural than static rectangular textures, and they look less distorted on spheres. On big meshes, their repetitiveness is much less noticeable than with tiled seamless textures. Procedural textures are ideal for irregular large-area textures like grass, soil, rock, rust, and walls. Use the <a href="../../sdk/neotexture.html" class="xref page">jMonkeyEngine SDK NeoTexture plugin</a> to create them.</p>
  1436. </div>
  1437. <div class="imageblock text-center">
  1438. <div class="content">
  1439. <img src="../_images/concepts/neotexture-2.jpg" alt="neotexture-2.jpg" width="380" height="189">
  1440. </div>
  1441. </div>
  1442. <div class="paragraph">
  1443. <p>See also: <a href="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Every_Material_Known_to_Man">Blender: Every Material Known to Man</a></p>
  1444. </div>
  1445. </div>
  1446. <div class="sect2">
  1447. <h3 id="physically-based-rendering-textures-pbr"><a class="anchor" href="#physically-based-rendering-textures-pbr"></a>Physically Based Rendering Textures (PBR)</h3>
  1448. <div class="quoteblock">
  1449. <blockquote>
  1450. Physically based rendering is an approach in computer graphics that seeks to render graphics in a way that more accurately models the flow of light in the real world.
  1451. </blockquote>
  1452. <div class="attribution">
  1453. &#8212; Wikipedia
  1454. </div>
  1455. </div>
  1456. <div class="paragraph">
  1457. <p>To simplify, PBR attempts to deliver photo realistic images based off the texture of a material and how light becomes more reflective the more you view it at an angle. In other words, it&#8217;s based on real physics. Everything has a reflection but accurately representing that reflection in video graphics has been mostly done with tricks prior to the introduction of PBR. Tricks as in using different lighting images (specular maps) overlaying color images (diffuse maps) to simulate shininess.</p>
  1458. </div>
  1459. <div class="paragraph">
  1460. <p>With PBR, a materials &#8220;Metalness&#8221; (conductive) or "Dielectric" (insulator) and "Roughness" or lack thereof will determine how light gets reflected. For example, metal (Metalness) is smoother than dirt (dielectric) so has a higher reflection whereas the dirt would tend to absorb the light, just as in real world conditions.</p>
  1461. </div>
  1462. <div class="paragraph">
  1463. <p>The technique described above is known as the &#8220;Metalness Workflow&#8221;. Where you are deciding whether the texture is metallic or dielectric and defining the amount of roughness for the texture.</p>
  1464. </div>
  1465. <div class="paragraph">
  1466. <p>There is another workflow known as the &#8220;Specular Workflow&#8221;. In the metalness workflow the albedo map is used for both diffuse color and specular color. &#8220;Specular Workflow&#8221; uses a specular color map instead. In this workflow, the albedo map is the diffuse color, the specular map is the specular color, and you have a gray scale gloss map that is the same as the roughness map. The workflow is very similar to the old techniques used for making materials.</p>
  1467. </div>
  1468. <div class="paragraph">
  1469. <p>This has been a brief introduction to PBR. In reality, it requires a significant amount of learning to implement correctly. Read the three part series of articles called, Physically Based Rendering, that can be found under the &#8220;Material, light, Shadow&#8221; topic for a more in depth explanation of PBR textures. This is a must read for any serious jME developer.</p>
  1470. </div>
  1471. <div class="paragraph">
  1472. <p>See also: <a href="https://www.chaosgroup.com/blog/understanding-metalness">Understanding Metalness</a>.</p>
  1473. </div>
  1474. <div class="paragraph">
  1475. <p>You should also conduct many searches on the subject, especially ones related to your modeling tool of choice.</p>
  1476. </div>
  1477. </div>
  1478. </div>
  1479. </div>
  1480. <div class="sect1">
  1481. <h2 id="animation"><a class="anchor" href="#animation"></a>Animation</h2>
  1482. <div class="sectionbody">
  1483. <div class="paragraph">
  1484. <p>In 3D games, Skeletal Animation is used for animated characters, but in principle the skeleton approach can be extended to any 3D mesh (for example, an opening crate&#8217;s hinge can be considered a primitive joint).</p>
  1485. </div>
  1486. <div class="paragraph">
  1487. <p>Unless you animate a 3D cartoon, realism of animated characters is generally a problem: Movement can look alien-like mechanical or broken, the character appears hollow, or as if floating. Professional game designers invest a lot of effort to make characters animate in a natural way, including <a href="http://en.wikipedia.org/wiki/Motion_capture">motion capture</a>.</p>
  1488. </div>
  1489. <div class="sect2">
  1490. <h3 id="rigging-and-skinning"><a class="anchor" href="#rigging-and-skinning"></a>Rigging and Skinning</h3>
  1491. <div class="imageblock right">
  1492. <div class="content">
  1493. <img src="../_images/concepts/blenderswordsman.png" alt="blenderswordsman.png" width="195" height="151">
  1494. </div>
  1495. </div>
  1496. <div class="paragraph">
  1497. <p>An animated character has an armature: An internal skeleton (Bones) and an external surface (Skin). The Skin is the visible outside of the character and it includes clothing. The Bones are not visible and are used to interpolate (calculate) the morphing steps of the skin.</p>
  1498. </div>
  1499. <div class="paragraph">
  1500. <p>JME3, the game engine, only loads and plays your recorded animations. You must use a tool (such as Blender) to set up (rig, skin, and animate) a character.</p>
  1501. </div>
  1502. <div class="olist arabic">
  1503. <ol class="arabic">
  1504. <li>
  1505. <p><strong>Rigging:</strong> The Construction of a character&#8217;s skeleton.</p>
  1506. <div class="ulist">
  1507. <ul>
  1508. <li>
  1509. <p>Create as few Bones as possible to decrease complexity.</p>
  1510. </li>
  1511. <li>
  1512. <p>Bones are connected in a parent-child hierarchy: Moving one bone can pull another bone with it (e.g. arm pulls hand).</p>
  1513. </li>
  1514. <li>
  1515. <p>Bones follow a certain naming scheme so the 3D engines know what&#8217;s what.</p>
  1516. </li>
  1517. </ul>
  1518. </div>
  1519. </li>
  1520. <li>
  1521. <p><strong>Skinning:</strong> The association of individual bones with the corresponding skin sections.</p>
  1522. <div class="ulist">
  1523. <ul>
  1524. <li>
  1525. <p>Each Bone is connected to a part of the Skin. Animating the (invisible) Bone pulls the (visible) Skin with it.<br>
  1526. E.g. the thigh Bone is connected to the upper leg Skin.</p>
  1527. </li>
  1528. <li>
  1529. <p>One part of the Skin can be affected by more than one bone (e.g. knee, elbow).</p>
  1530. </li>
  1531. <li>
  1532. <p>The connection between bones and skin sections is gradual: You assign weights how much each skin polygon is affected by any bone&#8217;s motion.<br>
  1533. E.g. when the thigh bone moves, the leg is fully affected, the hips joints less so, and the head not at all.</p>
  1534. </li>
  1535. <li>
  1536. <p>jMonkeyEngine supports hardware skinning (on the GPU, not on the CPU).</p>
  1537. </li>
  1538. </ul>
  1539. </div>
  1540. </li>
  1541. <li>
  1542. <p><strong>Keyframe Animation:</strong> A keyframe is one recorded snapshot of a motion sequence.</p>
  1543. <div class="ulist">
  1544. <ul>
  1545. <li>
  1546. <p>A series of keyframes makes up one animation.</p>
  1547. </li>
  1548. <li>
  1549. <p>Each model can have several animations. Each animation has a name to identify it (e.g. &#8220;walk&#8221;, &#8220;attack&#8221;, &#8220;jump&#8221;).</p>
  1550. </li>
  1551. <li>
  1552. <p>You specify in your game code which keyframe animation to load, and when to play it.</p>
  1553. </li>
  1554. </ul>
  1555. </div>
  1556. </li>
  1557. </ol>
  1558. </div>
  1559. <div class="admonitionblock tip">
  1560. <table>
  1561. <tr>
  1562. <td class="icon">
  1563. <i class="fa icon-tip" title="Tip"></i>
  1564. </td>
  1565. <td class="content">
  1566. <div class="paragraph">
  1567. <p>What is the difference between animation (rigging, skinning, keyframes) and transformation (rotation, scaling, moving, &#8220;slerp&#8221;)?</p>
  1568. </div>
  1569. <div class="ulist">
  1570. <ul>
  1571. <li>
  1572. <p>Transformation is simpler than animation. Sometimes, transforming a geometry already makes it look like it is animated: For example, a spinning windmill, a pulsating alien ball of energy, moving rods of a machine. Transformations can be easily done with JME3 methods.</p>
  1573. </li>
  1574. <li>
  1575. <p>Animations however are more complex and are encoded in a special format (keyframes). They distort the skin of the mesh, and complex series of motions be &#8220;recorded&#8221; (in external tools) and played (in JME3).</p>
  1576. </li>
  1577. </ul>
  1578. </div>
  1579. </td>
  1580. </tr>
  1581. </table>
  1582. </div>
  1583. </div>
  1584. <div class="sect2">
  1585. <h3 id="kinematics"><a class="anchor" href="#kinematics"></a>Kinematics</h3>
  1586. <div class="ulist">
  1587. <ul>
  1588. <li>
  1589. <p>Forward kinematics: &#8220;Given&#8221; the angles of all the character&#8217;s joints, what is the position of the character&#8217;s hand?</p>
  1590. </li>
  1591. <li>
  1592. <p>Inverse kinematics: &#8220;Given&#8221; the position of the character&#8217;s hand, what are the angles of all the character&#8217;s joints?</p>
  1593. </li>
  1594. </ul>
  1595. </div>
  1596. </div>
  1597. <div class="sect2">
  1598. <h3 id="controller-and-channel"><a class="anchor" href="#controller-and-channel"></a>Controller and Channel</h3>
  1599. <div class="paragraph">
  1600. <p>In the JME3 application, you register animated models to the Animation Controller. The controller object gives you access to the available animation sequences. The controller has several channels, each channel can run one animation sequence at a time. To run several sequences, you create several channels, and run them in parallel.</p>
  1601. </div>
  1602. </div>
  1603. </div>
  1604. </div>
  1605. <div class="sect1">
  1606. <h2 id="artificial-intelligence-ai"><a class="anchor" href="#artificial-intelligence-ai"></a>Artificial Intelligence (AI)</h2>
  1607. <div class="sectionbody">
  1608. <div class="paragraph">
  1609. <p>Non-player (computer-controlled) characters (NPCs) are only fun in a game if they do not stupidly bump into walls, or blindly run into the line of fire. You want to make NPCs &#8220;aware&#8221; of their surroundings and let them make decisions based on the game state – otherwise the player can just ignore them. The most common use case is that you want to make enemies interact in a way so they offer a more interesting challenge for the player.</p>
  1610. </div>
  1611. <div class="paragraph">
  1612. <p>&#8220;Smart&#8221; game elements are called artificially intelligent agents (AI agents). An AI agent can be used to implement enemy NPCs as well as trained pets; you also use them to create automatic alarm systems that lock doors and &#8220;call&#8221; the guards after the player triggers an intruder alert.</p>
  1613. </div>
  1614. <div class="paragraph">
  1615. <p>The domain of artificial intelligence deals, among other things, with:</p>
  1616. </div>
  1617. <div class="ulist">
  1618. <ul>
  1619. <li>
  1620. <p><strong>Knowledge</strong> – Knowledge is <em>the data</em> to which the AI agent has access, and on which the AI bases its decisions. Realistic agents only &#8220;know&#8221; what they &#8220;see and hear&#8221;. This implies that information can be hidden from the AI to keep the game fair. You can have an all-knowing AI, or you can let only some AI agents share information, or you let only AI agents who are close know the current state.<br>
  1621. Example: After the player trips the wire, only a few AI guards with two-way radios start moving towards the player&#8217;s position, while many other guards don&#8217;t suspect anything yet.</p>
  1622. </li>
  1623. <li>
  1624. <p><strong>Goal Planning</strong> – Planning is about how an AI agent <em>takes action</em>. Each agent has the priority to achieve a specific goal, to reach a future state. When programming, you split the agent&#8217;s goal into several subgoals. The agent consults its knowledge about the current state, chooses from available tactics and strategies, and prioritizes them. The agent repeatedly tests whether the current state is closer to its goal. If unsuccessful, the agent must discard the current tactics/strategy and try another one.<br>
  1625. Example: An agent searches the best path to reach the player base in a changing environment, avoiding traps. An agent chases the player with the goal of eliminating him. An agent hides from the player with the goal of murdering a VIP.</p>
  1626. </li>
  1627. <li>
  1628. <p><strong>Problem Solving</strong> – Problem solving is about how the agent <em>reacts to interruptions</em>, obstacles that stand between it and its goal. The agent uses a given set of facts and rules to deduct what state it is in – triggered by perceptions similar to pain, agony, boredom, or being trapped. In each state, only a specific subset of reactions makes sense. The actual reaction also depends on the agent&#8217;s, goal since the agent&#8217;s reaction must not block its own goal!<br>
  1629. Examples: If player approaches, does the agent attack or conceal himself or raise alarm? While agent is idle, does he lay traps or heal self or recharge magic runes? If danger to own life, does the agent try to escape or kamikaze?</p>
  1630. </li>
  1631. </ul>
  1632. </div>
  1633. <div class="paragraph">
  1634. <p>More advanced AIs can also learn, for example using neural networks.</p>
  1635. </div>
  1636. <div class="paragraph">
  1637. <p>There are lots of resources explaining interesting AI algorithms:</p>
  1638. </div>
  1639. <div class="ulist">
  1640. <ul>
  1641. <li>
  1642. <p><a href="http://theory.stanford.edu/~amitp/GameProgramming/">A* (A-star) pathfinding theory</a></p>
  1643. </li>
  1644. <li>
  1645. <p><a href="http://web.media.mit.edu/~jorkin/goap.html">GOAP&#8201;&#8212;&#8201;Goal-Oriented Action Planning</a></p>
  1646. </li>
  1647. <li>
  1648. <p><a href="http://neuroph.sourceforge.net/">Neuroph&#8201;&#8212;&#8201;Java Neural Networks</a></p>
  1649. </li>
  1650. </ul>
  1651. </div>
  1652. </div>
  1653. </div>
  1654. <div class="sect1">
  1655. <h2 id="math"><a class="anchor" href="#math"></a>Math</h2>
  1656. <div class="sectionbody">
  1657. <div class="imageblock right">
  1658. <div class="content">
  1659. <img src="../_images/concepts/coordinate-system.png" alt="coordinate-system.png" width="235" height="210">
  1660. </div>
  1661. </div>
  1662. <div class="sect2">
  1663. <h3 id="coordinates"><a class="anchor" href="#coordinates"></a>Coordinates</h3>
  1664. <div class="paragraph">
  1665. <p>Coordinates represent a location in a coordinate system. Coordinates are relative to the origin at (0,0,0). In 3D space, you need to specify three coordinate values to locate a point: X (right), Y (up), Z (towards you). Similarly, -X (left), -Y (down), -Z (away from you).
  1666. In contrast to a vector (which looks similar), a coordinate is a location, not a direction.</p>
  1667. </div>
  1668. <div class="sect3">
  1669. <h4 id="the-origin"><a class="anchor" href="#the-origin"></a>The Origin</h4>
  1670. <div class="paragraph">
  1671. <p>The origin is the central point in the 3D world, where the three axes meet. It&#8217;s always at the coordinates (0,0,0).</p>
  1672. </div>
  1673. <div class="paragraph">
  1674. <p><strong>Example:</strong> <code>Vector3f origin = new Vector3f( Vector3f.ZERO );</code></p>
  1675. </div>
  1676. </div>
  1677. </div>
  1678. <div class="sect2">
  1679. <h3 id="vectors"><a class="anchor" href="#vectors"></a>Vectors</h3>
  1680. <div class="paragraph">
  1681. <p>A vector has a length and a direction, like an arrow in 3D space. A vector starts at a coordinate (x1,y1,z1) or at the origin, and ends at the target coordinate (x2,y2,z2). Backwards directions are expressed with negative values.</p>
  1682. </div>
  1683. <div class="paragraph">
  1684. <p><strong>Example:</strong></p>
  1685. </div>
  1686. <div class="listingblock">
  1687. <div class="content">
  1688. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Vector3f v = new Vector3f( 17f , -4f , 0f ); // starts at (0/0/0)
  1689. Vector3f v = new Vector3f( 8f , 0f , 33f ).add(new Vector3f( 0f , -2f , -2f )); // starts at (8,-2,31)</code></pre>
  1690. </div>
  1691. </div>
  1692. <div class="sect3">
  1693. <h4 id="unit-vectors"><a class="anchor" href="#unit-vectors"></a>Unit Vectors</h4>
  1694. <div class="paragraph">
  1695. <p>A <em>unit vector</em> is a basic vector with a length of 1 world unit. Since its length is fixed (and it thus can only point at one location anyway), the only interesting thing about this vector is its direction.</p>
  1696. </div>
  1697. <div class="ulist">
  1698. <ul>
  1699. <li>
  1700. <p><code>Vector3f.UNIT_X</code> = ( 1, 0, 0) = right</p>
  1701. </li>
  1702. <li>
  1703. <p><code>Vector3f.UNIT_Y</code> = ( 0, 1, 0) = up</p>
  1704. </li>
  1705. <li>
  1706. <p><code>Vector3f.UNIT_Z</code> = ( 0, 0, 1) = forwards</p>
  1707. </li>
  1708. <li>
  1709. <p><code>Vector3f.UNIT_XYZ</code> = 1 wu diagonal right-up-forwards</p>
  1710. </li>
  1711. </ul>
  1712. </div>
  1713. <div class="paragraph">
  1714. <p>Negate the components of the vector to turn its direction, e.g. negating right (1,0,0) results in left (-1,0,0).</p>
  1715. </div>
  1716. </div>
  1717. <div class="sect3">
  1718. <h4 id="normalized-vectors"><a class="anchor" href="#normalized-vectors"></a>Normalized Vectors</h4>
  1719. <div class="paragraph">
  1720. <p>A <em>normalized vector</em> is a custom <em>unit vector</em>. A normalized vector is not the same as a <em>(surface) normal vector</em>.
  1721. When you normalize a vector, it still has the same direction, but you lose the information where the vector originally pointed.</p>
  1722. </div>
  1723. <div class="paragraph">
  1724. <p><strong>Example:</strong> You normalize vectors before calculating angles.</p>
  1725. </div>
  1726. </div>
  1727. <div class="sect3">
  1728. <h4 id="surface-normal-vectors"><a class="anchor" href="#surface-normal-vectors"></a>Surface Normal Vectors</h4>
  1729. <div class="imageblock right">
  1730. <div class="content">
  1731. <img src="../_images/concepts/300px-surface_normal.png" alt="300px-surface_normal.png" width="" height="">
  1732. </div>
  1733. </div>
  1734. <div class="paragraph">
  1735. <p>A surface normal is a vector that is perpendicular (orthogonal) to a plane.
  1736. You calculate the Surface Normal by calculating the cross product.</p>
  1737. </div>
  1738. </div>
  1739. <div class="sect3">
  1740. <h4 id="cross-product"><a class="anchor" href="#cross-product"></a>Cross Product</h4>
  1741. <div class="paragraph">
  1742. <p>The cross product is a calculation that you use to find a perpendicular vector (an orthogonal, a &#8220;right&#8221; angle at 90°).
  1743. In 3D space, speaking of an orthogonal only makes sense with respect to a plane. You need two vectors to uniquely define a plane. The cross product of the two vectors, <code>v1 × v2</code>, is a new vector that is perpendicular to this plane. A vector perpendicular to a plane is a called <em>Surface Normal</em>.</p>
  1744. </div>
  1745. <div class="paragraph">
  1746. <p><strong>Example:</strong> The x unit vector and the y unit vector together define the x/y plane. The vector perpendicular to them is the z axis. JME can calculate that this equation is true:<br>
  1747. <code>( Vector3f.UNIT_X.cross( Vector3f.UNIT_Y ) ).equals( Vector3f.UNIT_Z )</code> == true</p>
  1748. </div>
  1749. </div>
  1750. <div class="sect3">
  1751. <h4 id="transformation"><a class="anchor" href="#transformation"></a>Transformation</h4>
  1752. <div class="paragraph">
  1753. <p>Transformation means rotating (turning), scaling (resizing), or translating (moving) objects in 3D scenes. 3D engines offer simple methods so you can write code that transforms nodes.</p>
  1754. </div>
  1755. <div class="paragraph">
  1756. <p>Examples: Falling and rotating bricks in 3D Tetris.</p>
  1757. </div>
  1758. </div>
  1759. <div class="sect3">
  1760. <h4 id="slerp"><a class="anchor" href="#slerp"></a>Slerp</h4>
  1761. <div class="paragraph">
  1762. <p>Slerp is how we pronounce spherical linear interpolation when we are in a hurry. A slerp is an interpolated transformation that is used as a simple &#8220;animation&#8221; in 3D engines. You define a start and end state, and the slerp interpolates a constant-speed transition from one state to the other. You can play the motion, pause it at various percentages (values between 0.0 and 1.0), and play it backwards and forwards. <a href="https://javadoc.jmonkeyengine.org/v3.4.1-stable/com/jme3/math/Quaternion.html#slerp-com.jme3.math.Quaternion-com.jme3.math.Quaternion-float-">JavaDoc: slerp()</a></p>
  1763. </div>
  1764. <div class="paragraph">
  1765. <p>Example: A burning meteorite Geometry slerps from &#8220;position p1, rotation r1, scale s1&#8221; in the sky down to &#8220;p2, r2, s2&#8221; into a crater.</p>
  1766. </div>
  1767. <div class="paragraph">
  1768. <p><a href="math.html" class="xref page">Learn more about 3D maths here.</a></p>
  1769. </div>
  1770. </div>
  1771. </div>
  1772. </div>
  1773. </div>
  1774. <div class="sect1">
  1775. <h2 id="game-developer-jargon"><a class="anchor" href="#game-developer-jargon"></a>Game Developer Jargon</h2>
  1776. <div class="sectionbody">
  1777. <div class="ulist">
  1778. <ul>
  1779. <li>
  1780. <p><a href="http://www.gamasutra.com/view/feature/6504/a_game_studio_culture_dictionary.php?print=1">A Game Studio Culture Dictionary</a></p>
  1781. </li>
  1782. </ul>
  1783. </div>
  1784. </div>
  1785. </div>
  1786. <div class="sect1">
  1787. <h2 id="3d-graphics-terminology-wiki-book"><a class="anchor" href="#3d-graphics-terminology-wiki-book"></a>3D graphics Terminology Wiki book</h2>
  1788. <div class="sectionbody">
  1789. <div class="ulist">
  1790. <ul>
  1791. <li>
  1792. <p><a href="http://en.wikipedia.org/wiki/User:Jreynaga/Books/3D_Graphics_Terms">http://en.wikipedia.org/wiki/User:Jreynaga/Books/3D_Graphics_Terms</a></p>
  1793. </li>
  1794. </ul>
  1795. </div>
  1796. </div>
  1797. </div>
  1798. <nav class="pagination">
  1799. <span class="prev"><a href="scenegraph_for_dummies.html">Scene Graph for Dummies</a></span>
  1800. <span class="next"><a href="transparency_sorting.html">Transparency Sorting</a></span>
  1801. </nav>
  1802. </article>
  1803. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  1804. <div class="toc-menu"></div>
  1805. </aside>
  1806. </div>
  1807. </main>
  1808. </div>
  1809. <footer class="footer">
  1810. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  1811. </footer>
  1812. <script src="../../../../_/js/vendor/docsearch.min.js"></script>
  1813. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js -->
  1814. <script>
  1815. var search = docsearch({
  1816. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  1817. indexName: 'jmonkeyengine',
  1818. inputSelector: '#search-input',
  1819. autocompleteOptions: { hint: false, keyboardShortcuts: ['s'] },
  1820. algoliaOptions: { hitsPerPage: 10 }
  1821. }).autocomplete
  1822. search.on('autocomplete:closed', function () { search.autocomplete.setVal() })
  1823. function focusSearchInput () { document.querySelector('#search-input').focus() }
  1824. if (document.querySelector('.home-link.is-current')) window.addEventListener('load', focusSearchInput)
  1825. </script>
  1826. <script src="../../../../_/js/site.js"></script>
  1827. <script async src="../../../../_/js/vendor/highlight.js"></script>
  1828. </body>
  1829. </html>