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で不安がなくなってからはうやむやになってしまっています。
気が向いたらチェックします(報告はもちろん歓迎)。