こんにちは、エンジニアのオオバです。

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

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

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

// 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#側を見ていきます。

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

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

まずは該当コードをどうぞ。
SlimDX 回転行列を生成してそれをシェーダーに渡す部分コード · GitHub

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

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

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

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

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

以上

全体コードはこちら
RotationTriangle.cs · GitHub

オススメ記事
検証環境