DirectX

3Dゲームが作りたい!

みなさん、3Dゲームはお好きですか? 作りたいですか?
この講座では、C++とベクトル、行列、三角関数について理解している方向け(なんとなくで大丈夫です)に、3Dゲーム開発の基礎理論からじっくりお教えします。

この講座を履修し終える頃には、プログラマーとしてゲーム業界へ就職できる程の実力はつきます。
ただし、これは最近流行りの「オシャレでかっこよくてスタイリッシュな開発」「エンジンを用いた楽々な開発」ではありません。「泥臭くて、自力で実装しなければならなくて、3Dモデルを描画するためにポリゴン単位の計算を要求します」

本気でゲーム業界を目指すのであれば、DirectXを用いたゲーム開発を行ってもよいでしょう。しかし現代においては3Dゲームを開発するツールはたくさんありますから、「趣味でゲームを作ってストアに並べたい」などという方はUnityなどを使って作ることをおすすめします。つまり他の講座をあたるのがよいでしょう。

Visual Studioは既にインストールされているものとします。インストールしていない方はこちら
Visual Studio 2017 Communityのインストール

下記のURLにアクセスし、ダウンロードボタンを押します。
DirectX SDK ダウンロード
d0



ダウンロードしたインストーラーを実行し、次へを押します。
d1



DirectXの改善にフィードバックを送るか選びます。どちらでも構いません。
d4


DirectXSDKのインストール場所を選びます。この時DirectXを初めて扱う方はデフォルトのパスを選ぶことをお勧めします。後々の手順でパスを指定する際にややこしくなります。
d4


そのまま次へ
d5


インストールが完了したら、終了してVisual Studio を立ち上げて下さい。
新規プロジェクトを作ります。
d6


Windowsデスクトップウィザードを選択します。
d7


Windowsアプリケーション(.exe)を選択し、空のプロジェクトにチェックします。
d8



ソリューションエクスプローラーのソースファイルを右クリックし、追加→新しい項目(W)を選択します。ソリューションエクスプローラーは左サイドに表示される場合もあるので注意して下さい。
d9


C++ファイル(.cpp)ファイルを追加します。名前はmainなどが適切でしょう。
d10


次は、Visual StudioとDirectX9.0cを紐づけます。

プロジェクトのXXXのプロパティ(XXXは自分でつけたプロジェクト名)を開きます。
d11


左上の構成を「すべての構成」に変更します。
d12


VC++ディレクトリを選択します。
d13


インクルードディレクトリの編集を選択します。
d14


新しい行を選択します。
d15


以下の文を追加し、OKを押します。
$(DXSDK_DIR)Include;

d17


ライブラリディレクトリを選択し、編集を押します。
d17


新しい行を選択し、以下の文を追加し、OKを押します。
d18


ソースファイルに以下の文を追加し、実行してみます。無事コンパイルが通れば開発環境の構築は終了です。
d19

このエントリーをはてなブックマークに追加

Escape


【Escape! ソースコード】

DirectX製3Dアクションゲームのソースコードです。
・マリオのようなジャンプ
・坂道
・重力
・高度な衝突処理
・かわいい赤ちゃん
・スキンメッシュアニメーション
・各種シェーダ
・ほかにもあったけど忘れた

などなど、ゲーム業界を目指す学生必見の内容となっています。ぜひ写経したりご自身のゲーム制作の参考にして下さい。
このエントリーをはてなブックマークに追加

[DirectX] Effekseer for Runtime 導入方法

導入


1.公式サイトからEffekseer for Runtime をダウンロードします。
https://effekseer.github.io/jp/download.html

2.ダウンロードしたフォルダ(EffekseerRuntime143d)のRuntimeSampleを開きます。

3.DirectX9の場合、DirectX9.slnを開きます。(※11の場合はDirectX11.slnです)
e0


プロジェクトの再ターゲット画面が出た場合、再ターゲットをして下さい。e2


4.ローカル Windows デバッガーをクリックし、実行します。サンプルエフェクトが再生されるはずです。(再生されない場合、DirectXをリンクしてあげます)→DirectX9の環境を構築する
※ここで正しく起動するか確認しておきましょう。
e1


5.フォルダ階層を戻り、EffekseerRuntime143d\src\EffekseerRendererDX9に入ります。
(11の方はDX11に入ります)
EffekseerRendererDX9.vcxprojを開きます。
e5

プロジェクトの再ターゲット画面が出た場合、再ターゲットして下さい。

6.デバッグ版のリンクが欲しい方はプロジェクトのターゲットをデバッグに、リリース版が欲しい方はリリースに設定し、ローカル Windows デバッガーをクリックします。
e7

エラー等出ても気にしないで下さい。
e12

プロジェクトを閉じます。


7.フォルダ階層を戻り、EffekseerRuntime143d\src\Effekseerに入ります。
先ほどと同じようにEffkseer.vcprojに入ります。
e8

プロジェクトの再ターゲット画面が出た場合、再ターゲットして下さい。
e9


8.先ほどと同じように、デバッグ版のリンクが欲しい方はプロジェクトのターゲットをデバッグに、リリース版が欲しい方はリリースに設定します。ローカル Windows デバッガーをクリックします。
e10

エラー等出ても気にしないでください
e11

プロジェクトを閉じます。

9.フォルダ階層を一番上(EffekseerRuntime143d)まで戻り、src\lib\x86に入ります。
(x64でビルドした方はsrc\lib\x64です)

10.すると、このように2つのlibファイルができていると思います。
e14


11.自作ゲームのディレクトリを開き、ディレクトリにlibフォルダを作ります。
そして、出来上がった2つのlibファイルを自作のlibフォルダにぶち込みます。

更に、EffekseerRuntime143d\Compiled\lib\VS2017\Releaseにあるlibファイルを作成したlibフォルダにぶち込みます。(パスは人によってVS2015だったりDebugだったり)
e15


12.自作ゲームのディレクトリに、Effekseer_inclというフォルダを作成します。
次に、EffekseerRuntime143d\Compiled\includeに入り、そこにある.hファイルをEffekseer_inclフォルダにぶち込みます。
e17


13.自作ゲームのプロジェクトを開きます。(Debug と Releaseのターゲットを間違えないで下さい)
プロジェクトのプロパティページを開き、追加のインクルードディレクトリを開きます。
e18


14.追加のインクルードディレクトリにEffekseer_inclを追加します。
e19


15.追加のライブラリディレクトリに入ります。
e21


16.以下のようにパスを打ちます。パスが間違っているように見えますがこれでいいです。
e22


17.実行します。うまくいえばビルドが通ります。うまくいかなければ、LNK2001エラー等が出ますので、もう一度手順を見直したり、色々いじくってみて下さい。

18.EffekseerRuntime143d\RuntimeSampleにサンプルがありますので.slnをクリックして、コードを表示し、参考にしつつ自分のゲームに組み込んで下さい。
注意点としては、

#include <d3d9.h>
#pragma comment(lib, "d3dx9.lib")

#include <Effekseer.h>
#include <EffekseerRendererDX9.h>

は必須です。特にd3d9.hはd3dx.hやd3d9d.hなどをインクルードしている方が、既にインクルード済みと勘違いする確率が高いと思われます(1敗)

また、サンプルのTextureフォルダやSoundフォルダは自作ゲームのディレクトリ直下に置きましょう。(エフェクトに設定したパスによる)
e23


うまくいけば自作ゲームのプロジェクトでエフェクトが再生できます。
e24


補足


サンプルのこの部分、”自分の”カメラ位置、注視点位置、上方位置にあわせてあげて下さい。
完全に同じにするとよいです。


// 視点位置を確定 (ここがカメラ位置)
g_position = ::Effekseer::Vector3D(0.0f, 0.50f, 15.0f);

// カメラ行列を設定 (ここが注視点位置、上方位置)
g_renderer->SetCameraMatrix(
::Effekseer::Matrix44().LookAtRH(g_position, ::Effekseer::Vector3D(0.0f, 0.50f, 0.0f), ::Effekseer::Vector3D(0.0f, 1.0f, 0.0f)));

// 投影行列を設定 (ここが投影行列の設定です。FovRHになっているので左手系でゲームを作っている方(カメラ座標を作っている方)はLHにします)
g_renderer->SetProjectionMatrix(
::Effekseer::Matrix44().PerspectiveFovLH(90.0f / 180.0f * 3.14f, (float)1920 / (float)1080, 1.0f, 100.0f));


// 描画用インスタンスの生成 (ここも自分のデバイス名にして下さいpDeviceなど)
g_renderer = ::EffekseerRendererDX9::Renderer::Create(自分のデバイス名, 2000);


どうしても分からなかった方、この記事にミスを見つけた方はこちらへご連絡下さい
https://twitter.com/dmsbot
duemachine@gmail.com
このエントリーをはてなブックマークに追加

ライティングの中でも最も単純で、処理速度が速いものがランバート拡散照明です。
これの基礎となる理論は「ランバートの余弦測」であり、

物体の輝度は光の入射ベクトルLと表面の法線ベクトルNとの内積に比例する。というものです。
NL


つまりHLSL上では、


dot関数で内積を計算してあげるとよい。
※輝度がマイナスになって真っ黒にならないように0.0以下の輝度にならないようにしているが、これは好みの問題です。

ちなみに完全版はこんな感じ


HLSLを読み込むコードはこんな感じである。



ライトベクトルをローカル座標系で作るためにワールド座標系をローカル座標系に戻す処理をしている。

実行結果:3Dモデルに自然な光を照らすことができる。
Lambert
このエントリーをはてなブックマークに追加

【概要】
1. Metasequoia4 で3Dモデルを作成する。
2. RokDeBone2でボーンをモデルへ組み込み、影響度を設定する
・モデルの頂点は影響度から外れてはいけない
3. モーションを作る
4. DxLibModelViewer またはDXViewerを用いてモデルを確認する
・DxLibModelViewerはDXライブラリに付属している。入手しやすい。
・DXViewerはDirectX8に付属している。現在は入手しにくい。
5. スキンメッシュアニメーションを読み込むソースコードを書く
・DirectXの書籍のサンプルソースなどを参考に書く(書籍:ゲームコーディングVol1など)



【初心者向けの説明】
あとで書きます。上を参考に頑張ってみて下さい。
このエントリーをはてなブックマークに追加

↑このページのトップヘ