VisualStudio2017(Windows10 DirectX OpenGL)で始める3Dプログラミング

今(2017年5月)Windows&C++で3DプログラミングするならDirectXかOpenGLだと思いますが、最新バージョン(DirextX12など)は、性能重視のため手軽にプログラミングができなくなっています。
なので古いバージョンで使えるものを調べて、プログラミングができる環境を作ってみました。
作成した環境は、OpenGL1.1、OpenGL4.5、DirectX9、DirectX11、DirectX12で、初期化と画面クリア、簡単なポリゴンの描画まで行っています。
VSプロジェクト、ソースコードを公開していますので、3Dプログラミングの参考にしてください。
記事最後にあるダウンロードボタンから取得できます。


Visual Studio 2017インストール

プログラムの開発環境として、Visual Studio Community 2017が無料で利用できます。30日間試用期間があり、それ以降も使う場合は登録が必要になります。

ダウンロード

https://www.visualstudio.com/ja/downloads/
からインストーラーをダウンロード。

インストール

ダウンロードしたファイルを実行するとVisual Studio Installerが起動し、インストールしたい開発環境を選択します。3Dプログラム(DirectX、OpenGL)をするために「C++によるデスクトップ開発」をインストールします。

右側にはインストールする機能を細かく指定できるようになっています。今回はデフォルトのままでインストールします。右下に「Windows 10 SDK (10.xxxxxxx)」とありますが選択する必要はありません。古いバージョンのWindows SDKをインストールするときに使用します。

Windows 10 SDK

DirectXとOpenGLはこのSDKに含まれています。
Visual Studioをインストールすると最新版のSDKがインストールされます(のはず・・・、いつの間にかインストールされいてVisual Studio InstallerのWindowsSDKのリストにありませんでした)。


環境構築

ここで説明するものはすべてWindows10SDKに入っているためVisualStudioのインストールのみです。利用するヘッダやライブラリファイル、初期化の方法について説明していきます。


OpenGL1.1

簡単な3Dプログラムならこれで十分だと思います。Windows環境以外でも多くの環境で対応していて、本、ネットなどから簡単に情報を入手できます。古いAPIなのでシェーダや複雑な処理はできません。

ヘッダーとライブラリファイル

初期化と終了処理
簡単に初期化を行える外部ライブラリがありますが使用せずに、Windows用のOpenGL関数(wgl~)のみを使った方法を紹介します。

簡単な描画処理例
ポリゴンを描画するには、頂点や色などを1つずつ関数を呼び出して行います。簡単ですが効率は悪いです。ライティングは決められた計算方法のみで、シェーダーはありません。

DirectX9

高度な処理や計算性能の必要としない3Dプログラムやゲームであれば十分使えます。古いAPIですが、それなりに複雑な処理が可能で、シェーダーも使えます。固定のライティング処理が用意されているためシェーダーを書かなくてもポリゴンなどを描画できます。最新の機能がなく、シェーダーの制約も多いですが、その代わり高性能PCでなくても動作します。
他のバージョンと比べて、簡単に色々な情報が入手できます。

ヘッダーとライブラリファイル

初期化と終了処理
今回紹介する中で一番簡単で短いソースコードです。構造体に必要な情報を入力しデバイスを作成します。

簡単な描画処理例
頂点データを作成し、固定のライティングかシェーダーかどちらかを選んで描画処理を行います。


OpenGL4

シェーダーなど新しい機能に対応したバージョンです。描画処理もDirectXのような頂点バッファとシェーダーを使った方法に変更され、古い描画処理と固定のライティング機能は廃止されています。また使用するにはグラフィックボードのドライバーが対応している必要があり、利用できる環境が制限されます。
古いバージョンの情報が多く、新しいバージョンの情報を探すのに少し苦労します。

ヘッダーとライブラリファイル
glext.hというヘッダファイルが必要になります。
https://khronos.org/registry/OpenGL/index_gl.phpから入手できます。
新しいバージョンのlibファイルはなく、実行時に動的なリンク処理(関数ポインタの取得)が必要になります。

初期化と終了処理
ウインドウの初期化などはOpenGL1.1と同じです。新しい機能を使うために実行時に動的なリンク処理を行います。ここでは使用していませんが、この処理を行う外部ライブラリ(glewなど)があります。

簡単な描画処理例
頂点バッファやシェーダーの作成は長いため、描画処理の部分のみです。


DirectX11

ジオメトリシェーダーなどの機能追加され、より高度で効率の良いプログラムが可能です。支援機能(フォント、画像からテクスチャ生成、シェーダーエフェクトなど)が削られているため、自分で作成するか外部のライブラリ(DirectXTKなど)を使用します。
Windows7以降、新機能に対応したGPUを搭載したPCが必要になります。
あと、情報がほとんどありません(英語ならあるかも)。中上級者向け。

ヘッダーとライブラリファイル

初期化と終了処理
処理が複雑で長いため一部のみ、サンプルのソースコードを見てください。

簡単な描画処理例
頂点バッファやシェーダーの作成は長いため、描画処理の部分のみです。


DirectX12

機能的には11とほぼ同じですが、メモリなどのリソース管理、CPUとGPUの並列実行などすべて自分で行う必要があります。その代わり、かなり効率の良いプログラムが可能です。
グラフィックライブラリやゲームエンジンの開発者用です。通常の3Dプログラムで使用することはないと思います。DirectX11以上に情報の取得が困難です。

ヘッダーとライブラリファイル

初期化と終了処理

処理が複雑で長いため省略。サンプルのソースコードを見てください。

簡単な描画処理例
画面クリアのみを行うソースコードです。


サンプルソースコード

DirectX9、DirectX11、DirectX12、OpenGL1.1、OpenGL4.5各環境で初期化と画面クリア、簡単なポリゴンの描画まで行うプログラムです。WindowsSDK以外の外部ライブラリなどを使用していないため、VisualStudioのインストールだけでコンパイルできます。

コンパイル時の注意点

新しいバージョンのWindowsSDKでコンパイルする場合、「ソリューションの再ターゲット」を実行してください。

Start 3DProgram VS2017

「VisualStudio2017(Windows10 DirectX OpenGL)で始める3Dプログラミング」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

認証:数字を入力してください(必須) * Time limit is exhausted. Please reload CAPTCHA.