メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.622) DX8 プロジェクションの設定  2005/12/12


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第622回 DX8 プロジェクションの設定
 発行    2005年12月12日(月曜日)
 発行数   約2500

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

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

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

 先日、Cマガジンの乱数生成の特集記事をみていました。

 乱数生成のアルゴリズムのお話かなぁと思っていたところ、

 乱数生成「結果の活用方法」でした。ちょっとざんねんです。

{magclick}
/*========================================================*/
 今回のお題  << DX8 プロジェクションの設定 >>
/*========================================================*/

 サンプルソースです。

http://ayusya.hp.infoseek.co.jp/Source/DX9Sample_051205.cpp

 その実行結果です。

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

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

 今回はカメラの次の、プロジェクションの設定です。

// プロジェクション(どのように写すのか)を設定
float Aspect = ( float )dParam.BackBufferWidth /
    dParam.BackBufferHeight;
D3DXMatrixPerspectiveFovLH( &PersMat,
    D3DXToRadian( 10.0f ), Aspect, 1, 200 );
pDev->SetTransform( D3DTS_PROJECTION, &PersMat );

 こんな感じですね。

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

 最終的にデバイスに SetTransform で登録します。

 属性は D3DTS_PROJECTION、その内容が PersMat です。

 PersMat は、マトリックスでおなじみの、3次元データです。

 マトリックスは平行移動演算と回転演算を表しています。

 つまり PersMat は、カメラがどの位置にあってどの方向に
むいているか、ということをあらわしています。

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

 その難しいマトリックスを作成するのが、
D3DXMatrixPerspectiveFovLHです。

 第1引き数に指定した、D3DXMATRIX structure に、作成された
マトリックスが設定されます。

 後の4つの引き数は、

・視界の幅

・縦横の比率(アスペクト比)

・最短距離

・最長距離

 となります。

 つまり、キャラクターの視野の広さを第2引き数に、

 ディスプレイの比率を第3引き数に、

 「これ以上近いものは描画しない」境界線を第4引き数に、

 「これ以上遠いものは描画しない」境界線を第5引き数に、

 それぞれ指定すると普通の設定の完了です。

 サンプルのプロジェクションは、視界の幅が10度、比率は
ディスプレイにあわせつつ、1メートル以上200メートル以内
のものを描画します、ということを設定しています。

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

 3Dゲームは昔から、望遠鏡などの「ズーム機能」があります。

 バイハザ4でも、ヒロインがミニスカートということで、
ズーム機能が大活躍です。

 大統領の娘ということで、ああ、パンチラはしないように気を
使っているんだろうなぁと思っていたら、

★登場シーンからいきなりパンチラ。

 まぁ、パンチラ要員ということでしょう、大統領の娘なのに。。

 というわけで、ズーム機能の実現方法ですが、

 第2引き数の値を小さくします。

 そうすることで、狭い範囲を描画しますが、ディスプレイの
大きさは変わりませんので、結果的にズームしたことになります。

サンプルにて、第2引き数に3度を指定した場合
http://ayusya.hp.infoseek.co.jp/Image/DirectXSample_051212.png

 逆に大きい値を指定すると、パノラマになります。

 あまり度が過ぎるとよい安い要因になるので難しいところ
ですが、パノラマだと、空を飛んでいるような感じになります。

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

 遠くのものを描画したければ、第5引き数を大きくします。

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

 なぜこれらの設定がマトリックスで表現できるのかは、
分かりませんが。

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

 次回は12月14日(水曜日)に、第623回をお送りします。
 お題は「DX9 光源の設定」

 お楽しみに!

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

{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

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