Вторник, 26.11.2024, 17:14
Приветствую Вас Гость

Разработка игр c использованием JPCT

Каталог статей

Главная » Статьи » Разработка игр » JPCT

3. Загрузка моделей и текстур
Для данного урока  я создал простенькую 3D модель и текстуру для нее, используя бесплатную версию очень удобной программы SketchUp 2013. Одно из удобств которой это возможность экспорта моделей в формат 3DS и OBJ, оба этих формата поддерживаются  JPCT. 

Вот код данного примера
Код

import com.threed.jpct.FrameBuffer;
import com.threed.jpct.IRenderer;
import com.threed.jpct.Loader;
import com.threed.jpct.Matrix;
import com.threed.jpct.Object3D;
import com.threed.jpct.SimpleVector;
import com.threed.jpct.Texture;
import com.threed.jpct.TextureManager;
import com.threed.jpct.World;
import java.awt.Color;

/**
  *
  * @author Ruslan Nevedomy
  */
public class Main {
   
  private World world;
  private FrameBuffer buffer;
  private Object3D model;
   
  public static void main(String[] args) throws Exception{
  new Main().loop();
  }
   
  public Main() throws Exception {
  world = new World();
  world.setAmbientLight(200, 200, 200);
  //загрузка текстуры
  TextureManager.getInstance().addTexture("Water_Sp.jpg", new Texture(".\\res\\Water_Sp.jpg"));
  TextureManager.getInstance().addTexture("Wood_Che.jpg", new Texture(".\\res\\Wood_Che.jpg"));
  //загрузка модели
  model = loadModelfrom3DS(".\\res\\infopole.3ds", 0.5f);
   
  model.build();
   
  world.addObject(model);
  world.getCamera().setPosition(0, 0, -20);
  world.getCamera().lookAt(model.getTransformedCenter());
  }
  private void loop() throws Exception {
  buffer = new FrameBuffer(800, 600, FrameBuffer.SAMPLINGMODE_NORMAL);
  buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
  buffer.enableRenderer(IRenderer.RENDERER_OPENGL);  

  while (!org.lwjgl.opengl.Display.isCloseRequested()) {
  model.rotateY(0.01f);
  buffer.clear(java.awt.Color.BLUE);
  world.renderScene(buffer);
  world.draw(buffer);
  buffer.update();
  buffer.displayGLOnly();
  Thread.sleep(10);
  }
  buffer.disableRenderer(IRenderer.RENDERER_OPENGL);
  buffer.dispose();
  System.exit(0);
  }
   
  private Object3D loadModelfrom3DS(String filename, float scale) {
  Object3D[] file = Loader.load3DS(filename, scale);
  Object3D ret = new Object3D(0);
  Object3D temp = null;
  for (int i = 0; i < file.length; i++) {
  temp = file[i];
  temp.setCenter(SimpleVector.ORIGIN);
  temp.rotateX((float)( -.5*Math.PI));
  temp.rotateMesh();
  temp.setRotationMatrix(new Matrix());
  ret = Object3D.mergeObjects(ret, temp);
  ret.build();
  }
  return ret;
  }
}


Рассмотрим функцию загрузки 3D объектов из 3DS файлов
Код

  private Object3D loadModelfrom3DS(String filename, float scale) {
  Object3D[] file = Loader.load3DS(filename, scale);
  Object3D ret = new Object3D(0);
  Object3D temp = null;
  for (int i = 0; i < file.length; i++) {
  temp = file[i];
  temp.setCenter(SimpleVector.ORIGIN);
  temp.rotateX((float)( -.5*Math.PI));
  temp.rotateMesh();
  temp.setRotationMatrix(new Matrix());
  ret = Object3D.mergeObjects(ret, temp);
  ret.build();
  }
  return ret;
  }

Объект выгруженный из редактора может состоят из нескольких(обычно один объект это 1 сетка точек иногда именуемая мешем от английского слова Mesh) поэтому мы последовательно перебираем содержимое файла и соединяем его содержимое в единый 3D объект. Далее мы загружаем текстуры, в этом процессе главное чтобы имена текстур в 3DS файле совпадали с именами текстур которые задаются при загрузке. Если они не будут совпадать то текстура не будет отображаться на объекте. Также важно загружать текстуры до моделей.
Код

  //загрузка текстур
  TextureManager.getInstance().addTexture("Water_Sp.jpg", new Texture(".\\res\\Water_Sp.jpg"));
  TextureManager.getInstance().addTexture("Wood_Che.jpg", new Texture(".\\res\\Wood_Che.jpg"));
  //загрузка модели
  model = loadModelfrom3DS(".\\res\\infopole.3ds", 0.5f);
  //собираем объект
  model.build();

Цикл отрисовки практически не отличается от урока Первый шаг с JPCT единственная разница это то что мы вращаем объект загруженный из 3DS файла.

Проект NetBeans со всеми моделями и текстурами находится тут
Категория: JPCT | Добавил: Gram01 (01.08.2013)
Просмотров: 2094 | Комментарии: 1 | Теги: jpct на русском, загрузка моделей JPCT, текстуры в JPCT, jpct по русски | Рейтинг: 5.0/1
Всего комментариев: 1
1 Sasha  
0
Почему у меня текстура загружается, но объект просто перекрашивается в цвет текстуры и рисунка текстуры не видно?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Категории раздела
JPCT [11]
Раздел о разработке игр на устройства работающие не под управлением Android'а
Сеть [2]
Раздел по вопросам касающимся сетевого взаимодействия приложений на java в контексте разработки игр
Контент [0]
Статьи о работе к контентом при разработки игр
Скрипты [2]
использование скриптов в игровом движке
Разное [1]
различные материалы о разработке игрового движка
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Copyright Неведомый Р.А. © 2024 | Рейтинг@Mail.ru