2008-10-15 47 views

Respuesta

33

Ahí es donde llegué a:

  • He usado APIDemos de Google como punto de partida - hay cubos giratorios de allí, cada uno especificado por dos matrices: vértices y los índices.
  • Construí mi modelo usando Blender y lo exporté como archivo OFF - es un archivo de texto que muestra todos los vértices y luego caras en términos de estos vértices (geometría indexada)
  • Luego creé un simple C++ aplicación que lo desactiva y lo escribe como dos XML que contienen matrices (uno para vértices y uno para índices)
  • Estos archivos XML se copian a res/values ​​y de esta manera puedo asignar los datos que contienen a matrices como esta:
    int vertices[] = context.getResources().getIntArray(R.array.vertices);
  • También necesito cambiar manualmente el número de caras para dibujar aquí: gl.glDrawElements(GL10.GL_TRIANGLES, 212*6, GL10.GL_UNSIGNED_SHORT, mIndexBuffer); - puede encontrar ese número (212 en este caso) en la parte superior de la O FF archivo

Aquí puede encontrar mi página del proyecto, que utiliza esta solución:

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

3

No estoy seguro acerca de Android específicamente, pero en general necesita una secuencia de comandos en 3DS Max que escribe manualmente el formato que necesita del modelo.

En cuanto a si existe para Android o no, no sé.

5

Debería ser posible. Puede tener el archivo como un archivo de datos con su programa (y como tal, se insertará en el emulador y se empaquetará para su instalación en un dispositivo real). Luego puede escribir un modelo de cargador y visor en Java usando las bibliotecas Android y GLES para mostrar el modelo.

Sin embargo, los recursos específicos sobre esto probablemente sean limitados. 3ds es un formato de propiedad, por lo que los cargadores de terceros tienen un suministro escaso y, en su mayoría, ingeniería inversa. Otros formatos (como Blender o Milkshape) son más abiertos y debería ser capaz de encontrar detalles sobre cómo escribir un cargador para ellos en Java con bastante facilidad.

11

puede exportarlo al formato ASE. de ASE, puede convertirlo a su código de forma manual o programáticamente. Necesitarás vértices para vértices y caras para índices en Android. No olvide que usted tiene que fijar

gl.glFrontFace(GL10.GL_CCW); 

porque por defecto 3ds max es hacia la izquierda.

+1

Gracias, eso está muy cerca de lo que hice, he usado OFF y Blonder en su lugar. –

4

Ha intentado min3d para android? Admite los modelos 3ds max, obj y md2.

+0

Buen tutorial sobre esta lib: http://www.mat-d.com/site/tutorial-load-a-3d-obj-model-with-min3d-for-android/ – Evgeny

2

Usted puede hacer esto también con el convertidor de objetos 3D

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

Esta herramienta puede convertir 3ds objeto a formato XML de texto \ o código c.

Ejemplo de salida de 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(); 

o 'c' de salida

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}; 

A continuación, puede simplemente reemplazar partes de este código por código java.

P.s. Esta herramienta no es gratuita y solo puede usarla durante un período de prueba de 30 días. Pero el código 'c' y los convertidores xml están disponibles para este período.

Cuestiones relacionadas