DirectXMath

投稿日:

DirectX11のプログラムができるようになったので、次は3Dグラフィックスの表示といきたいところですが、その前に3DCGで必要になるベクトルや行列の計算を行うライブラリを準備します。
DirextX9や10に含まれる計算関数、XNAMath(マイクロソフトが提供するゲーム作成環境XNAの計算ライブラリ)などを使う予定でしたが、DirectXMathという計算ライブラリがあるようなので、これを使うことにしました。

DirectXMath Programming Guide (Windows)を参考に。
DirectXMath (Windows)からだと日本語のページがなくXNAMathのページへ、仕方なく英語で。
DirectXMathの特徴
・DirextX9、10、XNAMathに代わる計算ライブラリ
・インライン定義のみ(ヘッダファイルのみリンクなし)
・SSE/SSE2やARM-NEONなどのCPU命令を使用(ベクトル計算を高速に)
・CPU毎に実行ファイルを用意する必要がある(インライン定義なので)
最後が少し気になるけど、SSE/SSE2対応CPUに限定してプログラミングするので問題なし。
DirectXMath.hは現在インストールしているWindowsSDKに含まれているので、使用するにはDirectXMath.hをincludeするのみ。

検証用ソースコード(CPU判定と意味のない計算をするだけ)

#include 

	if(DirectX::XMVerifyCPUSupport()){
		using DirectX::XMVECTOR;
		using DirectX::XMMATRIX;

		XMVECTOR v0 = DirectX::XMVectorReplicate(0.0f);//v0=(0,0,0,0)
		XMVECTOR v1 = DirectX::XMVectorSet(1.0f,2.0f,3.0f,1.0f);//v1=(1,2,3,1)
		XMMATRIX m0 = DirectX::XMMatrixIdentity();
		XMMATRIX m1 = DirectX::XMMatrixScaling(1.0f,2.0f,3.0f);
		XMMATRIX m = DirectX::XMMatrixMultiply(m0,m1);
		XMVECTOR v = DirectX::XMVector4Transform(v1,m);
		float vx = DirectX::XMVectorGetX(v);
		float vy = DirectX::XMVectorGetY(v);
		float vz = DirectX::XMVectorGetZ(v);

		MessageBox(NULL, L"DirectXMath対応CPU", L"DirectXMath", MB_OK);
	}

まず最初に、DirectX::XMVerifyCPUSupport()でCPUが対応しているか調べ、未対応の場合プログラムを実行できないので、強制終了などのエラー処理が必要なります。XMVerifyCPUSupportを使用するときは、DirectXMath.hのincludeの前にwindows.hをincludeする必要があります。
あとはDirectXMath Programming Guide (Windows)を参考にベクトルや行列の計算を試してみました。デバッガでの確認ですが計算は正しく行われているようです。

これで計算ライブラリの準備完了。
使い方は必要に応じて調べていきます。

DirectXMath (Windows)
DirectXMath Programming Guide (Windows)

WordPressでソースコード表示

投稿日:

ソースコードを見やすくするにはhtmlのタグを使用する必要が、でもめんどくさい。
もしかしたらWordPressのプラグインがあるかも。ありました。
最初に見つけたのが「SyntaxHighlighter Evolved」
WordPressのプラグイン検索でインストールしようとすると、「現在のバージョンではテストされていません」1年以上更新なし、と注意が出たので他にもないか探したところ、「Crayon Syntax Highlighter」というものを発見、WordPress最新Verもテスト済み。
http://thikasa.net/20120724/wordpress-plugin-crayon-syntax-highlighter/
ここのブログを参考にして、使ってみることにしました。

WordPressの投稿編集画面で、crayonボタンを押すと、ソースコードの編集ダイアログが表示、そこにソースコードをコピペして表示設定を行うと、下のようにソースコードを表示してくれます。

2019/9/1
Crayon Syntax Highlighterは3年以上更新されていないようなので、利用を中断しています。

	UINT createDeviceFlags = 0;
#ifdef _DEBUG
	createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
	D3D_FEATURE_LEVEL featureLevels[] =
	{
		D3D_FEATURE_LEVEL_11_0,//DirectX11のみ 10以降は無視
	};
	ID3D11Device* device;
	ID3D11DeviceContext* dv_ctx;
	D3D_FEATURE_LEVEL feature_level;
	HRESULT hr
		= D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL,
					createDeviceFlags,featureLevels, 1 ,D3D11_SDK_VERSION,
					&device, &feature_level, &dv_ctx);
	//デバイス作成に成功したらメッセージボックス表示
	if(SUCCEEDED(hr)){
		MessageBox(NULL, L"成功", L"DirectX11", MB_OK);
		
		dv_ctx->Release();
		device->Release();
	}

かなり便利です。

WordPress › Crayon Syntax Highlighter « WordPress Plugins

VS2012でDirectX11プログラミング

投稿日:

まずはDirectXSDKの入手ですが、調べてみるとWindowsSDKというものにDirectXのSDKが含まれているようなので
http://msdn.microsoft.com/ja-jp/windows/hardware/hh852363.aspx
からダウンロードしてインストール。(Windows SDK for Windows 8)
Windows8用と書いてありますがWindows7でも動作して7用のプログラムもできるようです。

VS2012でWin32プロジェクトを新規作成
まずはヘッダファイルのincludeを試してみる。
#include “d3dx11.h” //以前作成したDX11のソースコードから
コンパイルすると「そんなファイルはない」とエラー発生。
インクルードパスの設定が必要なのか、それともSDKのインストールがおかしい?
こんなときはサンプルプログラムを、ということで
http://code.msdn.microsoft.com/windowsdesktop/Direct3D-Tutorial-Win32-829979ef
からダウンロードしてソースコードを見てみる。

#include “d3d11.h”
でした。どうやらDXSDK2010とはファイル名が変わっているみたい。
インクルードパスは、SDKインストール時点で設定されるらしい。とくに必要なし。

次に簡単なプログラム、DirectX11のデバイスを作成して削除するだけ
_tWinMainのメイン メッセージ ループの直前に挿入

	UINT createDeviceFlags = 0;
#ifdef _DEBUG
	createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
	D3D_FEATURE_LEVEL featureLevels[] =
	{
		D3D_FEATURE_LEVEL_11_0,//DirectX11のみ 10以降は無視
	};
	ID3D11Device* device;
	ID3D11DeviceContext* dv_ctx;
	D3D_FEATURE_LEVEL feature_level;
	HRESULT hr
		= D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL,
					createDeviceFlags,featureLevels, 1 ,D3D11_SDK_VERSION,
					&device, &feature_level, &dv_ctx);
	//デバイス作成に成功したらメッセージボックス表示
	if(SUCCEEDED(hr)){
		MessageBox(NULL, L"成功", L"DirectX11", MB_OK);

		dv_ctx->Release();
		device->Release();
	}

当然のようにリンクエラーがでるので
#pragma comment( lib, “d3d11.lib” )
を追加。コンパイル、リンク成功。
リンクのパス設定も不要でした。
できたプログラムを実行、デバイス作成成功のメッセージボックスが表示される。
準備完了。

簡単にVS2012でのDirectX11プログラミングの準備が終了しました。
・WindowsSDKをインストール
・DXSDK2010とはインクルードファイルが少し違う

Microsoft Visual Studio Express 2012 for Windows Desktop

投稿日:

最初は、以前に購入したVisual Studio 2008を使用する予定でしたが、少し古いのでVS2012に変更します。DirectXのプログラムだけなので、無料で利用できるVisual Studio Express 2012で十分だと思います。仕事ではないので安定性なども不要だし、情報が少なそうなのでここを見てくれる人が増えるかも。

早速インストールしてみる。
Visual Studio Express 2012 for Windows Desktopでググるとすぐに発見。
Microsoftのサイトからダウンロードしてインストール。
30日まで制限なしで使用でき、それ以上は登録(無料)が必要みたいなので登録。
Visual Studio Express 2012の登録の前にMicrosoftへの登録が必要でしたが、すでにXBOX Live用にアカウントを作成していたのでそのまま利用してVS2012の登録完了。
ただ、登録時の個人情報が会社員前提のものだったので少し戸惑いましたが、記入できる項目だけ入力。
少し不安が残るけど……本格的なプログラムを公開するようになれば製品版を購入予定。

早速起動して新規プロジェクト作成でWin32アプリケーションを作成、コンパイル実行、ウインドウ表示までできました。これからDirectX11のプログラムをどうやって作成するか調査開始。

 

 

 

 

PC環境
OS : Windows 7 Professional 64bit
CPU : AMD PhenomII X4 905e Processor
メモリ:8GB