Some Memorandum

DirectX11に挑む素人の備忘録。

Windows SDKでDirectX11

WinSDKのみを前提にしたサンプル(DirectX11の初期化、画面クリア)を見つけたので、それを解析していこうと思う。

 

で、最初の問題。

ビルドはできるし実行もできるんだけど、即時終了(ウィンドウが出た瞬間消える)してしまう。

 

ディレクトリファイルを設定しなおした。

ダメ。

リンカーを設定しなおした。

ダメ。

 

???

Win8環境の別PCではうまくいったのに。

 

まぁいいか。

原因究明も兼ねて解析に移ろう。

 

※追記

勘違いしてました。

WinSDK+DirectX11の組み合わせの場合、対応してるのはWin8以降らしい。

Win7じゃムリ。

DirectX SDKとWindows SDK

DirectX11の開発を、

www.amazon.co.jp

この書籍を参考にはじめてみた。

 

DirectX9など、過去バージョンの開発もしたいなら

VisualStudio2010以降(恐らく)+DirectX SDK

の組み合わせになるが、

DirectX11のみの開発なら

VisualStudio2012or2013+Windows SDK

でいいとのこと。

VisualStudio2012からDirectX SDKWindows 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

 

  1. DirectX11をインストールする。自分の場合は入ってた。
    バージョン確認方法↓

    windows.microsoft.com

  2. VS2013で新しいVisualC++の空プロジェクトを作る。

  3. ツールバーの『プロジェクト』から『プロパティ』を選択し、プロパティページを表示。

  4. 構成を『全ての構成』に変更。

  5. ウィンドウ左にある『構成プロパティ』内の『VC++ディレクトリ』を選択。

  6. ウィンドウ右に表示された『全般』内の

    実行可能ファイルディレクトリ
    $(DXSDK_DIR)Utilities\bin\x86 に、

    インクルード ディレクトリ
    $(DXSDK_DIR)Include に、

    ライブラリ ディレクトリ
    $(DXSDK_DIR)Lib\x86;$(LibraryPath)に書き換える。

 

以上。

 

 

 

 

数学パズル

入門書の次のステップになにかいい本はないかなと探して

こんなの買った。

www.amazon.co.jp

課題を設定してそれを実現する過程で必要な知識が身につけていく

というスタイルが一番モチベーション続く気がする。

 

M_PIで困った

ヘッダファイル<math.h>をインクルードしたのに

マクロ『M_PI』が使えない。

 

調べてみたら

#include達の上に#defineで

 

_USE_MATH_DEFINES

 

って書いたらええよとのことだったので書いた。

なおった。

 

fputcの仕様

  1. CSVファイルを読み込んで(char)
  2. 計算して(int)
  3. 別のCSVファイルとして出力(char)

というのをやりたかったので、char⇔int変換をやってくれる関数を探してました。

で、検索してたらfputcにたどり着きました。

    int fputc(出力したいもの(int型),出力先ファイルポインタ);

こんな感じの説明をちらほらみかけたので、int型をchar型で出力してくれるんですかやったーって思ってました。

でも使ってみるとint型の70を渡したのに3730って出力されたりしてパニックに。

 

よく考えてよく調べてみると、fputcの第一引数はint型の文字コードだと気付きました。

コンピュータ内部では

’a’ ’b’ ’c’ はそれぞれ

61 62 63 のような数値で扱われています。

'70' という文字の文字コードは70では無いということを失念していました。

fputcにそこまで考慮して変換するような機能は無いということです。

気をつけよう。

 

結局fprintfなら変換仕様を指定できることを思い出してなんとかなりました。