traits
partixでは、プラットフォーム非依存にするため、
実数・ベクトル・行列などの型を外部から与えることになっています。
例えば、partixの利用は物理世界であるWorldの生成から
始まりますが、このWorldはテンプレートクラスであり、
生成時にはテンプレートパラメータとしてtraitsを与えなければなりません。
partixで使うtraitsはこのような構成になっている必要があります。
struct VectorTraits { typedef float real_type; typedef Vector vector_type; }; struct SampleTraits { typedef VectorTraits vector_traits; typedef float real_type; typedef Vector vector_type; typedef Matrix matrix_type; typedef int index_type; };
この構成は説明用に抜き出したものなので、実際にはこれだけでは
デフォルトパラメータの定義などが不足しています。
sample0.cppで定義しているのがほぼ最小の構成なので、
詳しくはそちらをご覧ください。
同様に、SampleTraits内で使われているVector、Matrixにも
演算子など最低条件がありますが、
これもgeometry.hpp で定義されているのが
ほぼ最小構成なので、これを参照してください。
ぶっちゃけD3DXVECTOR3、D3DXMATRIXだったらそのまま使用可能です
(sample1以降ではD3DXVECTOR3、D3DXMATRIXを直接使用しています)。
real_typeは実数(vector_typeやmatrix_typeの要素の型と同じ)、
index_typeはインデックスバッファの要素の型と同じもの、と
考えておけばよいでしょう。
ただし実装では、私の脳内でreal_type=floatとみなしてしまっているので
doubleにしてもうまく動かないかもしれません。ごめんなさい。
昔はdoubleでも動くようにしていた(というかdoubleで開発していた)のですが、
floatで不安がなくなってからはうやむやになってしまっています。
気が向いたらチェックします(報告はもちろん歓迎)。