web-dev-qa-db-ja.com

3DモデルをAndroidにインポートする方法はありますか?

単純な3Dモデルを作成して(たとえば3DS MAXで)、Androidにインポートすることは可能ですか?

53
Maciej Gryka

それが私が得た場所です:

  • GoogleのAPIDemosを開始点として使用しました-そこには回転するキューブがあり、それぞれが頂点とインデックスの2つの配列で指定されています。
  • Blenderを使用してモデルを作成し、OFFファイルとしてエクスポートしました。これは、すべての頂点をリストし、これらの頂点(インデックス付きジオメトリ)に関して面するテキストファイルです。
  • 次に、それをオフにして、配列を含む2つのXML(頂点用とインデックス用)として書き込む簡単なC++アプリを作成しました。
  • これらの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プロジェクト> vsiogap3d

38
Maciej Gryka

aSE形式にエクスポートできます。 ASEから、手動またはプログラムでコードに変換できます。 Androidの頂点配列にはインデックス、インデックスには面が必要です。あなたが設定する必要があることを忘れないでください

gl.glFrontFace(GL10.GL_CCW);

3ds maxのデフォルトは反時計回りだからです。

12
R0b3rt2

可能になるはずです。ファイルをプログラムのデータファイルとして使用できます(そのため、エミュレータにプッシュされ、実際のデバイスにインストールするためにパッケージ化されます)。次に、JavaでAndroidとGLESライブラリを使用してモデルを表示します。

ただし、これに関する特定のリソースはおそらく制限されています。 3dsは所有権の形式であるため、サードパーティのローダーは供給不足で、ほとんどがリバースエンジニアリングされています。他のフォーマット(ブレンダーやミルクシェイプなど)はよりオープンであり、Javaでかなり簡単にローダーの記述に関する詳細を見つけることができるはずです。

6
workmad3

Android向けにmin3dを試しましたか? 3ds max、obj、md2モデルをサポートしています。

6
mrYogi

Androidについて具体的にはわかりませんが、一般的に言えば、モデルから必要なフォーマットを手動で書き出す3DS Maxのスクリプトが必要です。

Androidかどうかにかかわらず、存在するかどうかはわかりません。

3
Guvante

3D Object Converterでもこれを行うことができます

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

このツールは、3dsオブジェクトをtext\xml形式またはcコードに変換できます。

Open gl '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コンバーターを使用できます。

2
Ievgen Naida