7

私は JOGL でゲームを書いており、ゲーム内のキャラクターを表現する必要があります。キャラクターの動きにはスケルタル アニメーションを使用する予定で、もちろんキャラクターはスキンされます。JOGL 用の適切なモデル ローダーが見つからないようなので、仕様などに基づいて自分でファイル タイプをロードする予定です。また、Blender を 3D モデラーとして使用する予定なので、そこにあるタイプが最適です。

どのファイルタイプを使用することをお勧めしますか? 。ブレンド?.x、.3ds、.md2/3/5、...?? ランダムなファイル形式を解読しなくてもローダーを記述できるように、明確に定義された形式が必要であり、前述の機能をサポートする必要があることを思い出してください。なぜそれを選んだのか、なぜそれが最適なのかについて、あなたが提供できる他の情報も非常に役に立ちます!

ありがとう!

編集: Blender MS3D エクスポーターを作成します。完成したら、ここに投稿します

その間、以下のマーク付きの回答を参照してください。しかし、それ以来、さらに多くのことが行われています。私がやっていることでこれを更新し続けるつもりはありませんが、基本的には jMonkey Engine を見つけました。これには、手書きで書き始めた ms3d インポーターとその他のサブシステムが既に含まれています。シーングラフのようなものがありますが (それが私が Java3D を避けていた理由です)、Java3D と力を合わせることが私の最善の策だと思います。

4

4 に答える 4

3

ジオメトリだけで生活できる場合、または独自のテクスチャリングを処理する準備ができている場合は、.objがおそらく最も簡単で広くサポートされている3Dファイル形式です。これは基本的に3DモデリングのASCIIです。

そうでなければ私はvrmlに向かう傾向があります。それは明確に定義されており、開始するためのコードが少なくともいくつかあります。自由に利用できるコードを使用して、vrmlモデルをjava3Dに正常にロードしました。ネイティブファイルのサイズは大きくなる傾向がありますが、圧縮形式を使用することで解決できます。

.3dsはお勧めしません。この形式のリーダーを扱ったのはDelphiPascalだけでした。これは、乱雑で、明確に定義されておらず、処理が難しく、多くの「バリエーション」がある傾向があります。そのため、リーダー処理モデルをからエクスポートすることができました。 3D-MAX自体は問題なく、3DS形式であると主張しているが、適切に形成されていない他のパッケージの多くのモデルを拒否しました。

追加:Java3D APIとO'Reillyの本「 Javaでのキラーゲームプログラミング」をご覧になることをお勧めします。Java3Dルートをたどらなくても、多くの質問に答える可能性があります。

于 2009-02-25T12:33:37.583 に答える
2

まず、他の2人の回答者に感謝します。また、basszero、blend ファイルについては正しかったので、最初にウィキペディアを確認する必要がありました。これは、Blender のメモリのほとんど役に立たないバイナリ ダンプです。

この質問を書いた直後に、私は OBJ ローダーを作成することにしました。1) 3D ファイル形式をロードする経験が得られ、2) よく使用される適切な形式であると同時に、ロードも簡単であると思われるためです。オブジェクトとグループの違いを実際に知らず、マテリアルについてもあまり知らなかったことに気がついたので、最終的には素晴らしい決断でした。これらの 3D 構造のコードを確立するのに役立ちました。

どちらの回答も、XML ベースの形式を推奨しています。XML 形式は必要ありません。これが XML にとって適切な場所であるとは思えません。これらの形式が作成されたのは、XML が柔軟で普遍的であり、スキーマを簡単に作成できるためだと思いますが、それは私が探しているものではありません。高速にロードできる形式が必要で (XML は相対的に言えばそうではありません)、柔軟性や人間が読める形式である必要はなく、XML ライブラリに依存するのではなく、インポーターを作成できるものが必要です。basszero は、「XML であることを犠牲にして」とさえ言っていますが、彼は完全に正しいです。負担に値するとは思えないコストです。

OBJ ローダーが完成しました。私はそれを実際のモデル クラスから分離し、MeshFactory インターフェースを使用して実装したので、必要に応じて将来別のローダーを作成できるようになりました... これが計画です。私は過去数日間、さらに調査を行っており、ms3d 形式に決定しました。

ms3d 形式は、スケルタル リギング (ジョイント) とキーフレーム スケルタル アニメーションをサポートし、さらにテクスチャ マップとアルファ マップをサポートします。さらに、人間が読めるタグやラベルなどを使用して (XML や OBJ のように) スペースを無駄にしない、コンピューターで読み取りやすいバイナリ形式です。

残念ながら、Blender には (動作する) ms3d エクスポート スクリプトがないため、自分でスクリプトを作成します。幸いなことに、これは難しいプロセスではなく、Blender のドキュメントを読み、他のエクスポーターを例として使用することができます。Python をブラッシュアップする必要がありますが、それ以外の場合は、他のスクリプトで見たものからすると、非常に簡単に思えます。

Java 側は簡単なはずです。実際には、ms3d の方が構造化されているため、OBJ 形式よりもさらに簡単です。ms3d 形式の仕様を C スタイル (天才!) でオンラインで見つけたので、それらは非常に自明であり、形式についてこれ以上質問する必要はありません。この仕様に基づいて実装しますが、後で独自のバリエーションを実装する可能性があります。これは、独自のインポーターとエクスポーターを作成することの優れた点です。必要に応じてフォーマットを変更できます。

全体として、これが最善の解決策であると判断しました。

そして、basszero さん、あなたの言うことはまったく正しいです。私の OBJ ローダーから見たとおりです。まったく別の獣です。」

Cruachan: 私には Java3D はありません。JOGL を使い続けています。彼がモデルをどのようにロードしたかは覚えていませんが、私は実際にその本を所有しています (現時点ではアクセスできません)。私が使用する予定のものではありません.申し訳ありません!

-くる病

于 2009-03-10T23:57:18.907 に答える
1

.blendは、ほとんどの場合、blenderからのメモリ構造のバイナリダンプであり、blenderの外部ではあまり役に立ちません。Blenderを使用してモデル化しますが、別の形式にエクスポートします。

少し冗長かもしれませんが、Colladaが3D情報を非常にうまくまとめていると聞きました(XMLであるという犠牲を払って)。利点は、JAXBを通過できる適切なスキーマ定義が存在する可能性があり、その結果、完全なパーサーが作成され、作業が行われないことです。

.md*形式も良い代替手段になる可能性があります。それらはiDエンジン(q1、q2、q3、q4、doom3)からのものであり、文書化されています。また、アニメーションシーケンスも含まれています。

すべてを読み込んだら、データの編成(ディスプレイリスト、テクスチャ、頂点配列、頂点バッファなど)とレンダリングはまったく別の獣になります。

于 2009-02-25T12:41:41.090 に答える
0

メッシュ、テクスチャ、スケルトン、アニメーションなど、.blend ファイルからあらゆる情報を抽出できるオープン ソースの .blend ファイル リーダーがあります。

ここで Ogre と Irrlicht を使用したいくつかの例を参照してください: http://gamekit.googlecode.com

于 2009-12-24T17:11:25.147 に答える