shape.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  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>Shapes :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/jme3/advanced/shape.html">
  8. <meta name="keywords" content="spatial, node, mesh, geometry, scenegraph">
  9. <meta name="generator" content="Antora 2.3.3">
  10. <link rel="stylesheet" href="../../../_/css/site.css">
  11. <meta property="og:image" content="https://wiki.jmonkeyengine.org/_/img/iconx128.png">
  12. <meta property="og:description" content="Shapes">
  13. <meta property="og:title" content="jMonkeyEngine Docs">
  14. <link rel="stylesheet" href="../../../_/css/site-extra.css">
  15. <link rel="stylesheet" href="../../../_/css/vendor/docsearch.min.css">
  16. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css -->
  17. <link rel="icon" href="../../../_/img/favicon.ico" type="image/x-icon">
  18. </head>
  19. <body class="article">
  20. <header class="header">
  21. <nav class="navbar">
  22. <div class="navbar-brand">
  23. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  24. <img alt="" src="../../../_/img/jme-logo.png" height="32" type="image/x-icon">
  25. </a>
  26. <div class="navbar-item hide-for-print">
  27. <input id="search-input" type="text" placeholder="Search docs">
  28. </div>
  29. <button class="navbar-burger" data-target="topbar-nav">
  30. <span></span>
  31. <span></span>
  32. <span></span>
  33. </button>
  34. </div>
  35. <div id="topbar-nav" class="navbar-menu">
  36. <div class="navbar-end">
  37. <div class="navbar-item theme-switch-wrapper">
  38. <label class="theme-switch" for="checkbox">
  39. <input type="checkbox" id="checkbox" />
  40. <div class="slider round"></div>
  41. </label>
  42. </div>
  43. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  44. </div>
  45. </div>
  46. </nav>
  47. </header>
  48. <div class="body">
  49. <div class="nav-container" data-component="docs" data-version="master">
  50. <aside class="nav">
  51. <div class="panels">
  52. <div class="nav-panel-menu is-active" data-panel="menu">
  53. <nav class="nav-menu">
  54. <h3 class="title"><a href="../../documentation.html">Docs</a></h3>
  55. <ul class="nav-list">
  56. <li class="nav-item" data-depth="0">
  57. <ul class="nav-list">
  58. <li class="nav-item" data-depth="1">
  59. <a class="nav-link" href="../../documentation.html">Getting Started</a>
  60. </li>
  61. <li class="nav-item" data-depth="1">
  62. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.3.2-stable">JavaDoc</a>
  63. </li>
  64. <li class="nav-item" data-depth="1">
  65. <button class="nav-item-toggle"></button>
  66. <a class="nav-link" href="../../jme3.html">jMonkeyEngine 3</a>
  67. <ul class="nav-list">
  68. <li class="nav-item" data-depth="2">
  69. <button class="nav-item-toggle"></button>
  70. <span class="nav-text">Beginner Tutorials</span>
  71. <ul class="nav-list">
  72. <li class="nav-item" data-depth="3">
  73. <a class="nav-link" href="../beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
  74. </li>
  75. <li class="nav-item" data-depth="3">
  76. <a class="nav-link" href="../beginner/hello_node.html">Hello Node</a>
  77. </li>
  78. <li class="nav-item" data-depth="3">
  79. <a class="nav-link" href="../beginner/hello_asset.html">Hello Asset</a>
  80. </li>
  81. <li class="nav-item" data-depth="3">
  82. <a class="nav-link" href="../beginner/hello_main_event_loop.html">Hello Main Event Loop</a>
  83. </li>
  84. <li class="nav-item" data-depth="3">
  85. <a class="nav-link" href="../beginner/hello_input_system.html">Hello Input System</a>
  86. </li>
  87. <li class="nav-item" data-depth="3">
  88. <a class="nav-link" href="../beginner/hello_material.html">Hello Material</a>
  89. </li>
  90. <li class="nav-item" data-depth="3">
  91. <a class="nav-link" href="../beginner/hello_animation.html">Hello Animation</a>
  92. </li>
  93. <li class="nav-item" data-depth="3">
  94. <a class="nav-link" href="../beginner/hello_picking.html">Hello Picking</a>
  95. </li>
  96. <li class="nav-item" data-depth="3">
  97. <a class="nav-link" href="../beginner/hello_collision.html">Hello Collision</a>
  98. </li>
  99. <li class="nav-item" data-depth="3">
  100. <a class="nav-link" href="../beginner/hello_terrain.html">Hello Terrain</a>
  101. </li>
  102. <li class="nav-item" data-depth="3">
  103. <a class="nav-link" href="../beginner/hello_audio.html">Hello Audio</a>
  104. </li>
  105. <li class="nav-item" data-depth="3">
  106. <a class="nav-link" href="../beginner/hello_effects.html">Hello Effects</a>
  107. </li>
  108. <li class="nav-item" data-depth="3">
  109. <a class="nav-link" href="../beginner/hello_physics.html">Hello Physics</a>
  110. </li>
  111. </ul>
  112. </li>
  113. <li class="nav-item" data-depth="2">
  114. <button class="nav-item-toggle"></button>
  115. <span class="nav-text">Intermediate Tutorials</span>
  116. <ul class="nav-list">
  117. <li class="nav-item" data-depth="3">
  118. <button class="nav-item-toggle"></button>
  119. <span class="nav-text">Concepts</span>
  120. <ul class="nav-list">
  121. <li class="nav-item" data-depth="4">
  122. <a class="nav-link" href="../intermediate/best_practices.html">Best Practices</a>
  123. </li>
  124. <li class="nav-item" data-depth="4">
  125. <a class="nav-link" href="../intermediate/simpleapplication.html">Simple Application</a>
  126. </li>
  127. <li class="nav-item" data-depth="4">
  128. <a class="nav-link" href="../features.html">Features</a>
  129. </li>
  130. <li class="nav-item" data-depth="4">
  131. <a class="nav-link" href="../intermediate/optimization.html">Optimization</a>
  132. </li>
  133. <li class="nav-item" data-depth="4">
  134. <a class="nav-link" href="../faq.html">FAQ</a>
  135. </li>
  136. </ul>
  137. </li>
  138. <li class="nav-item" data-depth="3">
  139. <button class="nav-item-toggle"></button>
  140. <span class="nav-text">Math Concepts</span>
  141. <ul class="nav-list">
  142. <li class="nav-item" data-depth="4">
  143. <a class="nav-link" href="../math_for_dummies.html">Math For Dummies</a>
  144. </li>
  145. <li class="nav-item" data-depth="4">
  146. <a class="nav-link" href="../intermediate/math.html">Math</a>
  147. </li>
  148. <li class="nav-item" data-depth="4">
  149. <a class="nav-link" href="../math.html">More Math</a>
  150. </li>
  151. <li class="nav-item" data-depth="4">
  152. <a class="nav-link" href="../rotate.html">Rotate</a>
  153. </li>
  154. <li class="nav-item" data-depth="4">
  155. <a class="nav-link" href="../math_video_tutorials.html">Math Video Tutorials</a>
  156. </li>
  157. </ul>
  158. </li>
  159. <li class="nav-item" data-depth="3">
  160. <button class="nav-item-toggle"></button>
  161. <span class="nav-text">3D Graphics Concepts</span>
  162. <ul class="nav-list">
  163. <li class="nav-item" data-depth="4">
  164. <a class="nav-link" href="../intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  165. </li>
  166. <li class="nav-item" data-depth="4">
  167. <a class="nav-link" href="../scenegraph_for_dummies.html">Scenegraph for Dummies</a>
  168. </li>
  169. <li class="nav-item" data-depth="4">
  170. <a class="nav-link" href="../beginner/hellovector.html">Hello Vector</a>
  171. </li>
  172. <li class="nav-item" data-depth="4">
  173. <a class="nav-link" href="../terminology.html">Terminology</a>
  174. </li>
  175. <li class="nav-item" data-depth="4">
  176. <a class="nav-link" href="../intermediate/how_to_use_materials.html">How to Use Materials</a>
  177. </li>
  178. <li class="nav-item" data-depth="4">
  179. <a class="nav-link" href="../intermediate/transparency_sorting.html">Transparency and Sorting</a>
  180. </li>
  181. <li class="nav-item" data-depth="4">
  182. <a class="nav-link" href="../external/blender.html">Importing from Blender</a>
  183. </li>
  184. <li class="nav-item" data-depth="4">
  185. <a class="nav-link" href="../external/3dsmax.html">Importing from 3DS Max</a>
  186. </li>
  187. </ul>
  188. </li>
  189. </ul>
  190. </li>
  191. </ul>
  192. </li>
  193. <li class="nav-item" data-depth="1">
  194. <a class="nav-link" href="../../logo.html">Logo Usage</a>
  195. </li>
  196. <li class="nav-item" data-depth="1">
  197. <a class="nav-link" href="../../bsd_license.html">License</a>
  198. </li>
  199. <li class="nav-item" data-depth="1">
  200. <a class="nav-link" href="../../github_tips.html">Github Tips</a>
  201. </li>
  202. </ul>
  203. </li>
  204. <li class="nav-item" data-depth="0">
  205. <button class="nav-item-toggle"></button>
  206. <span class="nav-text">SDK</span>
  207. <ul class="nav-list">
  208. <li class="nav-item" data-depth="1">
  209. <a class="nav-link" href="../../sdk.html">jMonkeyEngine SDK</a>
  210. </li>
  211. </ul>
  212. </li>
  213. </ul>
  214. </nav>
  215. </div>
  216. <div class="nav-panel-explore" data-panel="explore">
  217. <div class="context">
  218. <span class="title">Docs</span>
  219. <span class="version">master</span>
  220. </div>
  221. <ul class="components">
  222. <li class="component is-current">
  223. <span class="title">Docs</span>
  224. <ul class="versions">
  225. <li class="version is-current is-latest">
  226. <a href="../../documentation.html">master</a>
  227. </li>
  228. </ul>
  229. </li>
  230. <li class="component">
  231. <span class="title">Wiki UI</span>
  232. <ul class="versions">
  233. <li class="version is-latest">
  234. <a href="../../../wiki-ui/index.html">master</a>
  235. </li>
  236. </ul>
  237. </li>
  238. </ul>
  239. </div>
  240. </div>
  241. </aside>
  242. </div>
  243. <main class="article">
  244. <div class="toolbar" role="navigation">
  245. <button class="nav-toggle"></button>
  246. <nav class="breadcrumbs" aria-label="breadcrumbs">
  247. <ul>
  248. <li><a href="../../documentation.html">Docs</a></li>
  249. <li><a href="shape.html">Shapes</a></li>
  250. </ul>
  251. </nav>
  252. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/ROOT/pages/jme3/advanced/shape.adoc">Edit this Page</a></div>
  253. </div>
  254. <div class="content">
  255. <article class="doc">
  256. <h1 class="page">Shapes</h1>
  257. <div id="preamble">
  258. <div class="sectionbody">
  259. <div class="paragraph">
  260. <p>The simplest type of Meshes are the built-in JME Shapes. You can create Shapes without using the AssetManager.</p>
  261. </div>
  262. </div>
  263. </div>
  264. <div class="sect1">
  265. <h2 id="3d-shapes"><a class="anchor" href="#3d-shapes"></a>3D shapes</h2>
  266. <div class="sectionbody">
  267. <div class="openblock float-group">
  268. <div class="content">
  269. <div class="imageblock right text-left">
  270. <div class="content">
  271. <img src="../../_images/jme3/advanced/box.png" alt="box.png" width="108" height="">
  272. </div>
  273. </div>
  274. <div class="ulist">
  275. <ul>
  276. <li>
  277. <p>com.jme3.scene.shape.Box – A cube or cuboid. Single-sided Quad faces (outside only).</p>
  278. </li>
  279. <li>
  280. <p>com.jme3.scene.shape.StripBox – A cube or cuboid. Solid filled faces (inside and outside).</p>
  281. </li>
  282. </ul>
  283. </div>
  284. </div>
  285. </div>
  286. <div class="openblock float-group">
  287. <div class="content">
  288. <div class="imageblock right text-left">
  289. <div class="content">
  290. <img src="../../_images/jme3/advanced/cylinder.png" alt="cylinder.png" width="108" height="">
  291. </div>
  292. </div>
  293. <div class="ulist">
  294. <ul>
  295. <li>
  296. <p>com.jme3.scene.shape.Cylinder – A disk or pillar.</p>
  297. </li>
  298. </ul>
  299. </div>
  300. </div>
  301. </div>
  302. <div class="openblock float-group">
  303. <div class="content">
  304. <div class="imageblock right text-left">
  305. <div class="content">
  306. <img src="../../_images/jme3/advanced/sphere.png" alt="sphere.png" width="108" height="">
  307. </div>
  308. </div>
  309. <div class="ulist">
  310. <ul>
  311. <li>
  312. <p>com.jme3.scene.shape.Sphere – A ball or elipsoid.</p>
  313. </li>
  314. </ul>
  315. </div>
  316. </div>
  317. </div>
  318. <div class="openblock float-group">
  319. <div class="content">
  320. <div class="imageblock right text-left">
  321. <div class="content">
  322. <img src="../../_images/jme3/advanced/dome.png" alt="dome.png" width="108" height="">
  323. </div>
  324. </div>
  325. <div class="ulist">
  326. <ul>
  327. <li>
  328. <p>com.jme3.scene.shape.Dome – A semi-sphere, e.g. SkyDome.</p>
  329. </li>
  330. </ul>
  331. </div>
  332. </div>
  333. </div>
  334. <div class="openblock float-group">
  335. <div class="content">
  336. <div class="imageblock right text-left">
  337. <div class="content">
  338. <img src="../../_images/jme3/advanced/cone.png" alt="cone.png" width="108" height="">
  339. </div>
  340. </div>
  341. <div class="ulist">
  342. <ul>
  343. <li>
  344. <p>For a cone, set the Dome&#8217;s radialSamples&gt;4 and planes=2.</p>
  345. </li>
  346. </ul>
  347. </div>
  348. </div>
  349. </div>
  350. <div class="openblock float-group">
  351. <div class="content">
  352. <div class="imageblock right text-left">
  353. <div class="content">
  354. <img src="../../_images/jme3/advanced/pyramid.png" alt="pyramid.png" width="108" height="">
  355. </div>
  356. </div>
  357. <div class="ulist">
  358. <ul>
  359. <li>
  360. <p>For a pyramid, set the Dome&#8217;s radialSamples=4 and planes=2.</p>
  361. </li>
  362. </ul>
  363. </div>
  364. </div>
  365. </div>
  366. <div class="openblock float-group">
  367. <div class="content">
  368. <div class="imageblock right text-left">
  369. <div class="content">
  370. <img src="http://i204.photobucket.com/albums/bb19/mike_ch_1/torus.png" alt="Torus" width="108" height="80">
  371. </div>
  372. </div>
  373. <div class="ulist">
  374. <ul>
  375. <li>
  376. <p>com.jme3.scene.shape.Torus – An single-holed torus or “donut.</p>
  377. </li>
  378. </ul>
  379. </div>
  380. </div>
  381. </div>
  382. <div class="openblock float-group">
  383. <div class="content">
  384. <div class="imageblock right text-left">
  385. <div class="content">
  386. <img src="../../_images/jme3/advanced/220px-trefoil_knot_arb.png" alt="PQ torus knoz" width="108" height="80">
  387. </div>
  388. </div>
  389. <div class="ulist">
  390. <ul>
  391. <li>
  392. <p>com.jme3.scene.shape.PQTorus – A parameterized torus. A PQ-Torus looks like a <a href="http://en.wikipedia.org/wiki/Torus_knot">donut knotted into spirals</a>.</p>
  393. </li>
  394. </ul>
  395. </div>
  396. </div>
  397. </div>
  398. <div class="openblock float-group">
  399. <div class="content">
  400. <div class="imageblock right text-left">
  401. <div class="content">
  402. <img src="../../_images/jme3/advanced/nurbs_3-d_surface.png" alt="NURBS surface" width="108" height="80">
  403. </div>
  404. </div>
  405. <div class="ulist">
  406. <ul>
  407. <li>
  408. <p>com.jme3.scene.shape.Surface – A curved surface (called <a href="http://en.wikipedia.org/wiki/File:NURBS_3-D_surface.gif">NURBS</a>) described by knots, weights and control points. Compare with shape.Curve.</p>
  409. </li>
  410. </ul>
  411. </div>
  412. </div>
  413. </div>
  414. </div>
  415. </div>
  416. <div class="sect1">
  417. <h2 id="non-3d-shapes"><a class="anchor" href="#non-3d-shapes"></a>Non-3D shapes</h2>
  418. <div class="sectionbody">
  419. <div class="ulist">
  420. <ul>
  421. <li>
  422. <p>com.jme3.scene.shape.Quad – A flat 2D rectangle (single-sided, center is in bottom-left corner)</p>
  423. </li>
  424. <li>
  425. <p>com.jme3.scene.shape.Line – A straight 1D line defined by a start and end point.</p>
  426. </li>
  427. <li>
  428. <p>com.jme3.scene.shape.Curve – A curved 1D spline. Compare with shape.Surface.</p>
  429. </li>
  430. </ul>
  431. </div>
  432. <div class="sect2">
  433. <h3 id="com-jme3-math-versus-com-jme3-shape"><a class="anchor" href="#com-jme3-math-versus-com-jme3-shape"></a>com.jme3.math versus com.jme3.shape?</h3>
  434. <div class="paragraph">
  435. <p>Do not mix up these visible com.jme3.shapes with similarly named classes from the com.jme3.math package. Choose the right package when letting your IDE fill in the import statements!</p>
  436. </div>
  437. <div class="ulist">
  438. <ul>
  439. <li>
  440. <p>com.jme3.math.Line – is invisible, has a direction, goes through a point, infinite length.</p>
  441. </li>
  442. <li>
  443. <p>com.jme3.math.Ray – is invisible, has a direction and start point, but no end.</p>
  444. </li>
  445. <li>
  446. <p>com.jme3.math.Spline – is an invisible curve.</p>
  447. </li>
  448. <li>
  449. <p>etc</p>
  450. </li>
  451. </ul>
  452. </div>
  453. <div class="paragraph">
  454. <p>These maths objects are invisible and are used for collision testing (ray casting) or to describe motion paths. They cannot be wrapped into a Geometry.</p>
  455. </div>
  456. </div>
  457. </div>
  458. </div>
  459. <div class="sect1">
  460. <h2 id="usage"><a class="anchor" href="#usage"></a>Usage</h2>
  461. <div class="sectionbody">
  462. <div class="sect2">
  463. <h3 id="basic-usage"><a class="anchor" href="#basic-usage"></a>Basic Usage</h3>
  464. <div class="paragraph">
  465. <p>To add a shape to the scene:</p>
  466. </div>
  467. <div class="olist arabic">
  468. <ol class="arabic">
  469. <li>
  470. <p>Create the base mesh shape.</p>
  471. </li>
  472. <li>
  473. <p>Wrap the mesh into a Geometry.</p>
  474. </li>
  475. <li>
  476. <p>Assign a Material to the Geometry.</p>
  477. </li>
  478. <li>
  479. <p>Attach the Geometry to the rootNode to make it visible.</p>
  480. </li>
  481. </ol>
  482. </div>
  483. <div class="admonitionblock tip">
  484. <table>
  485. <tr>
  486. <td class="icon">
  487. <i class="fa icon-tip" title="Tip"></i>
  488. </td>
  489. <td class="content">
  490. <div class="paragraph">
  491. <p>Create one static shape as mesh and use it in several geometries, or clone() the geometries.</p>
  492. </div>
  493. </td>
  494. </tr>
  495. </table>
  496. </div>
  497. </div>
  498. <div class="sect2">
  499. <h3 id="complex-shapes"><a class="anchor" href="#complex-shapes"></a>Complex Shapes</h3>
  500. <div class="paragraph">
  501. <p>You can compose more complex custom Geometries out of simple Shapes. Think of the buildings in games like Angry Birds, or the building blocks in Second Life (“prims) and in Tetris (“Tetrominos).</p>
  502. </div>
  503. <div class="olist arabic">
  504. <ol class="arabic">
  505. <li>
  506. <p>Create a Node. By default it is located at the origin (0/0/0) – leave the Node there for now.</p>
  507. </li>
  508. <li>
  509. <p>Create your shapes and wrap each into a Geometry, as just described.</p>
  510. </li>
  511. <li>
  512. <p>Attach each Geometry to the Node.</p>
  513. </li>
  514. <li>
  515. <p>Arrange the Geometries around the Node (using <code>setLocalTranslation()</code>) so that the Node is in the center of the new constellation. The central Node is the pivot point for transformations (move/scale/rotate).</p>
  516. </li>
  517. <li>
  518. <p>Move the pivot Node to its final location in the scene. Moving the pivot Node moves the attached constellation of Geometries with it.</p>
  519. </li>
  520. </ol>
  521. </div>
  522. <div class="paragraph">
  523. <p>The order is important: First arrange around origin, then transform. Otherwise, transformations are applied around the wrong center (pivot). Of course, you can attach your constellation to other pivot Nodes to create even more complex shapes (a chair, a furnished room, a house, a city, …), but again, arrange them around the origin first before you transform them. Obviously, such composed Geometries are simpler than hand-sculpted meshes from a mesh editor.</p>
  524. </div>
  525. </div>
  526. </div>
  527. </div>
  528. <div class="sect1">
  529. <h2 id="code-examples"><a class="anchor" href="#code-examples"></a>Code Examples</h2>
  530. <div class="sectionbody">
  531. <div class="paragraph">
  532. <p>Create the Mesh shape:</p>
  533. </div>
  534. <div class="listingblock">
  535. <div class="content">
  536. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Sphere mesh = new Sphere(32, 32, 10, false, true);</code></pre>
  537. </div>
  538. </div>
  539. <div class="listingblock">
  540. <div class="content">
  541. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Dome mesh = new Dome(Vector3f.ZERO, 2, 4, 1f,false); // Pyramid</code></pre>
  542. </div>
  543. </div>
  544. <div class="listingblock">
  545. <div class="content">
  546. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Dome mesh = new Dome(Vector3f.ZERO, 2, 32, 1f,false); // Cone</code></pre>
  547. </div>
  548. </div>
  549. <div class="listingblock">
  550. <div class="content">
  551. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Dome mesh = new Dome(Vector3f.ZERO, 32, 32, 1f,false); // Small hemisphere</code></pre>
  552. </div>
  553. </div>
  554. <div class="listingblock">
  555. <div class="content">
  556. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Dome mesh = new Dome(Vector3f.ZERO, 32, 32, 1000f,true); // SkyDome</code></pre>
  557. </div>
  558. </div>
  559. <div class="listingblock">
  560. <div class="content">
  561. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">PQTorus mesh = new PQTorus(5,3, 2f, 1f, 32, 32); // Spiral torus</code></pre>
  562. </div>
  563. </div>
  564. <div class="listingblock">
  565. <div class="content">
  566. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">PQTorus mesh = new PQTorus(3,8, 2f, 1f, 32, 32); // Flower torus</code></pre>
  567. </div>
  568. </div>
  569. <div class="paragraph">
  570. <p>Use one of the above examples together with the following geometry in a scene:</p>
  571. </div>
  572. <div class="listingblock">
  573. <div class="content">
  574. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Geometry geom = new Geometry("A shape", mesh); // wrap shape into geometry
  575. Material mat = new Material(assetManager,
  576. "Common/MatDefs/Misc/ShowNormals.j3md"); // create material
  577. geom.setMaterial(mat); // assign material to geometry
  578. // if you want, transform (move, rotate, scale) the geometry.
  579. rootNode.attachChild(geom); // attach geometry to a node</code></pre>
  580. </div>
  581. </div>
  582. </div>
  583. </div>
  584. <div class="sect1">
  585. <h2 id="see-also"><a class="anchor" href="#see-also"></a>See also</h2>
  586. <div class="sectionbody">
  587. <div class="ulist">
  588. <ul>
  589. <li>
  590. <p><a href="../intermediate/optimization.html" class="page">Optimization</a> – The GeometryBatchFactory class combines several of your shapes with the same texture into one mesh with one texture.</p>
  591. </li>
  592. </ul>
  593. </div>
  594. </div>
  595. </div>
  596. </article>
  597. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  598. <div class="toc-menu"></div>
  599. </aside>
  600. </div>
  601. </main>
  602. </div>
  603. <footer class="footer">
  604. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  605. </footer>
  606. <script src="../../../_/js/vendor/docsearch.min.js"></script>
  607. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js -->
  608. <script>
  609. var search = docsearch({
  610. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  611. indexName: 'jmonkeyengine',
  612. inputSelector: '#search-input',
  613. autocompleteOptions: { hint: false, keyboardShortcuts: ['s'] },
  614. algoliaOptions: { hitsPerPage: 10 }
  615. }).autocomplete
  616. search.on('autocomplete:closed', function () { search.autocomplete.setVal() })
  617. function focusSearchInput () { document.querySelector('#search-input').focus() }
  618. if (document.querySelector('.home-link.is-current')) window.addEventListener('load', focusSearchInput)
  619. </script>
  620. <script src="../../../_/js/site.js"></script>
  621. <script async src="../../../_/js/vendor/highlight.js"></script>
  622. </body>
  623. </html>