C ++のWavefront * .objローダー


7

OpenGL(SDL経由)とC ++(Visual Studios 2010 Professional経由)を使用してゲームを作成しています。ゲーム中は3Dキャラクターアニメーションを使用します。すべての3Dモデル(地形を除く)にwavefront * .objファイルを使用したいと思います。キャラクターは、250〜500フレーム(歩行、ランニング、全力疾走、ジャンプ、しゃがみ、這うなど)で、滑らかな動き(リアル)を持っている必要があります。md2またはmd3を使用したいのですが、使用する3Dモデリング/アニメーションツール(Blender 3D 2.57)はどちらもサポートしていません。ゲームはWindowsでのみ実行されます。

私が必要としているのは、アニメーションをサポートする小さくてパワフルな* .objローダーとパーサーです。C ++で記述され、SDLで使用できる必要があります。

ありがとう

Blenderがエクスポートできるすべてのファイル形式を確認した後...デフォルトのキューブをエクスポートすると、最小のファイル形式が生成されるため、3DSを使用することにしました。3DSを推奨してくれて@Danielに感謝!


グーグルしましたか?Libobjが思い浮かびます。
減速

.objがアニメーションをサポートしていますか?

@Christian Rau:コアではありませんが、アニメーションのすべてのフレームを個別の.OBJファイルとしてエクスポートできます。
アミールザデー

回答:


5

OBJはアニメーションをサポートしていません。詳細については、こちらをご覧ください。

準拠したOBJローダーには、lib-objが頭に浮かびます。

あなたは自家製にしたい、場合、ファイルを確保することができる唯一の三角形が含まれています。クワッドなどはなく、OBJの解析は任意です(テキストのみです!):

        char prefix[10] = {0};
        stream >> prefix;

        switch (prefix[0]) {
            case 'v' : {
                switch (prefix[1]) {
                    case 't' : {} break; // texcoords
                    case 'n' : {} break; // normals
                    default : { // points
                        float x, y, z;
                        stream >> x >> y >> z;
                        // put in a mesh etc
                    }
                }
            } break;
            case 'f' : {
                unsigned short a, b, c;
                stream >> a >> b >> c;

                // etc
            } break;
            default : {} // skip
        }
    }

疑問がある場合は、仕様を確認してください。


私はlib-objまたはhomebrewを使用しますが、本当にアニメーションが必要です。ブレンダー2.57のmd2またはmd3ファイルエクスポーターを知っていますか?それらの1つを使用したい...!

md2またはmd3の理由はありますか?アニメーションをサポートできる他のフォーマットがあります。多分3DSフォーマットを見てください?
減速

MD2とMD3は尊敬されるフォーマットであり、非常に人気があります。私は3DSについて聞いたことがなく、それについて何も知りません。調べてみます...ありがとう。

2
@jsvcycling:あなたはどの10年間住んでいますか?MD2とMD3は、1990居住からのものです。最近では、OpenCTMなどの形式を使用しています。今日のモデルは、頂点の位置、法線、テクスチャ座標だけで構成されているわけではありません。頂点グループ、ボーンウェイト、追加の属性などがあります。MD2とMD3は単純にその仕事に適していません。
datenwolf 2011年

1
仕様にそれについての言及が見当たらないのですか?手動キーフレーミングはカウントされません。
減速

1

BlenderがWavefront用のエクスポーターを提供しているからといって、アニメーション全体も同様にエクスポートされるという意味ではありません。Wavefront OBJはアニメーションを知りません!

一方、md2 / md3のエクスポーターのアドオンを実装することは完全に可能であり、それらはすでに存在しています。

そうは言っても、私が理解しているように、アニメーションフレームごとにフルメッシュを保存するつもりです。これは、アニメーションを行うには非常に非効率的な方法です。より良いアプローチは、キーフレームを保存し、それらの間を補間することです。またはさらに良い:Blenderのアニメーションシステムと互換性のあるメッシュ変形システムを実装するか、Blenderとプログラムの両方に独自のメッシュ変形システムを実装します。単純なオブジェクト全体の変換のアニメーションは簡単です。Blenderのメッシュ変形は通常、組み込みのアーマチュアモディファイヤを介して行われますが、アーマチュアモディファイヤの代わりに独自のメッシュ変形オペレータを実装することは完全に可能です。

ATM現在ロードされているすべてのデータをJSON形式にダンプするエクスポート/インポートBlenderアドオンを開発しています。データブロックごとに1つの大きなファイルまたは単一のファイル。主なアイデアは、WebGLでそれを使用することです(つまり、Blender Game Engine用に最初に作成されたものをロードできるWebGLエンジンを実装します)。たぶん、JSONを使用してモデルと情報を保存することに興味があるかもしれません。


ええ、私はアニメーションにアーマチュアを使用することを言及するのを忘れていました...

しかし、OBJローダー、SDL、アニメーションの関連性はどこにあるのでしょうか。
減速

うーん... JSONはかなりよさそうだ!(C ++で)から選択できるさまざまなライブラリがたくさんあります!私はそれを使うかもしれません...

まあ、私はmpeg4ビデオが機能する方法のような何かをすることを考えていました、モデルのあるシーンから次のシーンへの移行で動かない部分は「コピーされます」になります。たとえば、シーン53で指だけを移動すると、シーン52の残りのボディがシーン53にコピーされます。このように機能する3Dファイル形式を知っている人はいますか?

1
@jsvcycling:この種のメッシュ置換アニメーションは、非常に非効率的です。常に大量のデータをGPUメモリにコピーする必要があり、多くの帯域幅を浪費しています。また、CPUは常にブックキーピングでビジー状態になります。あなたが本当にすべきことは、骨格アニメーションシステムを実装することです。頂点シェーダーを使用すると、これは非常に簡単です。すべてのボーンは、クォータニオンとニュートラル変換によって記述できます。四元数はユニフォームによって設定されます。シェーダーでは、ボーンヒラキーが評価され、各ボーンの変換が生成されます。この変換は、ウェイトを持つ頂点に適用されます。
datenwolf 2011年

1

.obj仕様はアニメーションをネイティブでサポートしていませんが、別個の.anmファイルを追加するだけで、素晴らしい骨のないアニメーションを取得できます。

見て:- -http //public.sanguinelabs.co.uk/expose/product.php id wastudio

これは、アニメーションを作成するための非常に使いやすいツールを提供し、プロジェクトでアニメーションモデルをすばやく動作させることができるオープンソースモデルライブラリ(OpenGL用)も提供します。

注:私はWavefront Animation Studioとlibwavefrontの開発者です。改善点やバグがありましたら、メールでお気軽にお問い合わせください。このソフトウェアは、現在利用可能な複雑なツールやライブラリを使用してアニメーションを作成および表示するのが非常に面倒なので、大学時代に開発されました。


0

アニメーションのビットマップによく似ているため、求めるものに対する答えは* .objではありません(Blenderでエクスポートできますが、すべてのフレームを単一の* .objファイルとしてエクスポートするようにBlenderに指示する必要があります[効率的ではありません]アスペクト]、映画のように、それはフレームです)。あなたが本当に求めているのはコラーダです。assimpと呼ばれるメッシュローダーがあり、100万メッシュ形式のように読み込まれます(新しいエンジンに使用しています)。そして、*。3DSについてあなたが言ったことは、常に正しいとは限りません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.