Pregunta

¿Es posible crear un modelo 3D simple (por ejemplo, en 3DS MAX) y luego importarlo a Android?

¿Fue útil?

Solución

Ahí es donde llegué a:

  • He usado APIDemos de Google como punto de partida: hay cubos giratorios allí, cada uno especificado por dos matrices: vértices e índices.
  • Construí mi modelo usando Blender y lo exporté como archivo OFF: es un archivo de texto que enumera todos los vértices y luego las caras en términos de estos vértices (geometría indexada)
  • Luego creé una aplicación simple de C ++ que la quita y la escribe como dos XML que contienen matrices (una para vértices y otra para índices)
  • Estos archivos XML se copian a res / valores 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 que se dibujarán aquí: gl.glDrawElements (GL10.GL_TRIANGLES, 212 * 6, GL10.GL_UNSIGNED_SHORT, mIndexBuffer); - puedes encontrar eso número (212 en este caso) encima del archivo OFF

Aquí puede encontrar la página de mi proyecto, que utiliza esta solución: Proyecto Github > vsiogap3d

Otros consejos

puedes exportarlo a formato ASE. Desde ASE, puede convertirlo a su código de forma manual o programática. Necesitará vértice para la matriz de vértices y caras para los índices en Android. no olvides que tienes que configurar

gl.glFrontFace(GL10.GL_CCW);

porque el valor predeterminado de 3ds max es a la izquierda.

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

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

¿Has probado min3d para Android? Es compatible con los modelos 3ds max, obj y md2.

No estoy seguro sobre Android específicamente, pero en general necesita un script en 3DS Max que escriba manualmente el formato que necesita del modelo.

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

También puedes hacer esto con 3D Object Converter

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

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

Ejemplo de salida de gl 'c' abierta:

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

Entonces puede reemplazar partes de este código por código java.

P.s. Esta herramienta no es gratuita y puede usarla solo 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top