Hello World / plɹoM ollǝH

Programmers Live in Vain

DirectXでOBJファイル表示

DirectXOBJファイルを表示する。

f:id:dungeonneko:20150712015318p:plain

時間はかけたくないのでライブラリ3Dデータを使う。

こんな感じで簡単に読み込み処理が書ける。

#include "tiny_obj_loader.h"

void CreateBuffer(ID3D11Buffer** io_buf, UINT in_byteWidth, UINT in_bindFlags, const void* in_data)
{
    D3D11_BUFFER_DESC bd;
    ZeroMemory(&bd, sizeof(bd));
    bd.Usage = D3D11_USAGE_DEFAULT;
    bd.ByteWidth = in_byteWidth;
    bd.BindFlags = in_bindFlags;
    bd.CPUAccessFlags = 0;
    D3D11_SUBRESOURCE_DATA InitData;
    ZeroMemory(&InitData, sizeof(InitData));
    InitData.pSysMem = in_data;
    g_pd3dDevice->CreateBuffer(&bd, &InitData, io_buf);
}

void Load(const char* in_path)
{
    std::vector<tinyobj::shape_t> shapes;
    std::vector<tinyobj::material_t> materials;

    // OBJファイル読み込み
    std::string err = LoadObj(shapes, materials, in_path.c_str());
    if (!err.empty()) return;

    CreateBuffer(&g_vb, mesh.positions.size() * sizeof(float), D3D11_BIND_VERTEX_BUFFER, &mesh.positions[0]);
    CreateBuffer(&g_ib, mesh.indices.size() * sizeof(unsigned int), D3D11_BIND_INDEX_BUFFER, &mesh.indices[0]);
}

とりあえず自分で作ったテクスチャを貼れるようにしたい。