

= Фигуры

Английская версия: <<jme3/advanced/shape#,Shape>>


Простейший Тип сетки встроенный JME фигуры. Вы можете создавать фигуры без использования AssetManager.



== 3D фигуры


image::http///www.jmonkeyengine.com/jme/wiki-data/userref/sphere.png[sphere.png,with="108",height="80",align="right"]

image::http///www.jmonkeyengine.com/jme/wiki-data/userref/cylinder.png[cylinder.png,with="108",height="80",align="right"]

image::http///www.jmonkeyengine.com/jme/wiki-data/userref/box.png[box.png,with="108",height="80",align="right"]



*  com.jme3.scene.shape.Box – Куб или параллелепипед. Односторонняя Quad лица (только снаружи). 
*  com.jme3.scene.shape.StripBox – Куб или параллелепипед. Со сплошной заливкой (внутри и снаружи).

*  com.jme3.scene.shape.Cylinder – Диск или столб.
*  com.jme3.scene.shape.Sphere – Шар или эллипсоид.


image::http///www.jmonkeyengine.com/jme/wiki-data/userref/pyramid.png[pyramid.png,with="108",height="80",align="right"]

image::http///www.jmonkeyengine.com/jme/wiki-data/userref/cone.png[cone.png,with="108",height="80",align="right"]

image::http///www.jmonkeyengine.com/jme/wiki-data/userref/dome.png[dome.png,with="108",height="80",align="right"]



*  com.jme3.scene.shape.Dome – Полусфера, например SkyDome.
**  Для конуса, установить купол radialSamples&gt;4 и planes=2. 
**  Для пирамиды, установить купол radialSamples=4 и planes=2. 


*  com.jme3.scene.shape.Torus – Отдельная дырка Тора или “пончик.
*  com.jme3.scene.shape.PQTorus – Параметризованный Тора. В PQ-Тор выглядит как link:http://en.wikipedia.org/wiki/Torus_knot[пончик завязанный в спирали]. 
image::jme3/advanced/nurbs_3-d_surface.png[NURBS surface,with="108",height="80",align="right"]

image::jme3/advanced/220px-trefoil_knot_arb.png[PQ torus knoz,with="108",height="80",align="right"]

image::http///i204.photobucket.com/albums/bb19/mike_ch_1/torus.png[Тор,with="108",height="80",align="right"]

*  com.jme3.scene.shape.Surface –Криволинейной поверхности (называемые link:http://en.wikipedia.org/wiki/File:NURBS_3-D_surface.gif[NURBS]) описаны узлы и весы контрольных точек. Сравните с shape.Curve.


== Не-3D фигуры

*  com.jme3.scene.shape.Quad – Плоский 2D прямоугольник (односторонний, центр находится в нижнем левом углу)
*  com.jme3.scene.shape.Line – Прямая 1D линии определяется начальной и конечной точками.
*  com.jme3.scene.shape.Curve – Изогнутая 1D сплайна. Сравните с shape.Surface.


==== com.jme3.math versus com.jme3.shape?

Не путайте эти видимые com.jme3.shapes с аналогичным назваными классами от  com.jme3.math package. Выберите правильный пакет, когда позволяете своей IDE заполнить операторы импорта!


*  com.jme3.math.Line – is invisible, has a direction, goes through a point, infinite length.
*  com.jme3.math.Ray – is invisible, has a direction and start point, but no end.
*  com.jme3.math.Spline – is an invisible curve.
*  etc

Это математические объекты являются невидимыми и используются для тестирования столкновений (ray casting) или для описания траектории движения. Они не могут быть обернуты в геометрии.



== Использование


==== Основные Методы Использования

Чтобы добавить фигуру на сцену:


.  Создадим базовую сетчатую фигуру.
.  Оберните сету Геометрией.
.  Назначить Материал Геометрии.
.  Прикрепите геометрию к rootNode, чтобы сделать её видимой.





==== Сложные Фигуры

Вы можете создавать более сложные геометрии из простых Фигур. Думаю зданий в игре, как Angry Birds, или строительные блоки как Second Life (“prims) и в Тетрис (“Tetrominos).


.  Создайте узел. По умолчанию он расположен в начале координат (0/0/0) – оставьте узел пока там.
.  Создайте фигуры и заверните каждую в геометрию, как описано выше.
.  Прикрепите каждую Геометрию к узлу.
.  Организуйте геометрии относительно узла (с помощью `setLocalTranslation()`)  так, чтобы узел находится в центре нового скопления Геометрий. Центральный узел является точкой вращения для преобразований (move/scale/rotate).
.  Переместите Узел стержень на его окончательное место в сцене. Перемещение Узла стержня перемещает и прикрепленное скопление Геометрий.

Порядок важен: во-первых организовать преобразования вокруг начала координат.  В противном случае, преобразования применяются вокруг неправильного центр (стержня). Конечно, вы можете прикрепить ваше скопление к другим Узлам стержням для создания еще более сложных фигур (стул, меблированная комната, дом, город, …), но, опять же, расположить их вокруг начала координат, прежде чем вы преобразуете их. Очевидно, что так составить Геометрия проще, чем вручную лепили из сетки в mesh editor.



== Примеры Кода

Create the Mesh shape:


[source,java]

----
Sphere mesh = new Sphere(32, 32, 10, false, true);
----

[source,java]

----
Dome mesh = new Dome(Vector3f.ZERO, 2, 4, 1f,false); // Пирамида
----

[source,java]

----
Dome mesh = new Dome(Vector3f.ZERO, 2, 32, 1f,false); // Конус
----

[source,java]

----
Dome mesh = new Dome(Vector3f.ZERO, 32, 32, 1f,false); // Небольшие полушары
----

[source,java]

----
Dome mesh = new Dome(Vector3f.ZERO, 32, 32, 1000f,true); // SkyDome
----

[source,java]

----
PQTorus mesh = new PQTorus(5,3, 2f, 1f, 32, 32); // Spiral тор
----

[source,java]

----
PQTorus mesh = new PQTorus(3,8, 2f, 1f, 32, 32); // Цветок тор
----

Use one of the above examples together with the following geometry in a scene:


[source,java]

----

Geometry geom = new Geometry("A shape", mesh); // обернуть фигуру в геометрию
Material mat = new Material(assetManager,      
    "Common/MatDefs/Misc/ShowNormals.j3md");   // создать материал
geom.setMaterial(mat);                         // назначить материал геометрии
// если вы хотите, преобразования (перемещение, поворот, масштабирование) геометрия.
rootNode.attachChild(geom);                    // прикрепить геометрии к узлу

----


== См. также

* <<jme3/intermediate/optimization#,Optimization>> – В GeometryBatchFactory класса сочетает в себе несколько ваших фигур с одинаковой структурой в одну сетку с одной текстурой.

<tags><tag target="spatial" /><tag target="node" /><tag target="mesh" /><tag target="geometry" /><tag target="scenegraph" /></tags>
