くねくねサンプル(解説)

■「D3DFVF_XYZB1」って最近使わないのですが
どうも、ハードでサポートしてないケースなどあるので、あまし使っていないのですが
今回、使用して見ようと思います
■頂点フォーマット
こんな感じですかね

struct D3DVERTEXB1 {
	float   x,y,z;
	float	blend1;

	enum { FVF = D3DFVF_XYZB1  } ;
};

■ウエイトを使う事を宣言

	//-----------------------------------------
	//	ウエイト1個使う宣言
	pD3DDevice->SetRenderState(D3DRS_VERTEXBLEND, D3DVBF_1WEIGHTS);

■2つのマトリックスを登録

	//-----------------------------------------
	//ワールド座標の回転
	D3DXMatrixRotationZ( &matWorld2, (sin(ff))*3.14159/2.0f );
	D3DXMatrixTranslation( &matWorld1, 10.0f, 0.0f, 0.0f );
	matWorld2	*= matWorld1;
	ff	+=0.01;
	D3DXMatrixTranslation( &matWorld1, 0.0f, 0.0f, 0.0f );
	pD3DDevice->SetTransform( D3DTS_WORLDMATRIX(0), &matWorld1 );
	pD3DDevice->SetTransform( D3DTS_WORLDMATRIX(1), &matWorld2 );

■登録

	//-----------------------------------------
	//	モデル登録
	D3DVERTEXB1 vtx[ 10 ]={
		{   0.0f,  5.0f, 0.0f, 1.00f  },
		{   0.0f, -5.0f, 0.0f, 1.00f  },
		{   5.0f,  5.0f, 0.0f, 0.75f  },
		{   5.0f, -5.0f, 0.0f, 0.75f  },
		{  10.0f,  5.0f, 0.0f, 0.50f  },
		{  10.0f, -5.0f, 0.0f, 0.50f  },
		{  15.0f,  5.0f, 0.0f, 0.25f  },
		{  15.0f, -5.0f, 0.0f, 0.25f  },
		{  20.0f,  5.0f, 0.0f, 0.00f  },
		{  20.0f, -5.0f, 0.0f, 0.00f  },
	};
	pD3DDevice->SetFVF( D3DVERTEXB1::FVF );
	pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 8, vtx, sizeof(D3DVERTEXB1) );

ブレンド値を参考に、どちらのマトリックスにどれだけ比重を置くかを計算していきます。