Есть ли способ импортировать 3D-модель в Android?
Вопрос
Можно ли создать простую 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-объектов
Этот инструмент может конвертировать объект 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 доступны в течение этого периода.