渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

C#でDirectX11 三角形を回転アニメーションさせる


f:id:esakun:20181114212755p:plain

C#でDirectX 頂点カラーを使って三角形を描画する - 渋谷ほととぎす通信の続きです。

やっとアニメーションに移ります。 頂点カラー反映済みの三角形をクルクル回してみようと思います。

今回は頂点シェーダ側で回転させてみます。

まずはシェーダ側を変更します。
以下が変更した部分のシェーダソースコードです。

// C#側から渡される回転行列
matrix RotateMatrix;
// 頂点シェーダ
VertexData MyVertexShader(VertexData input)
{
    // 頂点座標に回転行列を反映する
    input.position = mul(input.Position, RotateMatrix);
    return input;
}

一つずつ見ていきます。

matrix RotateMatrix

RotateMatrixというmatrix型(行列)変数を定義します。
値はC#側から描画タイミング時に渡されます(渡す処理は後述)。

input.position = mul(input.Position, RotateMatrix);

座標に先ほどの回転行列を乗算します。mul関数が乗算する処理になります(Unityではおなじみ)。

すると、三角形の各頂点が一つの回転行列で回転します。
この回転行列をフレーム単位で変化させていくことでアニメーションさせていき


次にC#側を見ていきます。

やることはシンプルで、回転行列を作成して、それをシェーダに渡すです。

回転行列を作成してシェーダへ渡す

まずは該当コードをどうぞ。

行列はMatrixクラスを使います。作り方はいろいろありますが、今回はRotationAxis関数を使って生成しています。第1引数に回転軸、第2引数に回転する角度をセットします。

第2引数部分を変化させることでクルクル回転させることができます。

角度を変化させるために、frameCount変数を定義し、Loop関数内でインクリメントさせる処理を入れています。

f:id:esakun:20181114212444g:plain

回転したっちゃあしましたが、三角形がきれいに描画されていません。部分的にカリングされている感。 まあ、この辺りはいったん今後のTODOとして残しておき、今回はこれで終わります。


以上


全体コードはこちら