Есть ли способ импортировать 3D-модель в Android?

StackOverflow https://stackoverflow.com/questions/204363

  •  03-07-2019
  •  | 
  •  

Вопрос

Можно ли создать простую 3D-модель (например, в 3DS MAX), а затем импортировать ее на Android?

Это было полезно?

Решение

Вот до чего я добрался:

  • Я использовал ApiDemos от Google в качестве отправной точки - там есть вращающиеся кубы, каждый из которых задан двумя массивами:вершины и индексы.
  • Я построил свою модель с помощью Blender и экспортировал ее как OFF file - это текстовый файл, в котором перечислены все вершины, а затем грани в терминах этих вершин (индексированная геометрия)
  • Затем я создал простое приложение на C ++, которое удаляет это и записывает в виде двух XML-файлов, содержащих массивы (один для вершин и один для индексов)
  • Затем эти XML-файлы копируются в res /values, и таким образом я могу присвоить содержащиеся в них данные массивам, подобным этому:
    int vertices[] = context.getResources().getIntArray(R.array.vertices);
  • Мне также нужно вручную изменить количество граней, которые будут нарисованы здесь: gl.glDrawElements(GL10.GL_TRIANGLES, 212*6, GL10.GL_UNSIGNED_SHORT, mIndexBuffer); - вы можете найти этот номер (в данном случае 212) в верхней части файла OFF

Здесь вы можете найти страницу моего проекта, в котором используется это решение: Проект на Github > vsiogap3d

Другие советы

вы можете экспортировать его в формат ASE.из ASE вы можете преобразовать его в свой код вручную или программно.В Android вам понадобится массив vertex для вершин и faces для индексов.не забывайте, что вы должны установить

gl.glFrontFace(GL10.GL_CCW);

потому что 3ds max по умолчанию работает против часовой стрелки.

Это должно быть возможно.Вы можете использовать этот файл в качестве файла данных вместе с вашей программой (и как таковой он будет помещен в эмулятор и упакован для установки на реальное устройство).Затем вы можете написать загрузчик и средство просмотра моделей на Java, используя библиотеки Android и GLES для отображения модели.

Однако конкретные ресурсы по этому вопросу, вероятно, ограничены.3ds - это собственный формат, поэтому загрузчики сторонних производителей находятся в дефиците и в основном разрабатываются обратным образом.Другие форматы (такие как blender или milkshape) более открыты, и вы сможете довольно легко найти подробную информацию о написании загрузчика для них на java.

Вы пробовали min3d для Android?Он поддерживает модели 3ds max, obj и md2.

Не уверен насчет Android конкретно, но, вообще говоря, вам нужен скрипт в 3DS Max, который вручную записывает нужное вам форматирование из модели.

Что касается того, существует ли он для Android или нет, я не знаю.

Вы также можете сделать это с помощью Конвертер 3D-объектов

http://web.t-online.hu/karpo/

Этот инструмент может конвертировать объект 3ds в текстовый формат \xml или c-код.

Пример вывода open gl 'c':

glDisable(GL_TEXTURE_2D);
glEnable(GL_LIGHTING);
glEnable(GL_NORMALIZE);

GLfloat Material_1[] = { 0.498039f, 0.498039f, 0.498039f, 1.000000f };

glBegin(GL_TRIANGLES);

  glMaterialfv(GL_FRONT,GL_DIFFUSE,Material_1
  glNormal3d(0.452267,0.000000,0.891883);
  glVertex3d(5.108326,1.737655,2.650969);
  glVertex3d(9.124107,-0.002484,0.614596);
  glVertex3d(9.124107,4.039649,0.614596);

glEnd();

или вывод "c"

Point3 Object1_vertex[] = {
       {5.108326,1.737655,2.650969},
       {9.124107,-0.002484,0.614596},
       {9.124107,4.039649,0.614596}};
long Object1_face[] = {
       3,0,1,2,
       3,3,4,5
       3,6,3,5};

Затем вы можете просто заменить части этого кода кодом Java.

P.s.Этот инструмент не является бесплатным, и вы можете использовать его только в течение 30-дневного пробного периода.Но конвертеры кода на c и xml доступны в течение этого периода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top