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

3. Создание контента, 3d моделей. ч3.

Опубликованно: 28.07.2015, 0:07
Последняя редакция, AdiDOS: 07.05.2017 10:24

Для этого урока понадобиться ознакомиться с предыдущими статьями.

Создадим новый проект, можно было бы модифицировать прежний, например: SuperGame. Но так лучше усваивается на первых порах, и меньше путаницы для тех кто пропустил предыдущие статьи, т.к. знаком с эклипсом.

И так: первый этап подготовка.

1. Имя проекта — Project name: Load

2. Добавляем либы JME3 к проекту

3. Создадим пакет — Name: test

4. Создаем класс — Name: Load

5. В корне проекта создадим папку, правой кнопкой на проекте, New и выберем Folder. В диалоге в поле Folder name введем имя res

6. В папке res создадим папку plane

Скачаем текстуры в архиве и распакуем их в папку, сюда также поместим наш созданный в уроке меш Plane.mesh.xml

7.Теперь создадим через эклипс новый файл, выберем папку plane нажмем правую кнопку мыши. Выберем New, и далее File. В открывшемся диалоге в поле File name введем BrickWall2.j3m и нажмем Finish. И вставим следующий текст.

Material parallax : shader/Lighting.j3md {

MaterialParameters {

DiffuseMap : plane/BrickWall.jpg

NormalMap : plane/BrickWall_normal.dds

PackedNormalParallax: true

SteepParallax : true

ParallaxHeight : 0.07

}

}

Это собственно будет наш интерфейс материала. Здесь parallax имеет произвольное имя, и ни на что не влияет. Далее идет используемый интерфейс шейдера. И список параметров нашего материала. Ни какой экспортер не сделает вам правильный материал, поэтому я рекомендую его править в ручную. За исключением который был получен с помочью SDK. К слову в SDK  вы можете посмотреть все параметры для это интерфейса Lighting.j3md или других. Вы можете поиграть с параметрами для того чтоб понять за что они отвечаю. Самый интересный ParallaxHeight : 0.07, чем выше значение тем больше эффект. Также эти параметры можно менять программно из приложения.

8. В папке res создадим папку shader

Теперь скачаем архив с файлами шейдеров и интерфейса к ним. Я для наглядности добавил их в папку проекта, чтоб не было вопросов как это работает. И изменил в интерфейсе пути для локальной работы из папки shader. Данный интерфейс поставляется с движком для реализации сложных материалов и эффектов. Исходно он располагается по пути: source\Common\MatDefs\Light\Lighting.j3md и имеет расширение j3md.

Скриншот структуры проекта который должен у вас получиться прежде чем перейти к программированию.

рис2

Второй этап, программирование. Перейдем к файлу класса Load. Вставим в него код.

package test;

import com.jme3.app.SimpleApplication;
import com.jme3.asset.plugins.FileLocator;
import com.jme3.light.DirectionalLight;
import com.jme3.material.Material;
import com.jme3.math.*;
import com.jme3.scene.Spatial;
import com.jme3.util.TangentBinormalGenerator;

public class Load extends SimpleApplication {

public static void main(String[] args) {
Load app = new Load();
app.start();
}

@Override
public void simpleInitApp() {

// Установим камеру выше нашего меша
cam.setLocation(new Vector3f(0, 2, 0));

// Для работы шейдеров нужен источник света
DirectionalLight sun = new DirectionalLight();
sun.setDirection(new Vector3f(-.1f,-.1f,-.1f).normalizeLocal());
rootNode.addLight(sun);

// Укажем где менеджеру искать наши ресурсы
assetManager.registerLocator("res", FileLocator.class);

// Загрузим наш файл материала
Material mat = assetManager.loadMaterial("plane/BrickWall2.j3m");

// Демонстрация программного изменения, если его поменять то прописанное значение 
//в интерфейсе материала заменится  этим, для проверки раскомментируйте.
// mat.setFloat("ParallaxHeight", 0.17f);

// Загрузим наш меш
// По умолчанию позиция 0 0 0
Spatial sceneModel = assetManager.loadModel("plane/Plane.mesh.xml");

// Установим ему наш материал
sceneModel.setMaterial(mat);

// Сгенирирум касательные и бинормали для правильной работы шейдера.
TangentBinormalGenerator.generate(sceneModel);

// Добавим в сцену
rootNode.attachChild(sceneModel);
}
}

Думаю по комментариям все понятно, для проверки запустите приложение. Должно получиться так если малость камерой по елозить.

рис3

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

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