Direct3D (Managed DirectX) วันที่สร้างเพจ : วันพุธที่ 16 กันยายน พ.ศ. 2563 เพจที่คุณกำลังดูอยู่ในขณะนี้ไม่สนับสนุนภาษาที่แสดงที่เลือก × Direct3D を使用するための基本設定 Direct3D を使用するための基本設定とプログラムの基本コードの説明をしています。ここではまだ Direct3D らしい処理はしていません。 วันพุธที่ 16 กันยายน พ.ศ. 2563 Direct3D の初期化と基本処理 Direct3D の初期化とそれに関係する基本処理の説明を行っています。これが今後のTips の基礎部分になります。 วันพุธที่ 16 กันยายน พ.ศ. 2563 文字の表示 本来はポリゴンの作成などからはじめるのが普通なのですが、情報を知るのに文字が表示されたほうが都合がいいので、Direct3D 上で文字を表示させたいと思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563 2Dポリゴンの表示 Direct3D なので3Dをやるべきなのですが、ちょっと説明することが多くなってしまうので、最初は認識しやすい2Dポリゴンを使って説明します。 วันพุธที่ 16 กันยายน พ.ศ. 2563 頂点バッファを使用した2Dポリゴン 表示される内容は前回とほとんど同じですが、今回はポリゴンを表示するのに頂点バッファというものを使用しています。 วันพุธที่ 16 กันยายน พ.ศ. 2563 3Dポリゴンの描画 いよいよ3D上でポリゴンを描画します。見た目は前回と似ていますが、きちんと3D空間上にポリゴンを配置しています。 วันพุธที่ 16 กันยายน พ.ศ. 2563 四角形ポリゴンの描画 今まで三角形のポリゴンをひとつだけ描画してきましたが、今回は四角形のポリゴンを描画してみます。実は四角形ポリゴンはかなり利用頻度が高いので作れるようにしておくと便利です。 วันพุธที่ 16 กันยายน พ.ศ. 2563 テクスチャーの貼り付け ゲームなどではこのテクスチャーは必ずといっていいほど使用されますし、よりリアルなモデルとして見せるために有効に活用されます。 วันพุธที่ 16 กันยายน พ.ศ. 2563 キーボードからの入力 ゲームなどではキーボードなどを使ってユーザーが何らかの入力を行うはずです。今回はキーボードの入力を受けられるようにしたいと思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563 カメラの操作 キー入力が出来るようになったので、キーボードでカメラを操作してみたいと思います。カメラは原点を中心に回転するようになっています。 วันพุธที่ 16 กันยายน พ.ศ. 2563 マウスからの入力 せっかくキーボードの入力が出来るようになったので、今度はマウスでカメラを操作したいと思います。マウスの左ボタンを押しながら上下左右に移動させるとカメラが回転します。 วันพุธที่ 16 กันยายน พ.ศ. 2563 インデックスバッファを使用したボックスの描画 効率よく頂点データを作成するために「インデックスバッファ」というものを使用してみたいと思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563 ライトで陰を付ける 今まで頂点の色のみで色をつけていましたが、今回は「ライト」を使用してポリゴンに陰をつけてみました。ライトは時間によって移動するようにしたので、それに沿って陰も変化します。 วันพุธที่ 16 กันยายน พ.ศ. 2563 Xファイルからモデルデータ読み込み 「Xファイル」を読み込むことによって、簡単に複雑な形状のモデルを表示させることができるようになります。 วันพุธที่ 16 กันยายน พ.ศ. 2563 XYZ軸のライン描画 原点(0.0, 0.0, 0,0)からそれぞれ「X」「Y」「Z」方向へ線を描画して軸を表示するようにします。こうすることで位置の感覚がわかりやすくなると思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563 モデルの移動 今回はモデルを移動させます。ゲームとかでもキャラクターが移動できなかったら話になりません。キーボードの「↑↓←→」で XZ 方向にモデルが移動します。 วันพุธที่ 16 กันยายน พ.ศ. 2563 モデルの回転 前回は「移動」を行いましたが、向きが変わっていませんでした。もちろん移動する方向によって向きが変わらないとおかしいので、今回はモデルを回転させることにします。 วันพุธที่ 16 กันยายน พ.ศ. 2563 モデルの拡大縮小 今回はモデルを各XZ方向に拡大してみたいと思います。これを使えば爆発などのエフェクトシーンなどに柔軟に対応することができます。 วันพุธที่ 16 กันยายน พ.ศ. 2563 移動、回転、拡大縮小の掛け合わせ 前回までは「移動」「回転」「拡大縮小」をそれぞれ個別に処理していました。今回はそれらを同時に行えるようにマトリックスを掛け合わせて計算させてみます。 วันพุธที่ 16 กันยายน พ.ศ. 2563 フルスクリーン表示 市販PCゲームでよく見られる全画面表示を行います。臨場感あふれるゲームにするためにはとても効果的です。 วันพุธที่ 16 กันยายน พ.ศ. 2563 SDK の標準メッシュを作成 今までオリジナルのモデルデータを使用していましたが、データがかさばるので、SDKの「Mesh」クラスで簡単に作成できるメッシュを使用してみることにします。 วันพุธที่ 16 กันยายน พ.ศ. 2563 スプライトによるスクリーンへの画像描画 ゲームなどでパラメータやキャラクターの顔などの画像がスクリーンの特定の位置に張り付いているのを見かけると思います。これを「スプライト」というものを使用してそれを実現しています。 วันพุธที่ 16 กันยายน พ.ศ. 2563 頂点データによる半透明処理 ポリゴンを頂点データの色指定によって半透明で表示されています。きちんと後が透けていることが分かると思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563 マテリアルによる半透明処理 マテリアルを使用した半透明処理を行います。今回は簡単な距離判定を行い、反対側から見ても問題なく透けて見えるようにしています。 วันพุธที่ 16 กันยายน พ.ศ. 2563 クォータニオンによる回転 クォータニオン(Quaternion)」を使用することにより、回転を合成できたり、ジンバルロックの回避、球面補間など応用すればとても使いやすいものだと実感できると思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563 デバイスの消失 デバイスが使えなくなってしまう状況になっても正常に状態を保てるように、デバイスの状態を確認するプログラムを組み込んでみます。 วันพุธที่ 16 กันยายน พ.ศ. 2563 様々な 2D ラインの描画 スクリーン座標(2D)でラインを表示させるようにしています。 วันพุธที่ 16 กันยายน พ.ศ. 2563 ポイントスプライト ポイントスプライトを使用すると非常に綺麗なエフェクトを表現することが出来ます。今回は上空から雪が舞い落ちてくるような神秘的なエフェクトを実現してみました。 วันพุธที่ 16 กันยายน พ.ศ. 2563 頂点フォーマットの変更と頂点データの設定 メッシュは作成した後でも、頂点フォーマットの変更や頂点データの設定、取得を行うことが出来ます。今回は、「位置」「法線」しか持たないメッシュに「ディフューズ色」を追加して、各頂点に色を設定していきます。 วันพุธที่ 16 กันยายน พ.ศ. 2563 球と球の衝突判定 3Dゲームでよく使われる衝突判定のひとつです。計算がとても単純で非常に高速に処理できます。モデルの形状が球に近いほど正確な判定が行えます。 วันพุธที่ 16 กันยายน พ.ศ. 2563 ボックスとボックスの衝突判定 衝突判定の中では比較的高速な判定が出来る方法です。回転しない箱型物体、例えばキャラクター以外の家とか置物とかにとても有効です。 วันพุธที่ 16 กันยายน พ.ศ. 2563 モデルの二階層構造 ロボットなどのようにいくつかのパーツに分かれているようなモデルは、手や足などのパーツが親の動きに従って一緒に動作しています。また、手や足などは単独で回転したりします。これは「親子関係」という構造化を実現することにより可能になります。 วันพุธที่ 16 กันยายน พ.ศ. 2563 モデルの三階層構造 前回は「モデルの二階層構造」について説明しましたが、今回は「三階層構造」について説明します。 วันพุธที่ 16 กันยายน พ.ศ. 2563
Direct3D を使用するための基本設定 Direct3D を使用するための基本設定とプログラムの基本コードの説明をしています。ここではまだ Direct3D らしい処理はしていません。 วันพุธที่ 16 กันยายน พ.ศ. 2563
Direct3D の初期化と基本処理 Direct3D の初期化とそれに関係する基本処理の説明を行っています。これが今後のTips の基礎部分になります。 วันพุธที่ 16 กันยายน พ.ศ. 2563
文字の表示 本来はポリゴンの作成などからはじめるのが普通なのですが、情報を知るのに文字が表示されたほうが都合がいいので、Direct3D 上で文字を表示させたいと思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563
2Dポリゴンの表示 Direct3D なので3Dをやるべきなのですが、ちょっと説明することが多くなってしまうので、最初は認識しやすい2Dポリゴンを使って説明します。 วันพุธที่ 16 กันยายน พ.ศ. 2563
頂点バッファを使用した2Dポリゴン 表示される内容は前回とほとんど同じですが、今回はポリゴンを表示するのに頂点バッファというものを使用しています。 วันพุธที่ 16 กันยายน พ.ศ. 2563
四角形ポリゴンの描画 今まで三角形のポリゴンをひとつだけ描画してきましたが、今回は四角形のポリゴンを描画してみます。実は四角形ポリゴンはかなり利用頻度が高いので作れるようにしておくと便利です。 วันพุธที่ 16 กันยายน พ.ศ. 2563
テクスチャーの貼り付け ゲームなどではこのテクスチャーは必ずといっていいほど使用されますし、よりリアルなモデルとして見せるために有効に活用されます。 วันพุธที่ 16 กันยายน พ.ศ. 2563
キーボードからの入力 ゲームなどではキーボードなどを使ってユーザーが何らかの入力を行うはずです。今回はキーボードの入力を受けられるようにしたいと思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563
カメラの操作 キー入力が出来るようになったので、キーボードでカメラを操作してみたいと思います。カメラは原点を中心に回転するようになっています。 วันพุธที่ 16 กันยายน พ.ศ. 2563
マウスからの入力 せっかくキーボードの入力が出来るようになったので、今度はマウスでカメラを操作したいと思います。マウスの左ボタンを押しながら上下左右に移動させるとカメラが回転します。 วันพุธที่ 16 กันยายน พ.ศ. 2563
インデックスバッファを使用したボックスの描画 効率よく頂点データを作成するために「インデックスバッファ」というものを使用してみたいと思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563
ライトで陰を付ける 今まで頂点の色のみで色をつけていましたが、今回は「ライト」を使用してポリゴンに陰をつけてみました。ライトは時間によって移動するようにしたので、それに沿って陰も変化します。 วันพุธที่ 16 กันยายน พ.ศ. 2563
XYZ軸のライン描画 原点(0.0, 0.0, 0,0)からそれぞれ「X」「Y」「Z」方向へ線を描画して軸を表示するようにします。こうすることで位置の感覚がわかりやすくなると思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563
モデルの移動 今回はモデルを移動させます。ゲームとかでもキャラクターが移動できなかったら話になりません。キーボードの「↑↓←→」で XZ 方向にモデルが移動します。 วันพุธที่ 16 กันยายน พ.ศ. 2563
モデルの回転 前回は「移動」を行いましたが、向きが変わっていませんでした。もちろん移動する方向によって向きが変わらないとおかしいので、今回はモデルを回転させることにします。 วันพุธที่ 16 กันยายน พ.ศ. 2563
モデルの拡大縮小 今回はモデルを各XZ方向に拡大してみたいと思います。これを使えば爆発などのエフェクトシーンなどに柔軟に対応することができます。 วันพุธที่ 16 กันยายน พ.ศ. 2563
移動、回転、拡大縮小の掛け合わせ 前回までは「移動」「回転」「拡大縮小」をそれぞれ個別に処理していました。今回はそれらを同時に行えるようにマトリックスを掛け合わせて計算させてみます。 วันพุธที่ 16 กันยายน พ.ศ. 2563
SDK の標準メッシュを作成 今までオリジナルのモデルデータを使用していましたが、データがかさばるので、SDKの「Mesh」クラスで簡単に作成できるメッシュを使用してみることにします。 วันพุธที่ 16 กันยายน พ.ศ. 2563
スプライトによるスクリーンへの画像描画 ゲームなどでパラメータやキャラクターの顔などの画像がスクリーンの特定の位置に張り付いているのを見かけると思います。これを「スプライト」というものを使用してそれを実現しています。 วันพุธที่ 16 กันยายน พ.ศ. 2563
マテリアルによる半透明処理 マテリアルを使用した半透明処理を行います。今回は簡単な距離判定を行い、反対側から見ても問題なく透けて見えるようにしています。 วันพุธที่ 16 กันยายน พ.ศ. 2563
クォータニオンによる回転 クォータニオン(Quaternion)」を使用することにより、回転を合成できたり、ジンバルロックの回避、球面補間など応用すればとても使いやすいものだと実感できると思います。 วันพุธที่ 16 กันยายน พ.ศ. 2563
デバイスの消失 デバイスが使えなくなってしまう状況になっても正常に状態を保てるように、デバイスの状態を確認するプログラムを組み込んでみます。 วันพุธที่ 16 กันยายน พ.ศ. 2563
ポイントスプライト ポイントスプライトを使用すると非常に綺麗なエフェクトを表現することが出来ます。今回は上空から雪が舞い落ちてくるような神秘的なエフェクトを実現してみました。 วันพุธที่ 16 กันยายน พ.ศ. 2563
頂点フォーマットの変更と頂点データの設定 メッシュは作成した後でも、頂点フォーマットの変更や頂点データの設定、取得を行うことが出来ます。今回は、「位置」「法線」しか持たないメッシュに「ディフューズ色」を追加して、各頂点に色を設定していきます。 วันพุธที่ 16 กันยายน พ.ศ. 2563
球と球の衝突判定 3Dゲームでよく使われる衝突判定のひとつです。計算がとても単純で非常に高速に処理できます。モデルの形状が球に近いほど正確な判定が行えます。 วันพุธที่ 16 กันยายน พ.ศ. 2563
ボックスとボックスの衝突判定 衝突判定の中では比較的高速な判定が出来る方法です。回転しない箱型物体、例えばキャラクター以外の家とか置物とかにとても有効です。 วันพุธที่ 16 กันยายน พ.ศ. 2563
モデルの二階層構造 ロボットなどのようにいくつかのパーツに分かれているようなモデルは、手や足などのパーツが親の動きに従って一緒に動作しています。また、手や足などは単独で回転したりします。これは「親子関係」という構造化を実現することにより可能になります。 วันพุธที่ 16 กันยายน พ.ศ. 2563