|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第626回 DX12 描画処理 発行 2005年12月21日(水曜日) 発行数 約2500 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンは、主にまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・横60文字で作成し、インデントは大抵半角スペース4つです。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、メルマガのホームページでお願いします。 ・過去ログはバックナンバー(下欄参照)を活用して下さい。 ・内容は私が感じたもので、最新の技術も、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 というわけで、ようやくバイハザをクリアできました。 20時間ほどかかってしまいました。 ★アマレベルなのに。。 そして現在は4週目。 もうなれたもので、3時間ほどでクリアできますから、 走馬灯のようにフィールドを駆け回っています。 ★無限ロケットランチャーを振り回して。 {magclick} /*========================================================*/ 今回のお題 << DX12 描画処理 >> /*========================================================*/ サンプルソースです。 http://ayusya.hp.infoseek.co.jp/Source/DX9Sample_051216.cpp その実行結果です。 http://ayusya.hp.infoseek.co.jp/Image/DirectXSample_051205.png /*========================================================*/ 今回は一番楽しい、描画処理です。 // 描画処理(再描画するときはここを再実行する) if( pD3D && pDev && pMesh ) { // 背景を青で塗りつぶす pDev->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0, 0 ); if( SUCCEEDED( pDev->BeginScene() ) ) { // 描画設定 pDev->SetMaterial( &Material ); pMesh->DrawSubset( 0 ); // 0番のポリゴン集合を描画 pDev->EndScene(); } pDev->Present( NULL, NULL, NULL, NULL ); // 全体を全体に } こんな感じですね。 /*========================================================*/ 最初のif文は、処理を実行できることを確認しています。 通常は実行されます。 /*========================================================*/ 背景色はとりあえず、 // 背景を青で塗りつぶす pDev->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0, 0 ); これで塗りつぶすことができるということです。 第2引き数にはクリアする領域を配列で指定します。 NULLを指定すると画面全体となります。 クリアしないと、デフォルトではごみが出るので、少なくとも 最初に全体をクリアしておきます。 第1引き数にはクリアする領域の数を指定します。 NULLを指定する場合は0となります。 D3DRECT r; r.x1 = 0; r.y1 = 0; r.x2 = 500; r.y2 = 400; pDev->Clear( 1, &r, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0, 0 ); このようにすれば、単純矩形塗りつぶしとなります。 /*========================================================*/ 続いて、メッシュを描画します。 if( SUCCEEDED( pDev->BeginScene() ) ) { // 描画設定 pDev->SetMaterial( &Material ); pMesh->DrawSubset( 0 ); // 0番のポリゴン集合を描画 pDev->EndScene(); } シーンというものを作成し、BeginScene と EndScene の間で メッシュの描画を行うらしいですよ。 まずはデバイスにマテリアルを指定し、 そのマテリアルを適用するポリゴンのみを描画します。 DrawSubset がメッシュを描画します。 このときに指定する値は、メッシュの設定に指定した 属性番号です。 指定した属性番号に属するポリゴンだけが描画されます。 今回は1つだけですが、これをマテリアルの数だけ行います。 一通り描画し終わったら、EndScene でシーンを終了します。 /*========================================================*/ 最後に、描画した結果を画面に出力します。 pDev->Present( NULL, NULL, NULL, NULL ); // 全体を全体に 第1引き数は描画結果のどこを使用するかという、転送元領域 です。 NULLをしていすれば、全体となります。 第2引き数はどこに出力するかという、転送先領域です。 ディスプレイ座標を指定できます。 RECT r2; r2.left = 100; r2.right = 200; r2.top = 100; r2.bottom = 400; pDev->Present( NULL, &r2, NULL, NULL ); r2.left = 300; r2.right = 600; r2.top = 100; r2.bottom = 300; pDev->Present( NULL, &r2, NULL, NULL ); このように指定すれば、このように表示されいます。 http://ayusya.hp.infoseek.co.jp/Image/DirectXSample_051221.png 1つの画面に複数のシーンを貼り付けることができます。 ただし、ちらつくので重ねることはできません。 第3引き数は出力先のHWNDですが、すでにデバイスに登録済み なので、NULLで省略します。個別に指定することもできます。 第4引き数はスワップというエフェクトをかけるための リージョン(領域)座標らしいですが、良くわかりません。 /*========================================================*/ 最後に、メッシュ、デバイス、そしてDirectX3Dオブジェクトを 削除して、プログラムが終了します。 if( pMesh ) pMesh->Release(); if( pDev ) pDev->Release(); if( pD3D ) pD3D->Release(); 今回は単独処理なのでここにありますが、本来はソフトが終了 する時点で行います。 {magclick} /*========================================================*/ さいごに /*========================================================*/ 今後の予定です。 12月16日金曜日 第624回 DX10 マテリアルの設定 済 12月19日月曜日 第625回 DX11 メッシュの設定 済 12月21日水曜日 第626回 DX12 描画処理 済 12月23日金曜日 第627回 2005年総集編 1月 9日月曜日 第628回 2006年 1月11日水曜日 第629回 DX13 マップを描画 {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は12月23日(金曜日)に、第627回をお送りします。 お題は「2005年総集編」 今年一年、ご購読ありがとうございました。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 攻殻と違って自爆しないのがいいです なんて大歓迎です。 {magclick} /*========================================================*/ /*========================================================*/ 発行者 あゆしゃ ホームページ::あゆしゃの世界 http://ayusya.hp.infoseek.co.jp/ ご意見・ご感想・ご質問メール mailto:ayusya@flamenco.plala.or.jp まぐまぐ::アイディー 0000020674 まぐまぐ::登録と解除 http://www.mag2.com/m/0000020674.htm まぐまぐ::バックナンバー http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674 めーらっくす::アイディー MM3E1AEE285AB4F めーらっくす::登録と解除 http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F めーらっくす::バックナンバー★最近のものならこちらが便利★ http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F |