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関数内でインクリメントさせる処理を入れています。
回転したっちゃあしましたが、三角形がきれいに描画されていません。部分的にカリングされている感。 まあ、この辺りはいったん今後のTODOとして残しておき、今回はこれで終わります。
以上
全体コードはこちら