Unity-like DirectX framework for learning purposes. ※ This project is primarily documented in Japanese.
UniDxは、UnityライクなDirectX用ゲームフレームワークです。
用途
- DirectX 入門(特にUnity経験者)
- ゲームフレームワークの構造理解に
- フレームワーク作成の参考・たたき台として
特徴
GameObject, Component, Transform, Behaviour など、Unityでおなじみの階層構造
- 簡易的な物理計算をサポート
- glTF形式の3Dモデルが使用可能
- 比較的コンパクトで理解しやすいコード
動作環境
- Windows 10/11
- Visual Studio 2022
- DirectX 11
- C++20
依存ライブラリ
- DirectXTK
- DirectXTex
- tinygltf
サンプル実行手順
準備
このリポジトリは外部ライブラリを Git submodule として管理しています。
clone 後、以下のコマンドをはじめに一度、実行してください。
git submodule update --init --recursive
または、このリポジトリ自体を以下のコマンドでcloneしても構いません。
git clone --recursive https://github.com/nittamas/UniDx.git
実行
/samples/UniDxSamples.sln を Visual Studio 2022 で開いてください。
ソリューションエクスプローラーで、Sample1_Sphereを右クリックして、 [スタートアップ プロジェクトに設定]を選択してください。
メニューから[デバッグ]-[デバッグの開始]を選択してください。
Unityとの比較
座標系
- 座標系: Unity と同じ左手座標系(Y-up、Z-forward)
- 行列レイアウト: Row-Major(DirectX標準)
行列・クォータニオン演算の順序
Vector3 worldPos = localPos * worldMatrix;
Vector3 direction = localDir * rotation;
シェーダー内での行列演算
// UniDx (HLSL)
float4 worldPos = mul(float4(localPos, 1), world);
float4 clipPos = mul(worldPos, view);
clipPos = mul(clipPos, projection);
// Unity (ShaderLab)
// float4 clipPos = mul(UNITY_MATRIX_MVP, float4(localPos, 1));
※ UniDx は Unity Technologies および Microsoft と関係のない、独立したプロジェクトです。