

== jMonkeyEngine3 Scene Graph для чайников





*  Вы можете открыть презентацию в link:http://hub.jmonkeyengine.org/tutorials/scenegraph[Полноэкранном режим].
*  When using link:http://www.apple.com/safari/[Safari] as a browser the presentation is animated.





== Изучение основ jME3 Граф(Древо) Сцены.

То, что вы узнаете:


*  Что такое Граф Сцены и что такое Spatial.
**  Что такое Геометрия как определяется ее внешний вид.
**  Что такое Узел и отношение родитель - потомок.
**  Как организовать в Графе сцены визуальное и логическое использование узлов.
**  Как скрыть один Spatial или целые части сцены.


== Граф Сцены Объект в виртуальном пространстве.

Что такое Граф Сцены?


*  Сцена это виртуальное пространство. Ваша игра происходит в ней.
**  Объекты в сцене называются “Spatial.
**  Spatials имеет смещение(с места положения), вращение и масштаб

Способ измерения:


*  Положение в сцене измеряется с использование координат X,Y и Z.
**  Y вверх X вправо Z навстречу вам.

Spatial с положением и поворотом 0(стр. 6). Вы можете двигать Spatial используя *spatial.move(1,1,0);* . В этом случае Spatial будет передвинут вдоль оси X и Y (стр. 8). Вы можете повернуть Spatial по оси Z используя *spalial.rotate(0,0,FastMath.HALF_PI);* . Spatial будет повернут относительно оси Z (стр. 10). Вы можете маcмасштабировать Spatial с помощью *spatial.scale(2);* . Spatial будет увеличен(стр. 12). 



== Геометрия(Geometry) видимый объект в сцене. Что такое Геометрия?

*  Геометрия это та часть Spatial, который является видимым на сцене.
**  Геометрия имеет Сетку, определяющую ее форму и материал, определяющий её внешний вид.

Геометрия с сеткой обезьяны и белым материалом(стр. 15). Вы можете выбрать новый материал для Геометрии используя *geometry.setMaterial(redMaterial);* получится та же геометрия с новым материалом(стр. 17).



== Узел(Node). Родитель и потомок

*  Узел это Spatial который может обладает другими Spatial потомками. Например машина пассажир.
**  Узел потомок может двигаться и поворачиваться относительно узла родителя.
**  Граф Сцены например использует основной корневой узел к которому подключены все Spatial.

На (стр. 20) узел с 0 положением и поворотом. Вы можете прикрепить Spatial потомка с помощью node.attachChild(spatial); (стр. 22). +



Теперь передвинем Spatial с помощью *spatial.move(0,1,0);* Spatial потомок будет перемещен вдоль оси Y(стр. 24-25). Теперь мы передвинем узел с помощью node.moved(1.5,0,0); узел был смешен относительно оси X(стр. 27). Spatial потомок движется вместе с узлом сохранив смещение относительно узла. +



Теперь мы повернем узел на 90 градусов относительно оси Z используя *node.rotate(0,0,FastMath.HALF_PI);* (стр 30). Spatial потомок повернется вместе с узлом сохранив смещение относительно узла(стр. 31). +



Теперь повернем потомка на -90 градусов по оси Z используя *spatial.rotate(0,0,-FastMath.HALF_PI);* (стр. 33). Spatial потомок теперь повернулся относительно узла. +



Теперь повернем узел обратно на -90 градусов по оси Z *node.rotate(0,0,-FastMath.HALF_PI);* (стр.36). Spatial потомок сохраня свое нынешнее положение повернулся относительно узла(стр. 37). +



Теперь мы изменим масштаб Узла с помощью *node.scale(2);* При этом изменился масштаб и узла и потомка Spatialc39). 


Теперь мы изменим масштаб потомка *spatial.scale(0.5);* (стр. 42). Масштаб потомка изменился у масштаб узла остался тем же(стр.43). Масштаб родительского узла еще в два раза больше, однако действительный размер мира сейчас такой же, как раньше, потому что масштаб местного узла стал прежним (стр. 44). 



== Организация Узлов.

Узел используемый для организации графа сцены.


Это узел нормальной сцены(стр. 46). Любой ваш узел может иметь и другие Spatial, например, узлы, как потомков(стр. 47). Эти узлы, в свою очередь, могут иметь и другие узлы и Spatial как потомков(стр. 47). Это позволяет организовать графа сцены визуально и Spatially. (стр. 50) пример группового смещения Spatials. Но это так же позволяет организовать Граф сцены логически(рис. 51). В этом случае(стр. 52) смещение и вращение узлов скорее всего будет ноль. Таким образом все значения смещения и вращения для потомков могут использоваться только в локальном пространстве. Но вернемся к конструктивному образу(стр. 54)(узлы по-прежнему имеют ноль месте). При поиске центрального NPC единственного spatials мы должны смотреть потомков NPCs узла например *Spatial enemy = npcNide.getChild(“Enemy);*(стр. 55). При поиске мобильного объекта только spatiall мы должны смотреть потомков Mobile узел например *Spatial enemy=mobileNode.getChild(“Enemy);* (стр. 56). Когда мы хотим сделать например, луч проверки столкновений с объектами мира. Это очень просто, все объекты мира группируются в узел Immobile так *CollisionResults results = immobileNode.collideWith(ray);* (стр. 57). 



== Отбраковка(Culling)

Скрываем Spatial и узел.


*  Очищение означает, что геометрия не оказывает видеокарты.
**  Геометрия по-прежнему обрабатываются как часть графа сцены, но вся визуализации и  связанные с ней операции, приостановлены.
**  Spatial может иметь состояние отбраковки “всегда(всегда) “никогда(never) или “наследовать(inherit) (который является по умолчанию)

Давайте взглянем на нормальную сцену(стр. 60). Когда мы отбракуем houseOne используя *houseOne.setCullHint(CullHint.Always);* (стр. 62) houseOne будет отбракован и станет невидим. Мы можем сделать houseOne видимым снова используя *houseOne.setCullHint(CullHint.Inherit);* (стр. 64). Мы можем отбраковать immobileNode используя *immobileNode.setCullHint(CullHint.Always);* (стр. 66). Оба  houseOne и immobileNode станут невидимыми потому что их отбраковка установлена по умолчанию “наследовать. Мы можем установить отбраковку houseTwo на никогда используя *houseTwo.setCullHint(CullHint.Never);* (стр. 68). Так мы сделали houseTwo снова видимым и он больше не находится под влиянием своего родителя immobileNode. Мы можем установить отбраковку immobileNode снова наследовать *immobileNode.setCullHint(CullHint.Inherit);* (стр. 70). Что делает оба дома видимыми снова.



== Автоматическая отбраковка

 В jME3 автоматически отбраковываются Геометрии что не попадают в поле зрения камеры. 
Нормальная сцена(стр. 72). (стр. 73) камера просматривает сцену, все Геометрии видны, нет отбраковки. (стр. 74) камера сдвинулась и теперь только один дом d видимом спектре. (стр. 76) остальные геометрии отбракованы автоматически. 

