OBJ Model

OBJ Model を DirectX Win8 仕様に変換して描画します。

コンバータとサンプルモデルを圧縮形式で提供します。
OBJ Model の Down Load

前田稔(Maeda Minoru)の超初心者のプログラム入門

OBJ Model のコンバート

  1. OBJ Model を専用のコンバータで DirectX Win8 仕様に変換して描画します。
    DirectX9 までは、標準で X-FILE を入力する機能がサポートされていました。
    DirectX10 では、X-FILE が使えなくなった代わりに sdkmesh が使えるようになりました。
    ところが Win8 では、このような標準モデルは存在しないようで、コンバータを使って変換する必要があるようです。
    そこでサンプルプログラムでも紹介されている OBJ モデルをコンバートして描画してみましょう。
    コンバータはサンプルをコンパイルすれば得られるのですが、OBJ のサンプルモデルと共に圧縮形式で提供します。
    適当なフォルダに展開して使用して下さい。
  2. OBJ モデルを DirectX Windows8 標準形式に変換するコンバータの説明です。
    tool-obj2vbo.exe が Convert プログラムです。
    簡単な OBJ モデルをサンプルとして格納しています。
    DOS プロンプトから起動してコンバートして下さい。
    実行時に警告が出ても、vbo 形式のファイルが作成出来れば、一応OKです。
    vbo ファイルが、これから作成するプログラムの入力(3Dモデル)になります。
    拡張子が .vbo は Microsoft が多目的に使用するファイル形式で、一時ファイルなどに使われるようです。
    tool-obj2vbo.exe では OBJ のマテリアルファイル(.mtl)や画像ファイルは関係しません。
    また法線ベクトルが無くても、自動的に計算してくれるようです。
    「c:\>tool-obj2vbo.exe」で起動すると、パラメータの説明が表示されます。
  3. tool-obj2vbo.exe の使い方です。
    【例1】cube.obj を vbo 形式に変換します。
    c:\>tool-obj2vbo.exe cube.obj cube.vbo
    【例2】cup.obj を vbo 形式に変換します。
    c:\>tool-obj2vbo.exe cup.obj cup.vbo

vbo の描画

  1. OBJ Model を変換した vbo 形式のモデルを描画します。
    まず最初にテクスチャが使われていないモデルを描画してみましょう。
    Direct3D App をベースにしてプロジェクトを作成します。
    "cube.vbo" をプロジェクトに格納して加えて下さい。
    プロパティからリソースに設定します。
  2. モデルは BasicLoader の LoadMesh() メソッドを使ってロードします。
    "cube.vbo" をロードすると、m_vertexBuffer, m_indexBuffer, m_indexCount が設定されます。
    Direct3D App で定義されていたモデルや CreateCube() は不要になるので削除して下さい。
        loader->LoadMesh("cube.vbo", &m_vertexBuffer, &m_indexBuffer,
            nullptr, &m_indexCount);
        
  3. ロードされたモデルは「頂点座標と法線ベクトルとテクスチャ座標」で構成されています。
    法線ベクトルやテクスチャ座標が定義されていないときは、プログラムで計算してくれます。
    例え、テクスチャを使わなくても、頂点の形式はこれに合わせなければなりません。
    struct VertexPosition
    {
        DirectX::XMFLOAT3 pos;
        DirectX::XMFLOAT3 norm;
        DirectX::XMFLOAT2 tex;
    };
    
    法線ベクトルBasic LoaderTexture Cube などを参考にして、プログラムを完成させて下さい。
  4. うまく描画出来たら、他の cube モデルも試してみましょう。
    cube.obj は頂点座標だけですが、cube_norm は法線ベクトルも設定されています。
    さらに cube_texture には、テクスチャ座標も設定されています。
    テクスチャを使わないで描画すると、どれも同じように描画されます。
        // モデルのロード
        loader->LoadMesh("cube.vbo", &m_vertexBuffer, &m_indexBuffer,
            nullptr, &m_indexCount);
    
        loader->LoadMesh("cube_norm.vbo", &m_vertexBuffer, &m_indexBuffer,
            nullptr, &m_indexCount);
    
        loader->LoadMesh("cube_texture.vbo", &m_vertexBuffer, &m_indexBuffer,
            nullptr, &m_indexCount);
    

テクスチャを使う

  1. 今度はテクスチャを貼り付けて描画してみましょう。
    プログラムは Basic Loader を参考にして下さい。
  2. コンバータは、テクスチャ座標を設定するだけで、実際に使われる画像は LoadTexture() でロードします。
    圧縮フォルダに格納されている "ayu.jpg" をロードして、"cube_texture.vbo" を描画してみて下さい。
    キューブに ayu のテクスチャが貼り付けらたでしょうか。
  3. 今度は "earth.jpg" をロードして、"cup.vbo" を描画してみて下さい。
    カップに地球のテクスチャが貼り付けられます。
  4. このプログラムの難点は、テクスチャ画像が一枚しか使えないことと、ポリゴンに色が設定できないことです。
    近いうちに、これらの課題をクリアした描画プログラムを作成したいと思っています。 (^_^;)
    OBJ モデルの詳しい説明は Jave のページを参照して下さい。

超初心者のプログラム入門(DirectX Store)