代码之家  ›  专栏  ›  技术社区  ›  Maciej Gryka

有没有办法将3D模型导入Android?

  •  50
  • Maciej Gryka  · 技术社区  · 17 年前

    是否可以创建一个简单的3D模型(例如在3dsmax中),然后将其导入Android?

    6 回复  |  直到 8 年前
        1
  •  36
  •   Pragati Singh    8 年前

    这就是我要去的地方:

    • 我使用了谷歌的apidemos作为起点——里面有旋转的立方体,每个立方体由两个数组指定:顶点和索引。
    • 我已经使用Blender构建了我的模型并将其导出为非文件-它是一个文本文件,列出了所有顶点,然后根据这些顶点(索引几何体)列出了面。
    • 然后我创建了一个简单的C++应用程序,它将它作为两个包含数组的XMLs(一个用于顶点,一个用于索引)。
    • 然后将这些XML文件复制到res/values,这样我可以将它们包含的数据分配给类似这样的数组:
      int vertices[] = context.getResources().getIntArray(R.array.vertices);
    • 我还需要手动更改要在此处绘制的面数: gl.glDrawElements(GL10.GL_TRIANGLES, 212*6, GL10.GL_UNSIGNED_SHORT, mIndexBuffer); -你可以在档案外找到那个号码(本例中是212)。

    您可以在这里找到我的项目页面,它使用以下解决方案: Github project > vsiogap3d

        2
  •  12
  •   Marco A.    9 年前

    您可以将其导出为ASE格式。 从ASE,您可以手动或通过编程将其转换为代码。 在Android中,顶点数组需要顶点,索引需要面。 别忘了你必须设定

    gl.glFrontFace(GL10.GL_CCW);
    

    因为3ds Max默认值是逆时针的。

        3
  •  6
  •   workmad3    17 年前

    这应该是可能的。您可以将该文件作为数据文件与您的程序一起使用(因此,它将被推送到模拟器上并打包以安装到实际设备上)。然后,可以使用Android和GLS库编写Java中的模型加载器和查看器来显示模型。

    不过,这方面的具体资源可能有限。3DS是一种专有格式,因此第三方装载机供应不足,大多为逆向工程。其他格式(如搅拌器或MILKFILE)更为开放,您应该能够很容易地找到在Java中为它们编写加载器的细节。

        4
  •  6
  •   brian d foy    14 年前

    你试过Android版的min3d吗?它支持3dsmax、obj和md2模型。

        5
  •  3
  •   Guvante    17 年前

    不确定具体的安卓系统,但一般来说,您需要一个在3dsmax中手动写出您需要的模型格式的脚本。

    至于安卓系统是否存在,我不知道。

        6
  •  2
  •   Ievgen    13 年前

    你也可以用 三维对象转换器

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

    此工具可以将3DS对象转换为文本\xml格式或C代码。

    打开总账“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();
    

    或“C”输出

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

    然后你可以用Java代码替换部分代码。

    另外,这个工具不是免费的,您只能在30天的试用期内使用。但是“c”代码和XML转换器在这段时间内是可用的。