# ufbx

![ufbx logo](https://ufbx.github.io/static/ufbx-cube.svg)### 🧩 ufbx — 単一ソースファイルの FBX ローダー

****ufbx****<span style="white-space: pre-wrap;"> は、単一のソースファイルで構成された FBX ローダーです。</span>  
<span style="white-space: pre-wrap;">このライブラリは、FBX ファイル形式を簡単に扱える </span>****ユーザーフレンドリーなインターフェース****<span style="white-space: pre-wrap;">を提供することを目的とし、必要に応じて </span>****高度な機能にも完全対応****しています。

---

### 特徴

- ****単一ファイル構成****：C99 / C++11 に対応した1つのソースファイルで完結
- ****堅牢なエラーハンドリング****：無効なファイルやメモリ不足などにも安全に対応
- ****型安全なAPI****：C++およびRustバインディングでは境界チェック付きスライスを使用
- ****徹底したテストとファジング（fuzzing）****<span style="white-space: pre-wrap;"> による高信頼性</span>

---

### 💾 ダウンロードと使用例

```c
ufbx_load_opts opts = { 0 }; // 任意設定、デフォルトを使う場合は NULL を渡す
ufbx_error error;            // 任意、エラーを無視する場合は NULL を渡す
ufbx_scene *scene = ufbx_load_file("my_scene.fbx", &opts, &error);
if (!scene) {
    fprintf(stderr, "読み込みに失敗しました: %s\n", error.description.data);
    exit(1);
}

// 読み込まれた `scene` を自由に利用できます。
// これはただのプレーンなデータ構造です！

// 例: シーン内のすべてのオブジェクトを列挙して表示
for (size_t i = 0; i < scene->nodes.count; i++) {
    ufbx_node *node = scene->nodes.data[i];
    if (node->is_root) continue;

    printf("オブジェクト: %s\n", node->name.data);
    if (node->mesh) {
        printf("→ メッシュ（%zu 面）\n", node->mesh->faces.count);
    }
}

ufbx_free_scene(scene);
```

---

### 💡 補足

<span style="white-space: pre-wrap;">上記コードをコンパイルすれば、任意の </span>`<span class="editor-theme-code">.fbx</span>`<span style="white-space: pre-wrap;"> ファイルを読み込み、ノード（オブジェクト）やメッシュ情報を列挙できます。</span>  
`<span class="editor-theme-code">scene</span>`<span style="white-space: pre-wrap;"> 構造体には、マテリアル、トランスフォーム、アニメーションなどの詳細情報も格納されています。</span>