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