web-dev-qa-db-fra.com

Existe-t-il un moyen d'importer un modèle 3D dans Android?

Est-il possible de créer un modèle 3D simple (par exemple dans 3DS MAX) puis de l'importer sur Android?

53
Maciej Gryka

Voilà où je suis arrivé:

  • J'ai utilisé APIDemos de Google comme point de départ - il y a des cubes en rotation, chacun spécifié par deux tableaux: les sommets et les indices.
  • J'ai construit mon modèle à l'aide de Blender et je l'ai exporté en tant que fichier OFF - c'est un fichier texte qui répertorie tous les sommets, puis les faces en termes de ces sommets (géométrie indexée)
  • Ensuite, j'ai créé une application C++ simple qui enlève cela et l'écrit sous la forme de deux XML contenant des tableaux (un pour les sommets et un pour les index)
  • Ces fichiers XML sont ensuite copiés dans res/values ​​et de cette façon, je peux affecter les données qu'ils contiennent à des tableaux comme celui-ci:
    int vertices[] = context.getResources().getIntArray(R.array.vertices);
  • Je dois également modifier manuellement le nombre de visages à dessiner ici: gl.glDrawElements(GL10.GL_TRIANGLES, 212*6, GL10.GL_UNSIGNED_SHORT, mIndexBuffer); - vous pouvez trouver ce nombre (212 dans ce cas) en haut du fichier OFF

Ici vous pouvez trouver ma page de projet, qui utilise cette solution: projet Github> vsiogap3d

38
Maciej Gryka

vous pouvez l'exporter au format ASE. depuis ASE, vous pouvez le convertir en votre code manuellement ou par programme. Vous aurez besoin d'un sommet pour le tableau de sommets et de faces pour les indices dans Android. n'oubliez pas que vous devez régler

gl.glFrontFace(GL10.GL_CCW);

car 3ds max par défaut est dans le sens antihoraire.

12
R0b3rt2

Cela devrait être possible. Vous pouvez avoir le fichier en tant que fichier de données avec votre programme (et en tant que tel, il sera poussé sur l'émulateur et empaqueté pour l'installation sur un périphérique réel). Ensuite, vous pouvez écrire un chargeur et une visionneuse de modèle dans Java en utilisant les bibliothèques Android et GLES pour afficher le modèle).

Les ressources spécifiques à ce sujet sont cependant probablement limitées. 3ds étant un format de propriété, les chargeurs tiers sont en quantité insuffisante et sont pour la plupart rétroconçus. D'autres formats (tels que blender ou milkshape) sont plus ouverts et vous devriez pouvoir trouver des détails sur l'écriture d'un chargeur pour eux dans Java assez facilement.

6
workmad3

Avez-vous essayé min3d pour android? Il prend en charge les modèles 3ds max, obj et md2.

6
mrYogi

Je ne sais pas exactement Android spécifiquement, mais en général, vous avez besoin d'un script dans 3DS Max qui écrit manuellement la mise en forme dont vous avez besoin à partir du modèle.

Quant à savoir s'il existe pour Android ou non, je ne sais pas.

3
Guvante

Vous pouvez également le faire avec 3D Object Converter

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

Cet outil peut convertir un objet 3ds au format texte\xml ou code c.

Exemple de sortie 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();

ou sortie "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};

Ensuite, vous pouvez simplement remplacer des parties de ce code par Java code.

P.s. Cet outil n'est pas gratuit et vous ne pouvez l'utiliser que pendant une période d'essai de 30 jours. Mais le code "c" et les convertisseurs xml sont disponibles pour cette période.

2
Ievgen Naida