VertexShader 法線テスト+ダークカラー+スペキュラ

VertexShader 法線テスト」を参考に
まずはスペキュラの設定をONにします。
G9lib.cpp

	:
//------------------------------------------------------------------------------
//■テスト描画
//------------------------------------------------------------------------------
void	G9lib::TestDraw()
{
	D3DXMATRIX      matView;
	D3DXMATRIX      matProj;
	D3DXMATRIX      matWorld;

	pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0, 0);

	pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );	//	片面
	pD3DDevice->SetRenderState( D3DRS_LIGHTING,FALSE);		//	光源無効
	pD3DDevice->SetRenderState( D3DRS_SPECULARENABLE, TRUE );	//	スペキュラON

	pD3DDevice->BeginScene();
	//-----------------------------------------
	D3DXMatrixRotationY( &matWorld,timeGetTime()/5000.0f );
	D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(0.0f, -5.0f, 30.0f),	//	カメラの位置を表す3次元ベクトル
                                &D3DXVECTOR3(0.0f, 0.0f, 0.0f),		//	カメラの注視点を表す3次元ベクトル
                                &D3DXVECTOR3(0.0f, 1.0f, 0.0f));	//	上方向を表す3次元ベクトル
	D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 10.0f, 2000.0f );

	//-----------------------------------------
	D3DXMATRIX  m;
	D3DXMatrixTranspose(&m,&(matWorld * matView * matProj));	//転置行列 に変換
	pD3DDevice->SetVertexShaderConstantF(0,(float*)&m,4);		//視点・透視変換
	//-----------------------------------------
	//	モデル登録
	pD3DDevice->SetVertexShader(vShader);                  

	pD3DDevice->SetFVF(D3DVERNORMAL::FVF);
	pD3DDevice->SetStreamSource( 0, gVBuffer, 0, sizeof(D3DVERNORMAL) );
	pD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST , 0, sizeof(modelData)/sizeof(D3DVERNORMAL)/3 );
	//-----------------------------------------
	//	描画
	pD3DDevice->EndScene();
	pD3DDevice->Present(NULL, NULL, NULL, NULL);
}

スペキュラをONにするにはこの1行を足しています。

pD3DDevice->SetRenderState( D3DRS_SPECULARENABLE, TRUE );	//	スペキュラON

シェーダーの方ですが
vsample01.vsh

//c0-c3		ビュー+透視変換マトリックス
//c4		汎用固定値
//c5		平行光源向き
//c6		光源色
//c7		ダークカラー
//
//v0		頂点の座標値
//v1		法線情報

vs_1_1              // バージョン命令

def c4, 0.0f,  0.5f,  1.0f,  2.0f		// 汎用固定値
def c5, 0.566f,  0.566f,  0.566f,  0.0f	// 光源
def c6, 1.0f,  0.0f,  0.0f,  0.0f		// 光源色
def c7, 0.0f,  0.0f,  0.3f,  0.0f		// ダークカラー

dcl_position	v0	// 座標頂点宣言
dcl_normal	v1	// 法線

m4x4	oPos, v0, c0	// 頂点の設定

m3x3	r0, v1, c0
dp3	r0.w, r0, c5
mad	r0.x, r0.w, c4.y, c4.y
sub	r0.y, c4.z, r0.x		// r1.z	= 1.0 - r1.y

mul	r1, r0.x, c6
mad	oD0, r0.y, c7, r1		// 頂点カラー設定
mad	oD1, r0.x, r0.x, -c4.z	// スペキュラ値設定

最後にoD1にスペキュラ値を入れます、今回は適当な数値を入れてます(r0.xの1以上の成分をスペキュラ成分として使用しました)