【问题标题】:Is there a way to import a 3D model into Android?有没有办法将 3D 模型导入 Android?
【发布时间】:2010-09-17 06:57:39
【问题描述】:

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

【问题讨论】:

    标签: android 3d opengl-es


    【解决方案1】:

    这就是我要去的地方:

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

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

    【讨论】:

      【解决方案2】:

      您可以将其导出为 ASE 格式。 从 ASE,您可以手动或以编程方式将其转换为您的代码。 在 Android 中,您将需要顶点作为顶点数组和面作为索引。 不要忘记你必须设置

      gl.glFrontFace(GL10.GL_CCW);
      

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

      【讨论】:

      • 谢谢,这与我所做的非常接近 - 我使用了 OFF 和 Blonder。
      【解决方案3】:

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

      不过,这方面的具体资源可能有限。 3ds 是一种专有格式,因此第 3 方加载器供应不足,而且大多是逆向工程。其他格式(例如搅拌机或牛奶形状)更开放,您应该能够相当容易地找到在 java 中为它们编写加载程序的详细信息。

      【讨论】:

        【解决方案4】:

        你试过安卓版的 min3d 吗?它支持 3ds max、obj 和 md2 模型。

        【讨论】:

        【解决方案5】:

        不确定具体是 Android,但一般来说,您需要 3DS Max 中的脚本手动写出您需要的模型格式。

        至于Android是否存在,我不知道。

        【讨论】:

          【解决方案6】:

          您还可以使用 3D 对象转换器

          转换 3DS MAX 模型

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

          此工具可以将3ds对象转换为text\xml格式或c代码。 请注意,该工具不是免费的。您可以尝试 30 天的试用期。 'C' 代码和 XML 转换器可用。

          'c' OpenGL 输出示例:

          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 代码中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-18
            • 2012-01-23
            • 2020-03-24
            • 2022-10-18
            • 2019-04-16
            相关资源
            最近更新 更多