物理エンジンBulletのC#用ラッパー,BulletSharpのSharpDX向けビルド方法を示します.
2014年12月時点のものです,すぐにできなくなるかもしれません.
BulletSharpのビルド方法に則って進めていきます.
マニュアル通り,SVNリポジトリからソースを取得します.Windowsで普段SVNを使っておらず,さくっとソースコードだけ取得したい場合は,以下で紹介されているWindows用SVNコマンドを使うと便利です.
上記のSVNコマンドが入った同じフォルダにhoge.batを作成,中に
svn checkout http://bullet.googlecode.com/svn/trunk/ bullet svn checkout http://bulletsharp.googlecode.com/svn/trunk/ bulletsharp
と書いて実行すればソースの取得が終わります.
SharpDXもダウンロードしておきます,
から,バイナリをダウンロード,先にダウンロードしたbullet,bulletsharpフォルダがある同じフォルダに
SharpDX
フォルダを作り,その中に展開したSharpDXバイナリの中身(Bin,Buildフォルダなど)をコピーします.
cmakeを使ってビルド用のVisualStudioソリューションを作成します.cmakeをインストール,起動して,
[Brouse Source],[Brouse Build]先ほどダウンロードしたbulletフォルダを指定します.[Configure]するとVisual Studioのバージョン指定が出てくるのでVisual Studio 2013を指定,64bit用がほしい人は64bitのものを指定します.
設定項目一覧が表示されるのでUSE_MSVC_RUNTIME_LIBRARY_DLLにチェックを入れるのを忘れずに.で,[Generate].
作成されたBULLET_PHYSICS.slnを開き,構成を[Debug]から[MinSizeRel]にします.
で,ビルドするのですが,エラーがでます.
error X3000: unrecognized identifier 'MSTRINGIFY'
⇒HLSLファイルがビルド対象になってしまっているため出てきます.プロジェクトBulletSoftBodySolvers_DX11の.hlslファイルすべて,[プロパティ]⇒[項目の種類]で[ビルドに含めない]にしておきます.
error C2039: 'max' : 'std' のメンバーではありません。
⇒#include <algorithm> 追加
#include "hacdICHull.h" #include <limits> #include <algorithm> //追加
error C2375: 'fmax' : 再定義されています。異なるリンケージです。
⇒fmaxとfmin関数削除
参考:
これでビルドされると思います.
bulletsharp\vs2013\BulletSharp.vcxprojをエディタで開き,以下のように書き換えます.
<TargetFrameworkVersion Condition="'$(TargetFrameworkVersion)'==''">v4.5.1</TargetFrameworkVersion>
↓
<TargetFrameworkVersion Condition="'$(TargetFrameworkVersion)'==''">v4.5</TargetFrameworkVersion>
デフォルトでは.Net Framework 4.5.1を対象にDLLがビルドされてしまうので,直接プロジェクトファイルを書き換えて4.5を対象にビルドするようにしておきます.(Visual Studioからはできないらしい)
プロジェクトを開いたら構成を[Release SharpDX]にします.
プロジェクトのプロパティを開き,[リンカー]⇒[全般]⇒[追加のライブラリディレクトリ]で"\msvc\2013"を削除します.
また[C/C++]⇒[全般]⇒[追加の#usingディレクトリ]で..\..\SharpDX\Bin\DirectX11-net40の箇所を自分が使用しているDLLのフォルダにします.
例えば,SharpDX Toolkit for Visual Studioを使用している場合は,..\..\SharpDX\Bin\DirectX11-Signed-net40に変更する必要があります.
(プロパティのプラットフォームがデフォルトでx64になっているので注意)
これでビルドが成功すれば,晴れてBulletSharp.dllが手に入りますので,これを使っていきましょう.