¿Hay una manera de importar un modelo 3D en Android?
Pregunta
¿Es posible crear un modelo 3D simple (por ejemplo, en 3DS MAX) y luego importarlo a Android?
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
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.