DirectX 2009.01.29 レクチャー DirectXとは Windowsのマルチメディア機能を強化するために MicroSoftが提供している拡張API群。 C++ Other managed languege(C#、Basic、etc・・・) アプリケーションが直接ハードウェア制御を行うこと が可能となるため、高度なマルチメディア処理を実 現することができる。 DirectXの主要コンポーネント群 DirectX Graphics DirectDraw ・・・2次元グラフィックス処理 Direct3D ・・・3次元グラフィックス処理 DirectSound ・・・音楽再生・録音 DirectShow ・・・ビデオファイル等の再生・作成 DirectInput ・・・キーボード・マウス等の入力 今回はDirect3Dに焦点を置いて説明する 開発環境準備 DirectX SDKの入手 VisualStudioの設定 ライブラリの設定 インクルードファイルの設定 依存ファイルの設定 開発環境準備 DirectX SDKの入手 MicroSoftのHPからDirectX SDKをダウンロード http://www.mictrosoft.com/japan/windows/directx/default.mspx 合わせてDirectXのヘルプも入手するとよい インストーラに従ってインストールを行う VisualStudioの設定 ライブラリの設定 DirectXをインストールしたフォルダ内の\Lib\x86を追加 する VisualStudioの設定 インクルードファイルの設定 DirectXをインストールしたフォルダ内の\Includeを追加 する VisualStudioの設定 依存ファイルの設定 プロジェクトのプロパティを開き、[リンカ]→[入力]から[追加 の依存ファイル]に必要なlibファイルを追加する DirectXプログラムサンプル DirectXSDKには豊富なサンプルが付属している 暇なときにでもどぞ DirectXの基本 DirectXを使ったプログラムはWindowsアプ リケーション よって、プログラムの書き方もWindowsアプリ ケーションに準拠 描画処理の大半はメッセージループ内に記述される DirectXプログラムの流れ DirectXの初期化 Direct3Dインターフェイスの作成 3Dデバイスインターフェイスの作成 描画処理 3Dモデルの用意 ワールド空間への配置 カメラ座標を決める 射影変換 レンダリングして表示する DirectXの初期化 DirectX3Dインターフェイス ビデオチップの性能を調べたり、他のインターフェ イスのインスタンスを作成したりするメソッドを 持っている 一番最初に作成する必要がある 3Dデバイスインターフェイス 実際の描画処理に関わるメソッドのほとんどを 持っている 描画処理 3Dモデルの用意 頂点バッファを使う方法とメッシュを使う方法とが ある 頂点バッファを使う方法は、ポリゴンの頂点一つ 一つをコーディングで設定する メッシュは頂点バッファの機能を拡張したもので、 外部の3Dモデルファイルを読み込んで表示する ことができる 描画処理 ワールド空間の用意 用意した3Dモデルを配置するため、コンピュータ 上の仮想空間を用意する すでにワールド座標系自体は3Dデバイス内に存 在するため、3Dモデルの材質(マテリアル)や光 源(ライティング)の設定を行う。 描画処理 3Dモデルをワールド空間へ配置 設定したワールド空間に、3Dモデルを移動・回 転・拡大縮小して配置する この処理をワールド変換と呼ぶ ワールド変換にはワールド変換行列を用いる 描画処理 カメラ座標を決める 実際に画面に表示される画像を計算するために、 ワールド空間内に「カメラ」を配置する カメラの位置、向き、注目点をベクトルで設定する カメラに見えている3D空間画像を計算する。この 処理をビュー変換と呼び、行列を用いて行われる。 描画処理 射影変換 カメラに移った3Dモデルの座標系を、画面に表示 できるように二次元座標系に変換する この変換も行列で行われる 描画処理 レンダリングして表示する 実際に3Dモデルを描写する 得られた画像はワールド変換、ビュー変換、射影 変換を通して2次元座標系に直され、最終的にピ クセルデータに変換(ラスタライズ)されて画面に 表示される。 課題 課題1 このスライドで使用したサンプルプログラムを実 際に起動すること 課題2 サンプルプログラムの内容を自由に改変してみ ること。 課題 課題1 DirectXでの処理部分を空白にしたWindowsプ ログラムのソースがある DirectXでの処理をスライドでの説明プロセスご とにまとめたソースコードを用意してある それらを切り貼りして、提示したサンプルプログラ ムをそれぞれのPC上で動作させること。 課題 課題2 サンプルプログラム内で使用されている関数の 引数の値をいじって、結果が実行画面にどのよう な影響を及ぼすかを確認すること。 改変後のプログラムを提出すること。 補足 今回の課題で用いる依存ファイル d3dxof.lib dxguid.lib d3dx9d.lib d3d9.lib winmm.lib 以上のlibファイルをプロジェクトのプロパティから [リンカ]→[入力]→[追加の依存ファイル]に追加する 補足 Q.なぜDirectXは座標変換に行列を用いるのか? A.計算式がとても単純になるから。 行列を用いると移動・回転・拡大縮小全ての処理が (頂点座標) × (変換行列)で表すことができる ↓回転行列の例 補足 例・3Dモデルを平行移動させ、次にx軸を中心に回転させ、そ の後再び平行移動する3D画像処理の演算 行列を使わない場合 頂点1の座標を足し算 頂点1の座標をθ度回転 頂点1の座標を足し算 頂点2の座標を足し算 頂点2の座標をθ度回転 頂点2の座標を足し算 頂点3の座標を足し算 頂点3の座標をθ度回転 頂点3の座標を足し算 ・・・・・ 行列を使う場合 変換行列を作成 頂点1の座標に行列を掛ける 頂点2の座標に行列を掛ける 頂点3の座標に行列を掛ける ・・・・・
© Copyright 2024 ExpyDoc