メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.633) DX16 太陽を回す  2006/01/20


/*========================================================*/
    <<<あゆしゃの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

ブラウザの閉じるボタンで閉じてください。