2009-02-25 6 views
7

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

私はどのファイルタイプを使用することをおすすめしますか? 。ブレンド? .x、.3ds、.md2/3/5、...?私はいくつかのランダムなファイル形式をdeobfuscateせずにローダーを書くことができるように明確な定義された形式のものを覚えていることを覚えておいて、上記の機能をサポートする必要があります。なぜあなたがそれを選んだのか、なぜそれが最善であるのかについて、あなたが与えることができる他の情報は、とても助けになるでしょう!

ありがとうございます!

EDIT: 私は、Blender MS3Dエクスポータを作成します。私が終わったら、それを投稿しますhere

一方、以下の私の著名な回答を参照してください。それ以来多くのことが起こっています。私はこれを私がやっていることで更新するつもりはないが、基本的に私はjMonkey Engineを見つけた。それはすでにms3dインポーターと手書きを始めた他のサブシステムを持っている。シーングラフのもの(Java3Dを避けていた理由)にもかかわらず、私はそれが力に加わることが私の最善の策だと思うので、それが私の目的です。

答えて

2

まず、他の2人の回答者に感謝します。また、basszeroはブレンドファイルについてあなたが正しいと思っていました。そして、私はWikipediaを最初にチェックしておきましょう! 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フォーマットよりも簡単です。私は、Cスタイル(天才!)でms3d形式のオンラインのspecificationsを見つけたので、彼らは信じられないほど自明であり、私はその形式についてさらに質問しません。私は後で自分のバリエーションを実装するかもしれませんが、私の実装をこの仕様から外すことになります。それは自分の輸入者と輸出業者を書いていることの大事なことですが、私が適合しているように書式を変更することができます。

私はこれが最良の解決策であると判断しました。

OBJローダーから見たように、basszeroさんは、「私がOBJローダから見たように、一度読み込んだら、データのリスト(表示リスト、テクスチャ、頂点配列、頂点バッファなど)レンダリングはまったく別の獣です」

Cruachan:私のためのJava3Dは、私はJOGLに固執しています。私は実際に彼がモデルをロードした方法を覚えていませんが、実際にはその本を所有しています(ただし、現時点ではアクセスできません)。しかし、私は彼がJava3D形式のローダーを自動的に使用することを確信しています。私が使用する予定のものではありません...申し訳ありません!

-Ricket

3

ジオメトリのみで生きることができ、独自のテクスチャリングを処理できるようになっている場合は、おそらく最も簡単で広くサポートされている3Dファイル形式の.objです。基本的に3Dモデリングのアスキーです。

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

.3dsはおすすめしません。私がこのフォーマットのために読者を扱ったのは、Delphi Pascalで、厄介で、定義が難しく、処理が難しく、さまざまなバリエーションを持つ傾向がありました。 3D-MAX自体は、3DS形式であると主張されていたが正しく構成されていなかった他のパッケージから、多くのモデルを拒否した。

追加:またJava3D APIとO'Reillyの本Killer Game Programming in Javaを見てみることをお勧めします.Java3Dのルートをダウンしなくても、多くの質問に答える可能性があります。

+0

私は.objファイルについてとてもよく分からない、それは非常に非効率です。人間が読める形式は必要ありません。私はvrmlを大きくするものを見て、おそらく私自身のそれを調整したバージョンを作るでしょう、ありがとう! 誰ですか? :) – Ricket

+0

Objは非効率ですが、それは非常に標準的です。また、Java3D、特にO'Reillyの「Kill​​er Game Programming in Java」を参照してください。これは多くの質問に答えることができます。 – Cruachan

1

私はblenderが主にblenderのメモリ構造のバイナリダンプだと信じています。モデリングにはBlenderを使用しますが、別のフォーマットに書き出すことができます。

少し冗長かもしれませんが、私はColladaが3D情報を非常にうまくまとめたと聞いたことがあります。 JAXBを通過できる適切なスキーマ定義がある可能性があるということは、JAXBを通過することができ、結果として完全なパーサが得られることです。

.md *形式も良い選択肢です。それらはiDエンジン(q1、q2、q3、q4、doom3)からのもので、文書化されています。アニメーションシーケンスも含まれています。

すべての読み込みが完了したら、データ(表示リスト、テクスチャ、頂点配列、頂点バッファなど)の整理とレンダリングは全く別の獣です。

0

すごい迫力、男は、あなたがそれを終えるときms3d輸出をリリースするつもりですか?もしそうなら、どうやって来るのですか?私は実際にアニメーションのために働く輸出業者に手を差し伸べる必要があり、Fragmotionが使用するのはあなたのやり方が私の最後の希望であるように見えます。

+0

私はまだブレンダー輸出業者をコーディングし始めていません。先週、私の研究は私をとても忙しくしていました。どうすればいいですか:http://rickyc.org/ms3dexporter/を見守ってください。終了したら、そこに置いておきます。 – Ricket

+0

計画に似ています。私はそれを見守ります。 –

+0

私は最終的にMS3D輸出者の書き込みを始めました。私はそれを数日以内にやるべきです。私はそれを今まで戻ってきたことを知っています(今は3ヶ月後です...)。しかし、あなたがまだそれを必要としているなら、私はそれを公開します。私はまた、あなたがこのメッセージを受け取っていないかもしれないことを知っているので、そのリンクとそれに関する情報でリンクを更新します。 – Ricket

0

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

ここオーガとイルリヒトを使用して、いくつかの例を参照してください: http://gamekit.googlecode.com

関連する問題