メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.631) DX14 回転演算  2006/01/16


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第631回 DX14 回転演算
 発行    2006年1月16日(月曜日)
 発行数   約2500

{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンは、主にまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・横60文字で作成し、インデントは大抵半角スペース4つです。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、メルマガのホームページでお願いします。
・過去ログはバックナンバー(下欄参照)を活用して下さい。
・内容は私が感じたもので、最新の技術も、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは、あゆしゃです。

 今日も面白リンク。

http://sarasi.age.jp/souko.html

 デスノートの台詞を書き換えた「ドラゴンクエストデスノート」
(リンク名=デスノドラ)が、面白すぎです。

 あずまんがメンバーがFF7の学芸会を行っているイラストも
よいです。

 FF7ムービーの影響ですね。

 FF7ムービーは、ゲームの延長線上の範疇を越えておらず、
映画としての完成度は非常に低いと思っているのですが、話題性は
すごいですね。

{magclick}
/*========================================================*/
 今回のお題  << DX14 回転演算 >>
/*========================================================*/

 前回、32*32のマップ(といっても平面でが)を表示しま
した。

http://ayusya.hp.infoseek.co.jp/Image/DirectXSample_060113_3.png

 このマップを動き回る、つまりカメラの位置を動かすために、

 回転演算について考えます。

/*========================================================*/

 回転を行うにはまず、角度を決めます。

 注意が必要なのは、この角度がラジアンだということです。

 0度が0ラジアンなのはよいのですが、

 90度だと1.07ラジアン、

 180度だと3.14ラジアンになります。

 つまり、1回転(360度)=2パイ(円周率)です。

 360度を2.0だと勘違いすると、変なことになります。

/*========================================================*/

 回転演算は、このような手順で行います。

1.回転方向をマトリクスに変換

2.ベクトルを回転

3.カメラ位置に回転済みのベクトルを足してカメラの見ている点
  を作成

4.カメラ位置とカメラの見ている点からマトリクスを作成

5.デバイスにマトリクスを登録

/*========================================================*/
1.回転方向をマトリクスに変換

 回転演算を行うには、D3DXMatrixRotation系関数にて回転行列を
作成します。

 行列(マトリクス)は、3D演算を行う上で必要なデータ配列
だと思っていれば間違いではありません。

 カメラが横に回転するのは、Y軸を回転させるので、
D3DXMatrixRotationY 関数を使用することになります。

float ViewRot = 0.0f; // 回転方向

D3DXMATRIX m; // 行列
D3DXMatrixRotationY( &m, ViewRot ); // 回転行列を生成

 これで回転行列を作りました。

/*========================================================*/
2.ベクトルを回転

 作成したマトリクスを使って、適当なベクトルを回転します。

D3DXVECTOR3 sa( 0, 0, 0.5f ); // ちょっと前に出るベクトル

D3DXVECTOR3 ViewTo;
D3DXVec3TransformCoord( &ViewTo, &sa, &m ); // 回転実行

/*========================================================*/
3.カメラ位置に回転済みのベクトルを足してカメラの見ている点
  を作成

 ベクトルは単なる数字ですので、足せばよいです。

ViewTo += ViewFrom; // 平行移動

/*========================================================*/
4.カメラ位置とカメラの見ている点からマトリクスを作成
5.デバイスにマトリクスを登録

 あとは、今までと同じです。

D3DXMatrixLookAtLH( &ViewMat, &ViewFrom, &ViewTo, &ViewUp );
pDev->SetTransform( D3DTS_VIEW, &ViewMat );

/*========================================================*/

 この演算を行っても、カメラが回転するだけです。

 カメラを向いている方向に移動するには、この演算で求めた
回転後のベクトルをカメラ位置に足せばよいです。

{magclick}
/*========================================================*/
 さいごに
/*========================================================*/

 今後の予定です。

 1月 9日月曜日 第628回 2006年 済
 1月11日水曜日 第629回 マグクリック報告 済
 1月13日金曜日 第630回 DX13 マップを描画 済
 1月16日月曜日 第631回 DX14 回転演算 済
 1月18日水曜日 第632回 DX15 マップを移動する
 1月20日金曜日 第633回 DX16 太陽を回す
 1月23日月曜日 第634回 乱数生成アルゴリズム

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は1月18日(水曜日)に、第632回をお送りします。
 お題は「DX15 マップを移動する」

 入力のインターフェースを作成し、マップを動き回れるように
しましょう。

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されていますか?
 このメールマガジンの内容に文面の引用はありませんか?
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容の、転用、流用、宣伝、リンク、
失礼な、パパは人間ですよ なんて大歓迎です。

{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

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