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

AssetManager

Опубликованно: 11.08.2015, 18:59
Последняя редакция, AdiDOS: 05.05.2016 7:45

AssetManager  интерфейс входящий в стандартный пакет JME3 он  предназначен для импорта ресурсов звука, моделей, текстур , шрифтов и материалов .

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

package test;

import com.jme3.app.SimpleApplication;
import com.jme3.asset.plugins.FileLocator;
import com.jme3.asset.plugins.ZipLocator;
import com.jme3.font.BitmapText;
import com.jme3.light.AmbientLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Geometry;
import com.jme3.scene.Mesh;
import com.jme3.scene.Mesh.Mode;
import com.jme3.scene.Spatial;
import com.jme3.scene.shape.Sphere;
import com.jme3.texture.Texture;

import jme3tools.savegame.SaveGame;

public class AssetManagerTest extends SimpleApplication{
 private Spatial OgreXmlModel = null;
 private Spatial ObjModel = null;

 public static void main(String[] args) {
   new AssetManagerTest().start();

 }

 //Инициализация
 @Override
 public void simpleInitApp() {
   flyCam.setMoveSpeed(10);

 //-------------------Загрузка модели куба OgreXml--------------------------------------------------------
   assetManager.registerLocator("E:/AssetsTest.zip", ZipLocator.class); //Регистрируем путь к Zip архива
   OgreXmlModel = assetManager.loadModel("Models/OgreXmlModels/box.mesh.xml"); //Качаем модель OgreXML
   Material mat1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); //Подгружаю свойства метериалов
   Texture tex1 = assetManager.loadTexture("Textures/brick_wall.jpg"); //Загрузка текстуры

   mat1.setTexture("ColorMap", tex1);
   OgreXmlModel.setMaterial(mat1);
   OgreXmlModel.setLocalTranslation(-1, 0, 1);
   rootNode.attachChild(OgreXmlModel);
 //.........................................................................................................

 //-------------------Загрузка модели цилиндр в формате obj-------------------------------------------------
   assetManager.registerLocator("E:/AssetsTest/", FileLocator.class); //Регистрируем путь к папке
   ObjModel = assetManager.loadModel("Models/ObjModels/cylinder.obj"); //Загрузка Obj модели
   ((Geometry)ObjModel).getMesh().setMode(Mode.LineLoop); //Отображение модели линиями

   ObjModel.setLocalTranslation(1, 0, 1);
   rootNode.attachChild(ObjModel);
 //.........................................................................................................

 //-------------------Загрузка шрифта-----------------------------------------------------------------------

   guiFont = assetManager.loadFont("Interface/Fonts/Default.fnt"); //Загружаем шрифт
   BitmapText helloText = new BitmapText(guiFont, false);
   helloText.setSize(20);
   helloText.setText("Hello AssetsManager");
   helloText.setLocalTranslation(50, 750, 0);
   guiNode.attachChild(helloText);
 //.........................................................................................................

 //-------------------Сохранение и загрузка сферы в бинарный формат-----------------------------------------
   Sphere mesh = new Sphere(32, 32, 1, false, true); 

   SaveGame.saveGame("Models/", "saveSphere.j3o", mesh); //Сохранение сетку модели
   Mesh loadMesh = (Mesh)SaveGame.loadGame("Models/", "saveSphere.j3o"); //Загрузка сетки 

   Geometry loadSphere = new Geometry("sphere", loadMesh);
   Material mat = new Material(assetManager, "Common/MatDefs/Misc/ShowNormals.j3md");
   loadSphere.setMaterial(mat);
   rootNode.attachChild(loadSphere);
 //........................................................................................................
   createAmbLight();

 }
 //Обьемное освещение
 private void createAmbLight() {
   AmbientLight al = new AmbientLight();
   al.setColor(ColorRGBA.White.mult(5.3f));
   rootNode.addLight(al);
 }

}

1

В этом коде я привел пример  загрузки разных структур моделей а также текстуры и материалы , принцип работы такой мы регистрируем путь к файлам или к zip архиву с помощью метода.

public void registerLocator(String rootPath, Class<? extends AssetLocator> locatorClass); 

Первым параметром rootPath мы указываем путь к корневому каталогу или архиву а второй  locatorClass определяет тип ресурса из которого мы будем грузить.

FileLocator — Обычный каталог(папка)

ZipLocator — Архив Zip

HttpZipLocator — Архив Zip но посети Интернет

UrlLocator — Обычный каталог но посети Интернет

Давайте представим архив  Zip под названием myAssets с вложенными папками и файлами допустим такой структуры.

2

В этом случае нам достаточно указать так.

 registerLocator("C:/myAssets.zip", ZipLocalor.class); 

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

loadModel("Models/Model1.obj");
loadTexture("Textures/Texture2.png");

Все просто AssetManager подгружает выбранные ресурсы с учетом зарегистрированных корневых путей и сам производит поиск файлов.

Поддерживаемые форматы файлов

Шрифты — .font

Текстуры— .jpg , .png , .dds

Аудио — .wav , .ogg

Модели — (Blender).blend , (ogreXml) .mesh.xml , .obj , (jme3Object) .j3o

Материалы — .j3m , j3md

Шейдеры — .j3f, .vert, .frag

Я думаю все ясно на сегодня все.

Спасибо за внимание !!!

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

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