Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Часто задаваемые вопросы (FAQ)

Часто задаваемые вопросы (FAQ)

Опубликованно: 18.10.2017, 19:34
Последняя редакция, Andry: 25.10.2017 18:37

Я хочу создать и настроить jME3 приложение


Как начать писать предварительно сконфигурированную jME игру?

Напишите Java класс, который расширяет com.jme3.app.SimpleApplication.

Подробнее: Hello SimpleApplication, TestAppStateLifeCycle.

Как изменить цвет фона?

viewPort.setBackgroundColor(ColorRGBA.Blue);

Могу ли я настроить класс SimpleApplication?

Да! На самом деле, вы ДОЛЖНЫ настраивать его! Для ваших собственных игр вы всегда создаете пользовательский базовый класс, который расширяет класс com.jme3.app.SimpleApplication. Отныне это уже не простое приложение — теперь это ваша игра. Настройте параметры приложения, реализуйте методы и настройте их!

Подробнее: SimpleApplication, AppSettings.

Как я могу переключаться между экранами или состояниями?

Вы должны разбить логику приложения на компоненты, распространив это на отдельные AppStates. AppStates можно подключить и отключить от игры. AppStates имеют доступ ко всем объектам (rootNode, PhysicsSpace, inputManager и.т.п.) и методам в вашем основном приложении. Таким образом, каждый AppState может принести свой собственный набор обработчиков ввода, узлов GUI, spatial узлов и даже своего собственные подмножества игровой механики в цикле update().

Подробнее: Application States.

Как приостановить/возобновить игру?

Вы разбиваете свое приложение на несколько AppStates и реализуете методы setEnabled() для каждого состояния. Затем вы создаете, например, GameRunningAppState и GamePausedAppState. Задача GamePausedAppState состоит в том, чтобы прикрепить все ваши AppStates, которые содержат логику и GUI экрана паузы, и отделить все AppStates, которые содержат логику и GUI воспроизводящейся игры. GameRunningAppState делает обратное. Присоединяя один или другой к игре, вы переключаетесь между приостановленными и возобновлёнными состояниями.

Подробнее: Application States.

Как отключить вывод журнала на консоль?

Во время разработки вы можете переключить уровень серьезности журнала с по умолчанию, на то чтобы больше не печатать предупреждения FINE, а только WARNING-ги(предупреждения).

java.util.logging.Logger.getLogger("").setLevel(Level.WARNING);

Для релиза своей игры установите уровень серьезности журнала по умолчанию для печати только SEVERE(серьезных) ошибок.

java.util.logging.Logger.getLogger("").setLevel(Level.SEVERE);

Подробнее: Ведение журнала.

Почему происходит сбой выполнения с «Cannot locate resource»(Не удается найти ресурс)?

Обязательно загружайте модели, преобразованные в двоичный формат .j3o, а не в исходных форматах Ogre или Wavefront. Если вы загружаете игровые ресурсы из zip-файлов, обязательно скорректируйте сценарий сборки, затем скопируйте их в папку сборки.

Подробнее: Менеджер ресурсов(Asset Manager)

Что такое java.lang.LinkageError: Version mismatch(Несоответствие версии)?

Это редкое исключение показывает сообщение, подобное следующему: Exception in thread “LWJGL Renderer Thread java.lang.LinkageError: Version mismatch: jar version is (number), native library version is (another number)(Исключение в потоке «Поток Рендеринга LWJGL» java.lang.LinkageError: Несоответствие версии: версии jar (номер), и версия исходной библиотеки (другой номер)). jME3 нуждается в родных библиотеках(Java native library) (файлах DLL, .jnilib, lib*.so) для запуска LWJGL и jBullet. Правильные версии этих библиотек включены в установку SDK или загрузку бинарников. Однако существуют обстоятельства, при которых jME3 не может определить, какую копию родных библиотеки он должен использовать:

Возможные причины

  • Если вы устанавливаете другое приложение, которое нуждается в другой версии родных библиотек, и это приложение глобально устанавливает свою версию поверх jME3.
  • Если старая копия родной библиотеки находится в каталоге проекта, в вашем домашнем каталоге или в пути к библиотекам Java или в classpath.
  • Если вы связали со старой копией в настройках среды IDE.

После чего Java предполагает, что вы предпочитаете эти родные библиотеки поверх связанных, и ваше приложение jME3 завершается из-за запуска с неправильной версией.

Чтобы исправить это, выполните поиск файлов .dll (Windows), .jnilib (Mac) и .so (Linux) для jBullet и LWJGL на вашем жестком диске, а также в ваших путях и настройках IDE, убедитесь, что это все не мешает. (Если у вас есть другие версии jME, установленные и связанные каким-то образом, с устаревшие родные библиотеки также могут быть в файлах lwjgl.jar или jbullet.jar!)


Я хочу загрузить свою сцену


Как заставить объекты появляться/исчезать в 3D-сцене?

Чтобы сделать так что бы spatial появился в сцене, вы присоединяете его к корневому узлу(rootNode) (или к узлу, прикрепленному к корневому узлу). Чтобы удалить spatial объект, вы отсоединяете его от своего родительского узла.

rootNode.attachChild(spatial); // появляться в сцене
rootNode.detachChild(spatial); // удалите из сцены

Подробнее: The Scene Graph, Hello Node, Hello Asset, Spatial, com.jme3.scene.Node и com.jme3.scene.Geometry.

Почему я получаю AssetNotFoundException когда загружаю X?

Сначала проверьте правильность пути к папке asset. По умолчанию это относится к папке asset вашего проекта:

// Загрузит .../jMonkeyProjects/MyGame/assets/Models/Ninja/Ninja.j3o
Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.j3o");

Если вы не используете по умолчанию папке asset, убедитесь, что вы зарегистрировали локатор в AssetManager. Доступны различные типы Локаторов.

this.assetManager.registerLocator("assets/", FileLocator.class); // по умолчанию
this.assetManager.registerLocator("c:/jme3User/JMEisSoCool/myAwesomeFolder/", FileLocator.class);
this.assetManager.registerLocator("town.zip", ZipLocator.class);

Обратите внимание, что вы не должны регистрировать каждую отдельную папку, содержащую текстуру, поскольку assetmanager больше не сможет различить изображения с тем же названием.

Подробнее: Менеджер ресурсов(Asset Manager)

Как создавать 3D-модели, текстуры, звуки?

Следуйте нашим рекомендациям для программного конвейера мультимедийных игровых ресурсов.
Вы создаете 3D-модели в 3D редакторе сетки, например Blender, и экспортируете их с помщью Ogre Mesh XML (анимированные объекты, сцены) или в формате Wavefront OBJ (статические объекты, сцены). Вы создаете текстуры в графическом редакторе, например Gimp, и экспортируете их формате PNG или JPG. Вы создаете звуки в аудиоредакторе, например Audacity, и экспортируете их как WAVE или OGG.

Подробнее: 3D Модели, Программный конвейер мультимедийных игровых ресурсов, JME3-импортер blend-в-j3o;
Скачать Blender, Интро-учебник Blender, Плагин Blender-в-Ogre, Сравнение функций 3D-графического программного обеспечения (Wikipedia).

Как загрузить 3D-модель в сцену?

Используйте jMonkeyEngine SDK для преобразования моделей из форматов Ogre XML или Wavefront OBJ в двоичный формат .j3o. Загрузите файл .j3o с помощью AssetManager.

// Загрузит .../jMonkeyProjects/MyGame/assets/Models/Ninja/Ninja.j3o
Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.j3o");

Подробнее: Hello Asset, Asset Manager, com.jme3.assets.AssetManager, com.jme3.scene.Geometry, jMonkeyEngine SDK конвертирование в j3o,
Примеры кода: TestOgreLoading.java, TestOgreConvert.java.

Как инициализировать сцену?

Используйте метод simpleInitApp() в SimpleApplication (или initApp() в Application).

Подробнее: Hello SimpleApplication, SimpleApplication.java.


Я хочу преобразовать объекты в сцене


Как перемещать или поворачивать или изменять размер spatial?

Чтобы перемещать, поворачивать или изменять размер spatial, вы используете преобразования. Вы можете объединить преобразования (например, выполнять повороты вокруг нескольких осей за один шаг, используя Кватернион со slerp() или com.jme3.math.Transform со interpolateTransforms().

spatial.setLocalTranslation(1,-3,2.5f); spatial.rotate(0,3.14f,0); spatial.scale(2,2,2);

Подробнее: Hello Node, Spatial, Матчасть для чайников.

Как я могу сделать spatial двигающимся сами по себе?

Измените переметите (положение) геометрии в цикле обновления с помощью setLocalTranslation() для не с физикой и applyForce() или setWalkDirection() для тех что с физикой объектов. Вы также можете определять и дистанционно управлять движением spatial, используя Кинематики, например для записи роликов или реализовывать движущиеся платформы, лифтов, дирижаблей и.т.п.

Подробнее: Hello Loop, Цикл Обновления, Пользовательские Control-ы, Кинематики
Примеры кода: TestBumpModel.java, TestOgreLoading.java

Как получить доступ к именованной под-сете в Модели?

Geometry submesh = (Geometry) model.getChild("door 12");

Подробнее: Spatial

Как создать процедурные или пользовательские фигуры?

Вы можете программно создавать com.jme3.scene.Mesh.

Подробнее: Пользовательские сетки


Я хочу изменять поверхность объектов в сцене


Почему моя UV развертка / текстурирование выглядят неправильно?

Наиболее вероятная причина — текстуры перевернуты. Возможно, вы используете следующий метод по умолчанию:

material.setTexture("ColorMap", assetManager.loadTexture("myTexture.jpg"));

Вы можете установить логическое значение в конструкторе TextureKey, чтобы перевернуть или не перевернуть. Переключите логическое значение, чтобы узнать, исправляет ли он проблему с UV разверткой / текстурированием:

material.setTexture("ColorMap", this.assetManager.loadTexture(new TextureKey("myTexture.jpg", false)));

Как масштабировать, зеркалировать или обертывать текстуру?

Вы не можете масштабировать текстуру, но вы масштабируете координаты текстуры в сетке, к которой применяется текстура:

mesh.scaleTextureCoordinates(new Vector2f(2,2));

Вы можете выбрать среди различных com.jme3.texture.Texture.WrapModes для отдельных текстурных карт материала: BorderClamp, EdgeClamp, Clamp; MirrorBorderClamp, MirrorEdgeClamp, MirrorClamp; Повторите, MirroredRepeat.

material.getTextureParam("DiffuseMap").getTextureValue().setWrap(WrapMode.Repeat);

Как изменить цвет или блеск материала?

Используйте AssetManager для загрузки Материалов и изменения настроек материала.

Подробнее: Hello Material, Как использовать Материалы, Обзор Материалов, Asset Manager.
Примеры кода: TestNormalMapping.java, TestSphere.java.

Как сделать поверхность дерева, камня, металла и.т.п.?

Создавайте Текстуры как файлы изображений. Используйте AssetManager для загрузки Материала и использования наложение текстур для улучшения внешнего вида.

Подробнее: Hello Material, Как использовать Материалы, Обзор Материалов, Asset Manager, com.jme3.assets.AssetManager, Blender: Создание Bump Maps и Normal Maps
Примеры кода: TestSimpleBumps.java

Почему материалы слишком яркие, слишком темные или мерцающие?

Если вы используете освещеамый материал (на основе Lighting.j3md), вы должны прикрепить источник света к корневому узлу(rootNode), иначе вы ничего не увидите. Если вы используете цветной освещаемый материал, убедитесь, что вы указали цвет Ambient (может совпадать с цветом Diffuse), если вы используете AmbientLight. Если вы видите объекты, но они серые или слишком темные, установите цвет освещения на белый или сделайте его ярче (вы можете умножить значение цвета на скаляр) или добавьте глобальный белый источник света (AmbientLight). Подобным же образом, настройте свет если все слишком белое. Если материалы мерцают под направленным светом, измените вектор направления света. Измените цвет фона (который не зависит от источников света), чтобы получить лучший контраст при отладке проблем освещения.

Как сделать геометрию бросающую тень?

Используйте com.jme3.shadow.BasicShadowRenderer вместе с com.jme3.light.DirectionalLight, и setShadowMode().

Подробнее: Свет и тень
Примеры кода: TestEverything.java, TestShadow.java

Как сделать прозрачный материал?

Назначьте текстуру с альфа-каналом в Материал и установите режим смешивания Материала в альфа. Используйте это для создания прозрачных или полупрозрачных материалов, таких как стекло, оконные стекла, вода, листья деревьев и.т.п.

material.getAdditionalRenderState().setBlendMode(BlendMode.Alpha);

Подробнее: Hello Material, Как использовать Материалы

Как заставить отключится отсечение?

При отладке пользовательских сеток вы можете отключить com.jme3.material.RenderState.FaceCullMode, чтобы видеть сетки как изнутри так и снаружи.

someMaterial.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off);

Вы также можете отключить отсечение com.jme3.scene.Spatial.CullHint для целого spatial, чтобы заставить jme рассчитать его, даже если он находится за камерой и вне видимости.

someNode.setCullHint(CullHint.Never);

Подробнее: Spatial

Могу ли я нарисовать только контур сцены?

Добавьте состояние рендеринга в материал и активируйте Wireframe.

material.getAdditionalRenderState().setWireframe(true);

Подробнее: Отладка.

Я хочу управлять камерой

Камера по умолчанию cam является экземпляром класса Camera.

Подробнее: com.jme3.renderer.Camera

Как заставить камеру двигаться?

SimpleApplication активирует flyCam (экземпляр FlyByCamera) по умолчанию. flyCam заставляет камеру перемещаться с помощью мыши и клавиш WASD. Вы можете отключить flyCam следующим образом:

flyCam.setEnabled(false);

Как переключаться между видом от третьего лица и первого лица?

Вы можете активировать FlyBy Cam как камеру от первого лица.

flyCam.setEnabled(true);

Подробнее: Hello Collision.
Примеры кода: com.jme3.input.FlyByCamera

Вы также можете создать камеру преследования третьего лица.

flyCam.setEnabled(false);
chaseCam = new ChaseCamera(cam, spatial, inputManager);

Подробнее: com.jme3.input.ChaseCamera
Примеры кода: jme3test/input/TestChaseCamera.java.

Как увеличить скорость камеры?

flyCam.setMoveSpeed(50f);

Действия, взаимодействия, физика


Как я могу реализовать игровую логику/игровую механику?

Используйте Control-ы для то что бы задвать поведения типов Spatial-ов. Используйте Application States для реализации глобального поведения, для группы подмножеств обработчиков вводимых данных или GUI экранов и.т.п. Используйте циклы simpleUpdate() и update() для тестов и взаимодействий. Используйте Cinematics для объектов дистанционного управления в сценах.

Подробнее: Hello Loop, Цикл Обновления, Пользовательский Control, состояния приложений, Кинематика

Как я могу позволить игрокам взаимодействовать с помощью клавиатуры?

Используйте com.jme3.input.KeyInput и Input Listener(Слушатель Ввода).

Подробнее: Hello Input, Обработка Ввода

Как я могу позволить игрокам взаимодействовать, кликом?

Игроки обычно кликом мыши, подбирают предметы, открывают двери, стреляют оружием и.т.п. Используйте Input Listener(Слушатель Ввода), чтобы реагировать на клик мыши, а затем осуществлять бросание луча от игрока; если он пересекается с ограничивающим объемом spatial, то этот spatial будет выбранной целью. Ниже приведенные ссылки содержат образцы кода с «выбором зафиксированного перекрестия» и «выбором свободного курсора мыши».

Подробнее: Hello Picking, Выбор мышью, Столкновение и пересечение, Обработка Ввода, com.jme3.bounding., com.jme3.math.Ray.java, com.jme3.collision.CollisionResults.java.
Примеры кода: TestRayCollision.java

Как мне анимировать персонажи?

Создайте анимированную модель OgreMesh с костями в 3D редакторе сетки (например, Blender).

Подробнее: com.jme3.animation., Hello Animation, Анимация, Уроки анимации в Blender
Примеры кода: Анимации

Как удержать игроков от падения сквозь полы и хождения через стены?

Используйте обнаружение столкновений. Наиболее распространенное решение — использовать интеграцию физики jme, jBullet.

Подробнее: Hello Collision, Физика, com.jme3.bullet., CapsuleCollisionShape и CompoundCollisionShape, CharacterControl и RigidBodyControl.

Как сделать шары/колеса/итп отскакивающими и катящимися?

Добавьте control-ы физики в Spatials и дайте им сферические или цилиндрические ограничивающие объемы.

Подробнее: Hello Physics, Физика, com.jme3.bounding., com.jme3.bullet.collisions, com.jme3.bullet.control.RigidBodyControl.java
Примеры кода: TestSimplePhysics.java, Больше образцов физики

Как производить отладку странного поведение физики?

Возможно, ваши столкновения фигур накладываются друг на друга — или они происходят не там, где вы думаете. Сделайте столкновение фигур видимым, добавив следующую строку после инициализации bulletAppState:

bulletAppState.getPhysicsSpace().enableDebug(assetManager);

Как сделать ходячего персонажа?

Вы можете использовать CharacterControl от jBullet, который фиксирует объект с физикой в вертикальном положении, что бы он не опрокидывался при перемещении/ходьбе (как правило, требуются высокие объекты с физикой).

Подробнее: CharacterControl
Примеры кода: TestQ3.java (от первого лица), TestPhysicsCharacter.java (от третьего лица)

Как мне сделать управляемое транспортное средство?

Используйте VehicleControl, который поддерживает поведение подвески.

Подробнее: Транспортные средства, com.jme3.bullet., VehicleControl
Примеры кода: TestFancyCar.java, (Нажимайте клавиши HUJK для управления, пробел, чтобы прыгать.)

Могут ли объекты качаться, как маятники, цепи, канатные дороги?

Используйте шарниры и суставы PhysControl.

Подробнее: Шарниры и суставы, [com.jme3.bullet.joints.], TestPhysicsHingeJoint.java (нажмите клавиши HK, чтобы повернуть, пробел для качания.)


Отображаемый по умолчанию GUI


Что это за статистистика FPS/Objects/Vertices/Triangles(FPS/Объекты/Вершины/Треугольники)?

В левом нижнем углу каждой стандартной BasicGame вы видите «Статистику» и FPS (кадры в секунду). Эти сведенья предоставляют вам дополнительную информацию на этапе разработки. Например, если вы заметили, что количество объектов увеличивается, а FPS уменьшается, то вы знаете, что ваш код присоединяет слишком много объектов и не отсоединяет их в достаточном количестве итд (может быть, вы используете бесконечный цикл?).

Подробнее: StatsView(Статистика)

Как мне убрать статистику FPS/Objects?

В методе simpleInitApp() приложения вызовите:

setDisplayFps(false); // скрыть FPS
setDisplayStatView(false); // скрыть статистику

Как отображать количество очков, здоровье, мини-карту, иконки состояния?

Прикрепите текст и изображения к ортогональному guiNode, чтобы создать heads-up display (HUD).

Подробнее: HUD, com.jme3.font., com.jme3.ui.Picture.java, guiNode.attachChild()
Примеры кода: TestOrtho.java, TestBitmapFont.java

Как отображать кнопки и элементы управления UI?

Вы можете отображать кнопки, позволяющие игроку переключаться между игрой, экраном настроек и экранами счёта. Для кнопок и других более продвинутых элементов UI, jME поддерживает библиотеку Nifty GUI.

Подробнее: Nifty GUI
Примеры кода: TestNiftyGui.java

Как отобразить экран загрузки?

Вместо того, чтобы иметь застывший экран во время загрузки игр, вы можете иметь экран загрузки во время загрузки.

Подробнее: Экран Загрузки


Nifty GUI


При добавлении элементов управления (кнопок и.т.п.) Я получаю NoSuchElementException!

Убедитесь, что вы добавили ссылку в свой XML, на файл описывающий элементы управления: Это значение по умолчанию:

<useControls filename="nifty-default-controls.xml"/>

Где я могу найти пример кода Java классов и XML Nifty GUI?

https://github.com/nifty-gui/nifty-gui/tree/1.4/nifty-examples/src/main

Есть ли Java Doc для Nifty GUI?

Nifty GUI Javadoc


Я хочу создать мир со звуками, эффектами и ландшафтом


Как проигрывать звуки и шумы?

Используйте AudioRenderer, Listener и AudioNode из com.jme3.audio..

Подробнее: Hello Audio, Audio
Примеры кода: Аудио

Как сделать огонь, дым, взрывы, рои насекомых, магические заклинания?

Для эффекта роя насекомых, вы используете излучатели частиц.

Подробнее: Hello Effects, Излучатели частиц, Свечение и Отблеск, Обзор эффектов, com.jme3.effect.EmitterSphereShape.java, com.jme3.effect.ParticleEmitter.java
Примеры кода: TestExplosionEffect.java, TestMovingParticle.java, TestSoftParticle.java

Как сделать воду, волны, отражения?

Используйте специальную постобработку визуализации(рендеринга) из com.jme3.water..

Подробнее: Вода, Постобработка воды
Примеры кода: TestSimpleWater.java, TestSceneWater.java, TestPostWaterLake.java, TestPostWater.java

Как сделать туман, свечение, размытие, рассеяние света?

Используйте специальную постобработку визуализации(рендеринга) из com.jme3.post..

Подробнее: Обзор эффектов

Как сгенерировать ландшафт?

Используйте com.jme3.terrain.. JMonkeyEngine также предоставляет вам для этого плагин Terrain Editor(Редактор ландшафта).

Подробнее: Hello Terrain, Ландшафт, Редактор ландшафта
Примеры кода: TerrainTest.java

Как сделать небо?

Примеры кода: TestSkyLoading.java

rootNode.attachChild(SkyFactory.createSky( assetManager,
       "Textures/Sky/Bright/BrightSky.dds", false));
skyGeo.setQueueBucket(Bucket.Sky)

Подробнее: Небо


Я хочу получить доступ к свойствам основной программно-аппаратной части(back-end)


Как считать возможности видеокарты?

Если ваша игра активно использует функции, которые старые видеокарты не поддерживают, вы можете Считать Возможности Видеокарты в самом начале перед началом app, и затем решить, как продолжать.

Collection<com.jme3.renderer.Caps> caps = renderer.getCaps();
Logger.getLogger(HelloJME3.class.getName()).log(Level.INFO, "Capabilities: {0}", caps.toString());

Как запустить jMonkeyEngine 3 с OpenGL1?

В вашей игре добавьте

settings.setRenderer(AppSettings.LWJGL_OPENGL1)

к AppSettings (см. подробности там).
Для самого jMonkeyEngine SDK выберите Сервис ▸ Параметры ▸ OpenGL и поставьте галочку для OpenGL1.

Как я могу оптимизировать расчет Графа Сцены?

Вы можете группировать(batch) все геометрии в сцене (или под-узлы), которая остается статической.

jme3tools.optimize.GeometryBatchFactory.optimize(rootNode);

Группирование означает, что все геометрии с одним и тем же Материалом объединяются в одну сетку. Эта оптимизация действует только в том случае, если вы используете только несколько (примерно до 32) материалов. Окупаемость заключается в том, что группирование экономит некоторое количество времени, когда игра инициализируется.

Как запретить пользователям распаковывать мой JAR?

Добавьте obfuscator в сценарий Ant. SDK поставляется с базовым сценарием obfuscation, который можно включить в настройках проекта.


Я хочу сделать математику


Что означает addLocal()/multLocal() и.т.п.?

Многие математические функции (mult(), add(), subtract() и.т.п.) Являются локальными и нелокальными (multLocal(), addLocal(), subtractLocal() и.т.д.).

  1. Нелокальный означает, что создается новый независимый объект (аналогично clone()) в качестве возвращаемого значения. Используйте нелокальные методы, если вы хотите продолжать использовать старое значение объекта, который вы вызываете методами.
    • Пример 1: Quaternion q1 = q2.mult(q3);
      • Возвращает результат в качестве нового Кватерниона q1.
      • Используемые объекты q2 и q3 остаются такими же, какими они и были, и их можно использовать повторно.
    • Пример 2: v.mult(b).add(b); 😄
      • Осторожно: Это вычисляет результат который должен использоваться, а если вы на самом деле его не используете, то возвращаемое значение отбрасывается!
  2. Локальный означает, что новые объекты не создаются, вместо этого изменяется вызывающий объект. Используйте это, если вы уверены, что вам больше не нужно старое значение вызываемого объекта.
    • Пример 1: q2.multLocal(q3)
      • Вычисляет q2*q3 без создания временных объектов.
      • Результат сохраняется в вызывающем объекте q2. Старое значение q2 потеряно.
      • Объект q3 остается таким же, каким он и был.
    • Пример 2: v.multLocal(a).addLocal(b);
      • Вычисляет ожидаемый результат без создания временных объектов.
      • Результат сохраняется в вызывающем объекте v. Старое значение v потеряно.
      • Объекты a и b остаются такими же, какими они и были.

В чем разница между Глобальными(World) и Локальными(Local) координатами?

Мировые координаты Spatial — это его настоящие координаты в 3D-сцене (это похоже на GPS координаты). Локальные координаты Spatial — это его координаты относительно родительского Spatial (это подобно высказыванию «Я на десять метров от входа»).

Как преобразовывать Градусы в Радианы?

Умножить значение в градусах на FastMath.DEG_TO_RAD, чтобы преобразовать его в радианы.


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

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

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