Existe uma maneira de importar um modelo 3D no Android?
Pergunta
É possível criar um modelo 3D simples (por exemplo, em 3DS MAX) e, em seguida, importá-lo para Android?
Solução
Isso é onde eu tenho que:
- Eu usei APIDemos do Google como um ponto de partida - há rotativas cubos de lá, cada um especificado por duas matrizes:. Vértices e índices
- Eu tenho construir meu modelo usando Blender e exportados como um arquivo OFF - é um arquivo de texto que lista todos os vértices e, em seguida, enfrenta em termos dessas vértices (geometria indexada)
- Em seguida, eu criei um aplicativo simples C ++ que leva que OFF e escreve-lo como dois XMLs contendo matrizes (um para vértices e um para índices)
- Esses arquivos XML são copiados para res / valores e desta forma eu posso atribuir os dados que eles contêm a matrizes como este:
int vertices[] = context.getResources().getIntArray(R.array.vertices);
- Eu também preciso alterar manualmente o número de faces a ser desenhado aqui:
gl.glDrawElements(GL10.GL_TRIANGLES, 212*6, GL10.GL_UNSIGNED_SHORT, mIndexBuffer);
- você pode encontrar esse número (212 neste caso) na parte superior do arquivo OFF
Aqui você pode encontrar minha página do projeto, que utiliza esta solução: projeto Github> vsiogap3d
Outras dicas
Você pode exportá-lo para o formato ASE. da ASE, você pode convertê-lo em seu código manualmente ou programaticamente. Você vai precisar de vértice de gama vértices e rostos para índices em Android. não se esqueça que você tem que definir
gl.glFrontFace(GL10.GL_CCW);
porque 3ds max padrão é anti-horário.
Deve ser possível. Você pode ter o arquivo como um arquivo de dados com o seu programa (e, como tal, será empurrado para o emulador e embalados para instalação em um dispositivo real). Em seguida, você pode escrever um carregador de modelo e espectador em java usando os Android e GLES bibliotecas para exibir o modelo.
recursos específicos sobre este são provavelmente limitada embora. 3DS é um formato de modo proprietry 3rd carregadoras partido são em quantidade muito baixo e na maior parte de engenharia inversa. Outros formatos (como liquidificador ou MilkShape) são mais abertos e você deve ser capaz de encontrar detalhes sobre como escrever um carregador para eles em java com bastante facilidade.
Você já tentou min3d para o Android? Ele suporta 3ds max, obj e MD2 modelos.
Não tenho certeza Android especificamente, mas em geral você precisa de um script em 3DS Max que escreve manualmente a formatação que você precisa a partir do modelo.
Quanto a saber se existir alguma para Android ou não, eu não sei.
Você pode fazer isso também com Objeto 3D Converter
Esta ferramenta pode converter 3ds objeto para texto \ formato XML ou código c.
Exemplo de gl aberto saída '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' output
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};
Em seguida, você pode simplesmente substituir as peças deste código por código java.
P.S. Esta ferramenta não é gratuito e você pode usá-lo apenas por um período experimental de 30 dias. Mas 'c' código e conversores XML está disponível para este período.