|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第633回 DX16 太陽を回す 発行 2006年1月20日(金曜日) 発行数 約2500 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンは、主にまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・横60文字で作成し、インデントは大抵半角スペース4つです。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、メルマガのホームページでお願いします。 ・過去ログはバックナンバー(下欄参照)を活用して下さい。 ・内容は私が感じたもので、最新の技術も、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは、あゆしゃです。 お正月休みの間、ツタヤでDVDを借りました。 スチームボーイ。 やたらとCMが打たれていたわりには、それほど面白い作品で しょうか? 30分アニメ1話分のストーリー内容です。 24億円の大作らしいですが、 たいさく【大作】 大規模な作品。大きな制作。また、すぐれた立派な作品。 Kokugo Dai Jiten Dictionary. Shinsou-ban (Revised edition) 大規模な作品であることは間違いないでしょうが、優れた作品 という解釈は、間違いでしょう。 では、あゆしゃ的に何がいけないのでしょうか。 攻殻機動隊やガンダムのように、先進性があるか <ない −−>技会世増の理論の技術に反する 魔女宅や銀河英雄伝説のように、生活観があるか <全くない −−>技会世増の理論の会話に反する AKIRAやマトリクスのように、現実性があるか <ない −−>技会世増の理論の世界に反する ルパンやドラクエのように、達成感があるか <かけらもない −−>技会世増の理論の利益に反する 以上の理由で、あゆしゃ的に、ヒットするべき作品ではないと 思いますが、私だけでしょうか。 {magclick} /*========================================================*/ 今回のお題 << DX16 太陽を回す >> /*========================================================*/ 前回までに、簡単な3Dマップを表示し、その中を移動できる ようになりました。 今回は、回転演算の応用ということで、太陽である光源を まわしてみましょう。 /*========================================================*/ 回転演算は、カメラを回すときと同じです。 太陽はZ軸を中心にして回るので、D3DXMatrixRotationZ を 使用するところだけが違います。 void DX_SetLight( float radi, float r, float g, float b ); D3DXMATRIX m; D3DXMatrixRotationZ( &m, radi ); 求めたマトリクスで、適当なベクトルを回転します。 D3DXVECTOR3 v( -10, 0, 0 ); // 0度のとき左(西)を向く D3DXVECTOR3 v2; // 回転後のベクトル D3DXVec3TransformCoord( &v2, &v, &m ); あとは、光源設定どおりです。 D3DLIGHT9 light; ZeroMemory( &light, sizeof( D3DLIGHT9 ) ); light.Type = D3DLIGHT_DIRECTIONAL; DLM_SET_RGB( light.Diffuse, r, g, b ); // 色を設定 D3DXVec3Normalize( ( D3DXVECTOR3* )&light.Direction, &v2 ); pDev->SetLight( 0, &light ); // この設定を登録 /*========================================================*/ あまり長々と1日を待つつもりもないので、1分で360度 回るようにしましょう。 処理は33ミリ秒に1回実行されますので、 1秒30回*60秒=1800回 1回の回転角度=360度/1800 =2*PAI/1800 =0.00349 となります。 。。。少し小さすぎるでしょうか? これを、33ミリ秒タイマーのDX_Draw直前にて、 以下のように処理します。 static float sun = 0; sun += 2 * PAI / 1800; if( sun > 2 * PAI ) sun -= 2 * PAI; DX_SetLight( sun, 0.6f, 0.6f, 1.0f ); PAIは、定数で定義しておきます。 const float PAI = (float)3.1415926535897932384626433832795; Windows電卓のPIの値です。 /*========================================================*/ 少し1分より長いようですが、まぁいいでしょう。 +=によって成り行きに計算しているのが原因です。 ミリ秒から逆算するのが確実なのですが、まぁ、いいでしょう。 http://ayusya.hp.infoseek.co.jp/Image/DirectXSample_060120_1.png 画像は、明け方の様子です。 /*========================================================*/ 面白みがないので、高低差をつけてみました。 http://ayusya.hp.infoseek.co.jp/Image/DirectXSample_060120_2.png うん、なかなか立派になりました。 高さは、法線ベクトルと同じ値を使うようにしました。つまり 乱数です。 高いところは明るく、低いところは暗くなっています。 {magclick} /*========================================================*/ さいごに /*========================================================*/ 今後の予定です。 1月16日月曜日 第631回 DX14 回転演算 済 1月18日水曜日 第632回 DX15 マップを移動する 済 1月20日金曜日 第633回 DX16 太陽を回す 済 1月23日月曜日 第634回 乱数生成アルゴリズム 1月25日水曜日 第635回 ドラクエ3のマップを得る {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は1月23日(月曜日)に、第633回をお送りします。 お題は「乱数生成アルゴリズム」 高低を乱数で指定するようになって、ふと、乱数が規則正しい ことに気が付きました。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 高気圧玉 なんて大歓迎です。 {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 |