読者です 読者をやめる 読者になる 読者になる

D3DXVECTOR3を継承したい!

最近久しぶりにDirectXをいじっております.

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を頂点バッファに渡してもよさそうだ.