Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество

Shape(Фигура)

Опубликованно: 07.05.2017, 23:56
Последняя редакция, Andry: 08.05.2017 13:51

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

3D Фигуры

  • box
    com.jme3.scene.shape.Box — Куб или кубоид. Односторонние квадратные грани (только снаружи).
  • Com.jme3.scene.shape.StripBox — куб или кубик. Твердые заполненные поверхности (внутри и снаружи).
  • cylinder
    com.jme3.scene.shape.Cylinder — диск или столбец.
  • sphere
    com.jme3.scene.shape.Sphere — Мяч или эллипсоид.
  • dome
    com.jme3.scene.shape.Dome — Полусфера, например. SkyDome.
  • cone
    Для получения конуса установите купол radialSamples>4 и planes=2.
  • pyramid
    Для получения пирамиды установите купол radialSamples=4 и planes=2.
  • torus
    com.jme3.scene.shape.Torus — однодырчатый торус или «пончик».
  • 220px-trefoil_knot_arb
    com.jme3.scene.shape.PQTorus — параметризованный тор. PQ-Torus напоминает пончик, завязанный спиралями.
  • nurbs_3-d_surface
    com.jme3.scene.shape.Surface – кривая поверхность(называемая NURBS) описанная узлами натяжения и контрольными точками для их управления. В сравнении с shape.Curve

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

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

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

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

  • com.jme3.math.Line — невидимая, имеет направление, проходит через точку, бесконечной длины.
  • com.jme3.math.Ray — невидимый, имеет направление и начальную точку, но без конца.
  • com.jme3.math.Spline — невидимая кривая.
  • и.т.д

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

Применение

Основное использование

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

  1. Создайте базовую сетку фигуры.
  2. Оберните сетку в Геометрию.
  3. Назначение Материала Геометрии.
  4. Присоедините Геометрию к корневому узлу(rootNode), чтобы сделать её видимой.
Создайте одну статическую фигуру как сетку и используйте ее в нескольких геометриях, или clone() геометрии.

Составные фигуры

Вы можете создавать более сложные пользовательские геометрии из простых фигур. Подумайте о зданиях в таких играх, как Angry Birds, или о строительных блоках Second Life («prims») и в Tetris («Tetrominos»).

  1. Создайте узел. По умолчанию он находится в начале координат (0/0/0) — пока оставим там узел.
  2. Создайте фигуры и оберните их в геометрию, как описано выше.
  3. Прикрепите каждую геометрию к узлу.
  4. Расположите геометрии вокруг узла (используя setLocalTranslation()), чтобы узел находился в центре нового созвездия. Центральный узел является опорной точкой для преобразований (перемещения/масштабирования/поворота).
  5. Переместите стержневой узел в его конечное положение в сцене. При перемещении стержневого узла перемещается связанное созвездие геометрий с ним.

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

Примеры кода

Создание формы сетки:

Sphere mesh = new Sphere(32, 32, 10, false, true);
Dome mesh = new Dome(Vector3f.ZERO, 2, 4, 1f,false); // Пирамида
Dome mesh = new Dome(Vector3f.ZERO, 2, 32, 1f,false); // Конус
Dome mesh = new Dome(Vector3f.ZERO, 32, 32, 1f,false); // Малая полусфера
Dome mesh = new Dome(Vector3f.ZERO, 32, 32, 1000f,true); // SkyDome
PQTorus mesh = new PQTorus(5,3, 2f, 1f, 32, 32); // Spiral тор
PQTorus mesh = new PQTorus(3,8, 2f, 1f, 32, 32); // Flower тор

Используйте один из приведенных выше примеров вместе со следующей геометрией в сцене:

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

Смотрите также

  • Оптимизация — Класс GeometryBatchFactory объединяет несколько ваших фигур с одинаковой текстурой в одну сетку с одной текстурой.

Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.