DirectX SDKとWindows SDK
DirectX11の開発を、
この書籍を参考にはじめてみた。
DirectX9など、過去バージョンの開発もしたいなら
VisualStudio2010以降(恐らく)+DirectX SDK
の組み合わせになるが、
DirectX11のみの開発なら
VisualStudio2012or2013+Windows SDK
でいいとのこと。
VisualStudio2012からDirectX SDKはWindows SDKに統合されたらしい。
そしてWindows SDKはVisualStudioについてくる。
すなわちVisualStudio2013が入ってる私のパソコンなら追加のインストールも無しで即開発に入れるのだ。やったね。
じゃあ書籍のサンプルをとりあえず動かしてみるかな・・・
大量のエラー。
ヘッダファイルが見つからない(二個)ことによる、定義されてないよエラーが噴出しているようだ。
ヘッダファイルが見つからない?書籍のとおりにディレクトリ設定でパスも指定したし、リンカーも指定したぞ?そもそも#pragmaとやらである程度自動でやってくれるんじゃないのか?
いろんなサイトまわっていろんなパスを試した。が!駄目ッ・・・!
ん?パス設定が間違ってる方向で調べてたけどそもそもヘッダファイルはあるのか?いやでもWindows SDKだけでいいって書いてあったし、流石に無いこたないでしょ。
問題のヘッダファイルたち
d3dx11.h
dxerr.h
をPC内検索。
無かった。
えぇ・・・。
ここで同じ事を進めていた仲間がどうやら上手くいったらしいので詳しく聞いてみた。
すると、「VS2013とWinSDKじゃうまくいかないからDXSDKもいれた。動いた。」だそうです。いや、おかしいやん。WinSDKだけでいいって書いとったやん。
腑に落ちないので更に調べる。
すると驚愕の事実が判明。
書籍のとおりDXSDKはWinSDKに統合され、開発時に別途ダウンロード・インストールは不要になった。
が、統合にあたりヘッダファイルの名前(というか構成?)などが結構代わっているので、以前のコードを動かすにはDXSDKをいれる、あるいはWinSDK用に中身を書き換える必要がある。らしい。
なんすかこれ。
書籍は嘘ついてないけど、こんなん誰でも勘違いするよ。
というわけでまとめると、
VisualStudio2013+WinSDKのみで開発は可能。
ただしDXSDK前提で書かれたコードは動かすだけならDXSDKを入れればいい
けど、WinSDKだけで行くなら書き直す必要あり。
こんな感じ。
因みに私はここまできたらWinSDKのみでやってみるよ。DXSDKいれんのも癪だし。
DirectX11をVisualStudio2013ではじめる
DirectX11をやってみることにした。
環境設定の流れを調べてまとめておく。
参考サイト:Setting up a DirectX 11 project in Visual Studio 2013 (and Visual Studio 2012)digitalerr0r.wordpress.com
- DirectX11をインストールする。自分の場合は入ってた。
バージョン確認方法↓ - VS2013で新しいVisualC++の空プロジェクトを作る。
- ツールバーの『プロジェクト』から『プロパティ』を選択し、プロパティページを表示。
- 構成を『全ての構成』に変更。
- ウィンドウ左にある『構成プロパティ』内の『VC++ディレクトリ』を選択。
- ウィンドウ右に表示された『全般』内の
実行可能ファイルディレクトリを
$(DXSDK_DIR)Utilities\bin\x86 に、
インクルード ディレクトリを
$(DXSDK_DIR)Include に、
ライブラリ ディレクトリを
$(DXSDK_DIR)Lib\x86;$(LibraryPath)に書き換える。
以上。
数学パズル
入門書の次のステップになにかいい本はないかなと探して
こんなの買った。
課題を設定してそれを実現する過程で必要な知識が身につけていく
というスタイルが一番モチベーション続く気がする。
fputcの仕様
というのをやりたかったので、char⇔int変換をやってくれる関数を探してました。
で、検索してたらfputcにたどり着きました。
int fputc(出力したいもの(int型),出力先ファイルポインタ);
こんな感じの説明をちらほらみかけたので、int型をchar型で出力してくれるんですかやったーって思ってました。
でも使ってみるとint型の70を渡したのに3730って出力されたりしてパニックに。
よく考えてよく調べてみると、fputcの第一引数はint型の文字コードだと気付きました。
コンピュータ内部では
’a’ ’b’ ’c’ はそれぞれ
61 62 63 のような数値で扱われています。
'70' という文字の文字コードは70では無いということを失念していました。
fputcにそこまで考慮して変換するような機能は無いということです。
気をつけよう。
結局fprintfなら変換仕様を指定できることを思い出してなんとかなりました。