新手问一个DirectX渲染X文件的影子有关问题

新手问一个DirectX渲染X文件的影子问题
我按照龙书里写的渲染茶壶影子的格式渲染X文件的影子,结果X文件本身的颜色变成红色了,反而影子的颜色变成X文件本身的颜色了!怎么回事!
我是按照下面这个格式写的!
void RenderShadow()
{
  Device->SetRenderState(D3DRS_STENCILENABLE, true);
  Device->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL);
  Device->SetRenderState(D3DRS_STENCILREF, 0x0);
  Device->SetRenderState(D3DRS_STENCILMASK, 0xffffffff);
  Device->SetRenderState(D3DRS_STENCILWRITEMASK, 0xffffffff);
  Device->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP);
  Device->SetRenderState(D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP);
  Device->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_INCR); // increment to 1

// position shadow
D3DXVECTOR4 lightDirection(0.707f, -0.707f, 0.707f, 0.0f);
D3DXPLANE groundPlane(0.0f, -1.0f, 0.0f, 0.0f);

D3DXMATRIX S;
D3DXMatrixShadow(
&S,
&lightDirection,
&groundPlane);

D3DXMATRIX T;
D3DXMatrixTranslation(
&T,
TeapotPosition.x,
TeapotPosition.y,
TeapotPosition.z);

D3DXMATRIX W = T * S;

Device->SetTransform(D3DTS_WORLD, &W);
// alpha blend the shadow
Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

D3DMATERIAL9 mtrl = d3d::InitMtrl(d3d::BLACK, d3d::BLACK, d3d::BLACK, d3d::BLACK, 0.0f);
mtrl.Diffuse.a = 0.5f; // 50% transparency.

// Disable depth buffer so that z-fighting doesn't occur when we
// render the shadow on top of the floor.
Device->SetRenderState(D3DRS_ZENABLE, false);

Device->SetMaterial(&mtrl);
Device->SetTexture(0, 0);
Teapot->DrawSubset(0);

Device->SetRenderState(D3DRS_ZENABLE, true);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
Device->SetRenderState(D3DRS_STENCILENABLE, false);
}

------解决方案--------------------
顶一下