やって参りました。初めての描画でございます。今回は初めてと言う事で、とりあえず塗り潰しだけしてみましょう。
public void Render() { if(device_==null)return; //クリア処理 device_.Clear(ClearFlags.Target,Color.Blue,1.0f,0); //描画開始 device_.BeginScene(); //描画処理のはいる場所 //描画終わり device_.EndScene(); //更新 device_.Present(); }
前回のソースコードにこれだけ足せばもう描画を行う事が出来ます。
public void Clear( ClearFlags flags, Color color, float zdepth, int stencil );
ごちゃごちゃと色々ありますが、これはこの「Clear」が画面を塗りつぶす意外のこともしてくれるからです。とりあえずは色をセットして「ClearFlags.Target」を指定すると良いでしょう。Zバッファやステンシルについては後々説明しましょう。
ClearFlagsで指定した情報を指定のデータで埋めます。
この二つのメソッドの間で描画処理を行います。と言うよりこの中でしか描画処理が行えません。今回は空っぽです。
これを呼び出すと、描画が行ったバックバッファをフロントバッファと取り替えてくれます。
今回はこれで終わりなのですが、次回以降のためにちょっと付け足しをしておきましょう。
今回ソースコード上に「BeginScene」「EndScine」という二つのメソッドがあります。そしての前には「Clear」というメソッドがあります。重要なのはこれらのメソッドを呼び出す順番です。
DirectXでは、ハードウェアとの同期や、前処理や、後処理を行う関係上呼び出し順番に制限があるものがあります(順番制限が無いものもあります)。不正な場所で呼び出すと例外が発生します。もし、メソッドの書き方や変数は全て正しいのにエラーが起きてしまう場合は順番についても疑ってみてください。
ちなみに「Clear」はどこで呼び出しても問題がないようです。ただし、授業の前に黒板を消すように最初の方で呼ぶのが妥当でしょう。
今回はこれで終わりです。どうでしょうか?なんとなくDirec3Dが使えるような気がしてきませんか?次回はとりあえずまともに何かを描画してみましょう。描画する物は・・・まだ未定です。