D3DXVECTOR3を継承したい!
最近久しぶりにDirectXをいじっております.
9から10への変化は結構大きいものがありますね.
流石に全体のプログラムの流れまでは9でHLSLを組む場合と変わらないですが,
インタフェース的な面でかなり変わってます.
個人的には新しい方が好きです.
さて,ところで,C++で作ってて,
D3DXVECTOR3を拡張したい!と思った時,どうしましょう.
普通に継承すると,なんかオブジェクトのサイズが変化してしまいそうです.
と思って調べてみると,こんな記事が
なるほど,C++でクラスのサイズってそんな感じなのか.
試しに.
std::cout << sizeof(D3DXVECTOR3) << std::endl; とすると,12だそうだ. float3つ分か. じゃぁ,サイズが変わらないようにすればよいので, 仮想でない関数だったら追加できると. なるほど. ってことで,
としても
std::cout << sizeof(Vec3d) << std::endl;
の結果は12となる.
これなら,Vec3dを頂点バッファに渡してもよさそうだ.
9から10への変化は結構大きいものがありますね.
流石に全体のプログラムの流れまでは9でHLSLを組む場合と変わらないですが,
インタフェース的な面でかなり変わってます.
個人的には新しい方が好きです.
さて,ところで,C++で作ってて,
D3DXVECTOR3を拡張したい!と思った時,どうしましょう.
普通に継承すると,なんかオブジェクトのサイズが変化してしまいそうです.
と思って調べてみると,こんな記事が
なるほど,C++でクラスのサイズってそんな感じなのか.
試しに.
std::cout << sizeof(D3DXVECTOR3) << std::endl; とすると,12だそうだ. float3つ分か. じゃぁ,サイズが変わらないようにすればよいので, 仮想でない関数だったら追加できると. なるほど. ってことで,
class Vec3d : D3DXVECTOR3 { public: Vec3d(void) {} Vec3d(const float* pf) : D3DXVECTOR3(pf) {} Vec3d(const Vec3d& v) : D3DXVECTOR3(v) {} Vec3d(const D3DXFLOAT16 * pf) : D3DXVECTOR3(pf) {} Vec3d(float x, float y, float z) : D3DXVECTOR3(x, y, z) {} ~Vec3d(void) {} float length() { return D3DXVec3Length(this); } };
としても
std::cout << sizeof(Vec3d) << std::endl;
の結果は12となる.
これなら,Vec3dを頂点バッファに渡してもよさそうだ.