こんにちは、エンジニアのオオバです。
C#でDirectX11 頂点カラーを使って三角形を描画する
やっとアニメーションに移ります。
頂点カラー反映済みの三角形をクルクル回してみようと思います。
今回は頂点シェーダー側で回転させてみます。
まずはシェーダー側を変更します。
以下が変更した部分のシェーダーソースコードです。
// 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関数内でインクリメントさせる処理を入れています。
回転したっちゃあしましたが、三角形がきれいに描画されていません。部分的にカリングされている感。
まあ、この辺りはいったん今後のTODOとして残しておき、今回はこれで終わります。
以上
全体コードはこちら
RotationTriangle.cs · GitHub
この記事が気に入ったらフォローしよう
- Windows8.1
- SlimDX 2.0.13.43