クロの制作日記

クロの制作日記

田舎の大学生がUnityとか機械学習関連の制作物をひたすらアップします。ブログで紹介したコード一覧https://github.com/kuroshum/blog_code

初心者が頑張るゲームプログラミングC++の環境構築(SDL + SDL_image + OpenGL)

【※追記1】
2章で扱うSDL_Imageの環境構築を追加しました。
【※追記2】
5章以降で扱うOpenGLの環境構築を追加しました。

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

今までのゲーム開発はUnityとかのゲームエンジンに頼り切っていたので、そろそろゲームエンジンなしでもゲーム開発をできるようになりたいなという気持ちが強くなってきました。

それで色々とゲーム開発の入門書を探していたら、この本を見つけました。



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

本の帯に書いてある

ゲームエンジン時代にも必要な「基礎力」を磨け

を見て「これだ!」と思い購入しました。

概要は、SDLOpenGLを使ったゲーム開発の入門書です。

発売日が2018年12月5日ということもあって、前提としている開発環境が新しいので、私みたいにゲームエンジンなしでのゲーム開発に興味を持っている人にはおすすめです。

ただ、SDLOpenGLの環境構築の説明が皆無という入門書としてはよろしくない仕様となっています。なので、この記事ではその環境構築の解説をしていきたいと思います。



Githubリポジトリ

この本のコードが載っているリポジトリです。
github.com

私がこれから練習問題の解答コードを載せるリポジトリです。
github.com

Starを付けてくれると泣いて喜びます。

自分の開発環境

  • OS : window10

SDL

SDLとは、グラフィックの描画やサウンド再生を提供してくれるクロスプラットフォームAPIです。クロスプラットフォームなので、windowsMacはもちろん、LinuxやAndrois、iOSでも使用することができます。

SDLは以下のサイトからダウンロードすることができます。(2019年7月17日現在)
www.libsdl.org

「Development Libraries」の「SDL2-devel-2.0.9-VC.zip」をダウンロードすればOKです。
バージョンが新しくなっているかもしれないので「2.0.9」の部分は適宜読み替えてください。

上記ファイルのダウンロードファイルの解凍先はCドライブの直下にしていた方がわかりやすいかと思います。この先の説明はC:\SDL2-2.0.9にあると仮定して説明していきます。

SDL_image

SDL_imageは様々な形式の画像ファイルを扱うことができるライブラリです。2章以降でスプライトを扱うときに用いられます。

SDL_imageは以下のサイトからダウンロードできます。
https://www.libsdl.org/projects/SDL_image/

Development Libraries」の「SDL2_image-devel-2.0.5-VC.zip」をダウンロードすればOKです。
バージョンが新しくなっているかもしれないので「2.0.5」の部分は適宜読み替えてください。

先ほどと同じようにCドライブ直下に置いておきましょう。

OpenGL

OpenGLは2D/3DグラフィックスのためのクロスプラットフォームなグラフィックスAPIです。4章までは2Dゲームを制作するのでSDLで十分ですが、5章以降は3Dゲームの制作になるので、OpenGLのような3Dに対応したグラフィックスAPIが必要になります。

ダウンロードは、Visual StudioのNuGetパッケージを利用します(Visual Studio以外でやっている人はすみません...)。

まずは、VisualStudioでプロジェクトを作成し、以下の画像のような画面に移動しましょう。そして、以下の画像で赤く囲われている「プロジェクト」を選択し、「NuGetパッケージの管理」を開きます。

f:id:kurora-shumpei:20200125205127p:plain
VisualStudioのプロジェクト画面からNugetに

すると、以下の画像のような画面になるので、「参照」をクリックし、その下の検索バーに「nupengl」と入力してください。そうすると「nupengl.core」というパッケージが表示されるので、こいつをインストールします。

f:id:kurora-shumpei:20200125205454p:plain
NuGetでnupenglを検索

あと、画像をロードするためにSimple OpenGL Image Library(SOIL)もインストールする必要もあるようですので、先ほどの検索バーに「soil」と入力してください。多分一番上にでてくる「soil」という3.73kくらいダウンロードされてるやつで大丈夫ですので、インストールしましょう。

これで、OpenGLのインストールは完了です。SDLのインストールと比べて、VIsualStudioが色々と勝手にやってくれるので簡単にできました。ちなみに、SDLはこの後、VisualStudio側で面倒な環境設定をしないといけませんが、OpenGLは特にする必要はありません。まじNuGet神。

Visual Studioでの設定とSDLを用いたサンプルプログラムのビルド

実際にVisual StudioSDLを用いたサンプルゲームをビルドしてみましょう。

プロジェクト作成

Visual Studioを開いたら、

  • ファイル -> 新規作成 -> プロジェクト

をすると、以下のウィンドウが開くかと思います。

f:id:kurora-shumpei:20190717215307p:plain
プロジェクト作成

上のウィンドウが開いたら、画像の通りに、

  • Visual C++ -> 空のプロジェクト

を開いて、プロジェクトの名前と場所(パス)を決めてOKを押したらプロジェクト作成が完了します。

すると以下のような画面がでます。

f:id:kurora-shumpei:20190717220653p:plain
プロジェクト画面

C++ファイルの作成

まずは、C++のファイルを作成しましょう。右側にあるソリューションエクスプローラーのプロジェクト名を右クリックして

  • 追加 -> 新しい項目

の順に選択すると以下のウィンドウが開きます。

f:id:kurora-shumpei:20190717221556p:plain
ファイル作成

ファイル名と場所(パス)を適当に決めて追加したらC++ファイルを作成できます。

追加のインクルードディレクトリの設定

ここからはSDLを使えるようにVisual Stusioのプロパティをいじっていきます。

右側にあるソリューションエクスプローラーのプロジェクト名を右クリックして、

を選択して、一番上にある入力欄に

C:\SDL2-2.0.9\include
C:\SDL2_image-2.0.5\include

をコピペして適用をクリック。

f:id:kurora-shumpei:20190804230650p:plain
追加のインクルードディレクト

このプロパティ画面は次も使うので消さないで置いときましょう。

追加のライブラリディレクトリの設定

プロパティ画面で、
リンカー -> 全般
を選択して、真ん中あたりにある追加のライブラリディレクトリに

C:\SDL2-2.0.9\lib\x86
C:\SDL2_image-2.0.5\lib\x86

をコピペして適用をクリック

f:id:kurora-shumpei:20190804230916p:plain
追加のライブラリディレクト

追加の依存ファイルの設定

プロパティ画面で、
リンカー -> 入力 -> 追加の依存ファイル -> 編集
を選択して、一番上にある入力欄に

SDL2.lib
SDL2main.lib
SDL2_image.lib

をコピペして適用をクリック。

f:id:kurora-shumpei:20190717224951p:plain
追加の依存ファイル

サブシステムの設定

プロパティ画面で、
リンカー -> システム
を選択して、サブシステムをコンソールに設定

f:id:kurora-shumpei:20190717230057p:plain
サブシステム

ビルド後のイベントの設定

プロパティ画面で、
ビルドイベント -> ビルド後のイベント
を選択して、コマンドラインに「xcopy "C:\SDL2-2.0.9\lib\x86\*.dll" "$(OutDir)" /i /s /y」をコピペしてOKをクリック。

DLLファイルをコピペ

ディレクトリ「C:\SDL2-2.0.9\lib\x86」以下にある「SDL2.dll」
ディレクトリ「C:\SDL2_image-2.0.5\lib\x86」以下にある「SDL2_image.dll」「libpng16-16.dll」

を先ほど作成したC++ファイルと同じディレクトリ内にコピペします。

サンプルプログラムのビルド

これで下準備は完了したので、実際にサンプルプログラムをビルドしてみましょう。
サンプルプログラムは以下のサイトのものを使用しています。
http://sdl2referencejp.osdn.jp/SDL_CreateWindow.html

※もしサンプルプログラムが動かなかったら、この本のGithubリポジトリの「Chapter2/Debug」というディレクトリ内に同じファイルがあるのでそれをコピペしてみてください。私はそれで動きました。多分私のリポジトリにあるファイルをコピペしても動くはず。

// サンプルプログラム:
// SDL2でアプリケーションウィンドウを生成する

#include "SDL.h"
#include "SDL_image.h"
#include <stdio.h>

int main(int argc, char* argv[]) {

    SDL_Window *window;                    // ポインタを宣言する

    SDL_Init(SDL_INIT_VIDEO);              // SDL2を初期化する

    // 次の設定でアプリケーションウィンドウを生成する:
    window = SDL_CreateWindow(
        "An SDL2 window",                  // ウィンドウのタイトル
        SDL_WINDOWPOS_UNDEFINED,           // X座標の初期値
        SDL_WINDOWPOS_UNDEFINED,           // Y座標の初期値
        640,                               // 幅のピクセル数
        480,                               // 高さのピクセル数
        SDL_WINDOW_OPENGL                  // フラグ
    );

    // ウィンドウの生成に成功したかチェックする
    if (window == NULL) {
        // ここを通ったならばウィンドウを生成できなかった...
        printf("ウィンドウを生成できなかった: %s\n", SDL_GetError());
        return 1;
    }

    // ウィンドウが開いた: ここでプログラムループに入る (SDL_PollEvent()を参照すること)

    SDL_Delay(3000);  // 例として3000ミリ秒間停止する

    // ウィンドウを閉じて破棄する
    SDL_DestroyWindow(window);

    // 終了処理
    SDL_Quit();
    return 0;
}




最後に

ゲームプログラミングC++を進めるためのSDL + SDL_imageの環境構築とサンプルプログラムの実行を行いました。

今回はSDLの環境構築だけを行いましたが、第5章からはOpenGLも使うことになるので、OpenGLの環境構築も後日追加しておきます。

また、各章には練習問題があるのでそれらの解答コードを紹介する記事を書いていこうかなと思います。
kurora-shumpei.hatenablog.com

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

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