テクスチャはりはり(3Dデータ)

最初のサンプルではテクスチャを使わなかったので、以下のような定義でしたが

//頂点フォーマット
struct D3DVERTEXCOR {
	float   x,y,z;	//	座標
	DWORD   color;	//	頂点カラー

	enum { FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE } ;
};

テクスチャを扱う場合、テクスチャのUV値が必要になり、以下のようになりました

//頂点フォーマット
struct D3DVERTEXTEX1 {
	float   x,y,z;	//	座標
	float   u1,v1;	//	テクスチャのUV値

	enum { FVF = D3DFVF_XYZ | D3DFVF_TEX1 } ;
};

「d3d9types.h」に記述されている部分です。

// Flexible vertex format bits
//
#define D3DFVF_RESERVED0        0x001
#define D3DFVF_POSITION_MASK    0x400E
#define D3DFVF_XYZ              0x002
#define D3DFVF_XYZRHW           0x004
#define D3DFVF_XYZB1            0x006
#define D3DFVF_XYZB2            0x008
#define D3DFVF_XYZB3            0x00a
#define D3DFVF_XYZB4            0x00c
#define D3DFVF_XYZB5            0x00e
#define D3DFVF_XYZW             0x4002

#define D3DFVF_NORMAL           0x010
#define D3DFVF_PSIZE            0x020
#define D3DFVF_DIFFUSE          0x040
#define D3DFVF_SPECULAR         0x080

#define D3DFVF_TEXCOUNT_MASK    0xf00
#define D3DFVF_TEXCOUNT_SHIFT   8
#define D3DFVF_TEX0             0x000
#define D3DFVF_TEX1             0x100
#define D3DFVF_TEX2             0x200
#define D3DFVF_TEX3             0x300
#define D3DFVF_TEX4             0x400
#define D3DFVF_TEX5             0x500
#define D3DFVF_TEX6             0x600
#define D3DFVF_TEX7             0x700
#define D3DFVF_TEX8             0x800

#define D3DFVF_LASTBETA_UBYTE4   0x1000
#define D3DFVF_LASTBETA_D3DCOLOR 0x8000

#define D3DFVF_RESERVED2         0x6000  // 2 reserved bits

だいたい、この辺だけを覚えておけば、良さそうですね

D3DFVF_XYZ     :頂点座標(変換前)
                (D3DFVF_XYZRHW フラグと共に使うことはできない)
D3DFVF_XYZRHW  :頂点座標(変換後)
                (D3DFVF_XYZ フラグと共に使うことはできない)
D3DFVF_NORMAL  :頂点法線ベクトル
                (D3DFVF_XYZRHW フラグと共に使うことはできない)
D3DFVF_DIFFUSE :ディフューズ色
D3DFVF_SPECULAR:鏡面反射色(スペキュラ色)
D3DFVF_TEX0-8  :テクスチャのUV値

以前、マルチテクスチャの実験をしたとき
D3DFVF_TEX1 | D3DFVF_TEX2
と書くのだと勘違いした時もありました「D3DFVF_TEX2」だけでよいですね

各フラグの情報です。

D3DFVF_XYZ       :float	x,y,z;
D3DFVF_XYZRHW    :float	x,y,z,rhw;
D3DFVF_NORMAL    :float	nx,ny,nz;
D3DFVF_DIFFUSE   :DWORD	color;
D3DFVF_SPECULAR  :DWORD	specular;
D3DFVF_TEX0-8    :float	u1,v1;

全部入りの場合は、こんな感じですかね

//頂点フォーマット
struct D3DVERTEXTEX1 {
	float	x,y,z;	// 座標
	float	nx,ny,nz;	// 法線
	DWORD	color;	// ディフューズ色	
	DWORD	specular;	// スペキュラ色
	float	u1,v1;	// テクスチャのUV値

	enum { FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1 } ;
};