C++ DirectX11 ゲームプログラミング プログラミング

ゼロから始めるDirectX11ゲームプログラミング入門 #3「三角形ポリゴンの描画」

ハッカドールMMDデータ © 2015 DeNA Co.,Ltd.

ゲーム専用のクラスを作ろう

前回はApplication.cppに画面を青で塗り 潰したす処理を書きましたね。本来はこの後、塗り潰した画面にさらにキャラクターなどを書いていきますが、それらは別のソースファイルに作りましょうか。ただでさえごちゃごちゃ書いているApplication.cppにゲームの処理や描画まで書いていると、プログラムの行数が膨大になり大変見にくいことになっていきますからね。

純粋にゲームに関連するプログラムは別の場所に移しましょう。下図のような感じです。

ソースファイルの作成

SourceフォルダにGameフォルダを作成して、GameSystem.cppとGameSystem.hを作成しましょう。

Visual Studioのプロジェクトへの追加もお忘れなく!

プログラムの記述

このGameSystemはゲームの中心となる存在です。1つだけ存在させいろいろな場所から参照したいので、こいつもシングルトンにしておきます。

エラーが出る・・・

#include "Source/DirectX/Direct3D.h" の行でエラーが出るかと思います。ちゃんと正しくファイルのパスを書いているつもりが、ダメなようです。これを修正するために下図のようにプロジェクトの設定をしましょう。

これでApplicationフォルダからのパスを指定できるようになります!

Application.cppでGameSystemクラスを動かすようにする

実行結果はさっきと同じだけど、ゲームのプログラムを分けることができましたね。

framework.hの活用

プロジェクトを作成した時に勝手に出来上がってたframework.hですが、今回からこいつも活用していきましょう。

今後このframework.hには、プログラム全体で使用するような汎用的な機能を記述しましょう。

だからと言って、何でもかんでもここに記述しないようにしましょう。必要なものだけを記述します。例えば確実に全体で使用するであろうC言語やC++のライブラリなどのインクルードとかです。

C++にはSTLという便利で汎用的な機能が提供されています。それを全体で使えるように追記し、各ソースからはこのframework.hをインクルードしましょう。

プログラムの記述

まずはframework.hにSTLが使えるようにインクルードを書きます。

各ソースでframework.hをインクルードする

今後作成するcppには、このframework.hをインクルードします。

シェーダーとは?

さてそろそろ描画したいところですが、まだできません・・・。なにかの形を画面に描画するにはシェーダーというプログラムが必ず必要になります。いろんな用語が出てくるので、ちょっとまとめてみます。

ポリゴン

画面に何かを表示するには、基本的には三角形として描きます。四角形を描きたい場合は三角形を二枚で表現できますよね。この三角形のことをポリゴンと呼びます。複雑な地形やキャラクターはこのポリゴン(三角形)が沢山集まってできています。

頂点シェーダー

三角形は点が3つで表現できますよね。この点(頂点と言います)を1つ1つ計算で動かしたりできるのがこの頂点シェーダーです。 移動以外にも、次のピクセルシェーダーへ渡すためのデータを計算したりします。

ピクセルシェーダー

点3つで三角形ができ、それをと呼びます。その面は何かしらの色で塗る必要がありますよね。その面を塗る場所がピクセルシェーダーです。

入力レイアウト

三角形の点(頂点)1つが、どんな情報を持っているのかを記述したもの。 ちょっとわかりにくいですが、これをコンピューターに教えてあげないといけないんです。

このシェーダーというプログラムを動かすことで、画面に三角形を表示できるようになるのです。

2D描画をするシェーダープログラムを書こう

シェーダー用のソースファイルを下図のように作成してください。これはVisual Studioのプロジェクトの方には追加しなくて良いです。

ちなみにC++言語では書けません。HLSLというシェーダー用の言語で記述します。

最低限の機能だけを持った頂点シェーダーとピクセルシェーダーを書きました。なんかC言語に似てますね。

書いたシェーダープログラムを読み込み、使用できるようにしよう

あとはDirectXの関数を使用して、このプログラムを読み込みコンパイルします。ここができればやっと描画ができるようになります。

まずはシェーダーをコンパイルできる機能をインクルードし、必要な変数を追加します

シェーダーを読み込みましょう!

シェーダープログラムの詳細については、いまのところは省略します。またシェーダーを詳しく解説するコーナーも用意する予定です。

三角形の描画

やっと来ましたね。三角形を描画してみましょう。三角形の描画なんて意味あるの?って思いますが、最終的にこの三角形に画像を張り付ければ2Dゲームが作れるようになります。

実行結果

でましたね!単純な三角形1枚だけですが、ここからどんどんパワーアップしていきましょう。

まとめ

  • ゲームのプログラムを書くためのクラスGameSystemを作った。
  • 何かを描画するにはシェーダープログラムが必要になる。

おすすめ書籍

-C++, DirectX11, ゲームプログラミング, プログラミング
-, , , , ,