シンプルな 3D モデル (3DS MAX など) を作成し、それを Android にインポートすることはできますか?
6 に答える
それが私が到達した場所です:
- 私はGoogleのAPIDemosを出発点として使用しました。そこには回転する立方体があり、それぞれが頂点とインデックスの2つの配列で指定されています。
- 私はBlenderを使用してモデルを構築し、それをOFFファイルとしてエクスポートしました-これは、すべての頂点をリストし、次にこれらの頂点(インデックス付きジオメトリ)の観点から面をリストするテキストファイルです
- 次に、それをオフにして、配列を含む2つのXML(1つは頂点用、もう1つはインデックス用)として書き込む単純なC++アプリを作成しました。
- 次に、これらのXMLファイルがres / valuesにコピーされ、このようにして、それらに含まれるデータを次のような配列に割り当てることができます。
int vertices[] = context.getResources().getIntArray(R.array.vertices);
- また、ここで描画する面の数を手動で変更する必要があり
gl.glDrawElements(GL10.GL_TRIANGLES, 212*6, GL10.GL_UNSIGNED_SHORT, mIndexBuffer);
ます。-その数(この場合は212)はOFFファイルの上にあります。
ここに、このソリューションを使用する私のプロジェクトページがあります:Githubプロジェクト> vsiogap3d
ASE 形式にエクスポートできます。ASE から、手動またはプログラムでコードに変換できます。Android では、頂点配列の頂点とインデックスの面が必要になります。設定する必要があることを忘れないでください
gl.glFrontFace(GL10.GL_CCW);
3ds max のデフォルトは反時計回りであるためです。
Android用のmin3dを試しましたか?3ds max、obj、md2 モデルをサポートしています。
それは可能であるべきです。このファイルは、プログラムでデータ ファイルとして使用できます (そのため、エミュレーターにプッシュされ、実際のデバイスにインストールするためにパッケージ化されます)。次に、Android および GLES ライブラリを使用して Java でモデル ローダーとビューアーを作成し、モデルを表示できます。
ただし、これに関する特定のリソースはおそらく限られています。3ds は独自のフォーマットであるため、サードパーティのローダーは不足しており、ほとんどがリバース エンジニアリングされています。他の形式 (blender や milkshape など) はよりオープンであり、Java でそれらのローダーを作成する方法の詳細を簡単に見つけることができるはずです。
特に Android についてはわかりませんが、一般的に言えば、モデルから必要なフォーマットを手動で書き出す 3DS Max のスクリプトが必要です。
Android用が存在するかどうかはわかりません。
3D オブジェクト コンバーターで 3DS MAX モデルを変換することもできます
このツールは、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 コードに移行できます。