2008-10-15 5 views

Répondre

33

C'est là que je suis arrivé à:

  • Je l'ai utilisé les APIDemos de Google comme point de départ - il y a des cubes rotatifs là-dedans, chacun spécifié par deux tableaux: sommets et indices.
  • J'ai construit mon modèle en utilisant Blender et l'ai exporté en tant que fichier OFF - c'est un fichier texte qui liste tous les sommets puis les faces en fonction de ces vertices (géométrie indexée)
  • Puis j'ai créé un simple C++ application qui enlève cette valeur et l'écrit comme 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 ainsi je peux assigner les données qu'ils contiennent à des tableaux comme ceci:
    int vertices[] = context.getResources().getIntArray(R.array.vertices);
  • J'ai également besoin de changer manuellement le nombre de faces à dessiner ici: gl.glDrawElements(GL10.GL_TRIANGLES, 212*6, GL10.GL_UNSIGNED_SHORT, mIndexBuffer); - vous pouvez trouver ce nombre (212 dans ce cas) sur le O fichier FF

vous pouvez trouver ici ma page de projet, qui utilise cette solution:

http://code.google.com/p/vsiogap3d/

3

Vous ne savez pas exactement sur Android, mais généralement vous avez besoin d'un script 3DS Max qui écrit manuellement le format dont vous avez besoin à partir du modèle. Quant à savoir si un existe pour Android ou non, je ne sais pas.

5

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 emballé pour l'installation sur un périphérique réel). Ensuite, vous pouvez écrire un chargeur de modèle et une visionneuse dans Java en utilisant les bibliothèques Android et GLES pour afficher le modèle.

Les ressources spécifiques à ce sujet sont probablement limitées cependant. 3ds est un format propriétaire, donc les chargeurs tiers sont en rupture de stock et la plupart du temps inversés. D'autres formats (tels que blender ou milkshape) sont plus ouverts et vous devriez pouvoir trouver des détails sur l'écriture d'un loader pour eux en java assez facilement.

11

vous pouvez l'exporter au format ASE. de ASE, vous pouvez le convertir manuellement ou par programmation. Vous aurez besoin de vertex pour le tableau vertices et de visages pour les index sous Android. n'oubliez pas que vous devez définir

gl.glFrontFace(GL10.GL_CCW); 

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

+1

Merci, c'est très proche de ce que j'ai fait - j'ai utilisé OFF et Blonder à la place. –

4

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

+0

Bon tutoriel sur cette lib: http://www.mat-d.com/site/tutorial-load-a-3d-obj-model-with-min3d-for-android/ – Evgeny

2

Vous pouvez le faire aussi avec 3D Object Converter

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

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

Exemple de sortie de gl ouvert '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 'c' Sortie

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 les pièces de ce code par le code java.

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

Questions connexes