D3DXMatrixTranslation的有关问题

D3DXMatrixTranslation的问题
我贴了一个X文件,想按左键的时候让它用D3DXMatrixTranslation的办法让他平移
于是添加了
D3DXMATRIX W;
if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )
D3DXMatrixTranslation(&W,1.0f,0.0f,0.0f);
Device->SetTransform(D3DTS_WORLD, &W);
结果X文件被撕裂了。。变成乱七八糟的图形,
去掉if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )后正常。。这是怎么回事啊。。。
求指教

------解决方案--------------------
去掉if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )是什么意思?
D3DXMatrixTranslation(&W,1.0f,0.0f,0.0f)也跟着去掉了吗?
如果也跟着去掉了,那么矩阵W就是未初始化的不正确的值,用这个不正确的矩阵去旋转模型,渲染的结果就会混乱了。
------解决方案--------------------
static float r=1.0f;
if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )
r+=10.0f;

D3DXMatrixTranslation(&W,r,0.0f,0.0f);
你那样不按right的时候w为初始化。
------解决方案--------------------
刚才那代码错了,应该是

Device->SetTransform(D3DTS_WORLD, &yRot);

理论上来说,如果要实现控制,最好是这样
C/C++ code

static float x = 0.0f;
static float y = 0.0f;
static float z = 0.0f;
D3DXMATRIX xRot;
D3DXMATRIX yRot;
D3DXMATRIX zRot;

if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )
{
   x+=1.0f;
   D3DXMatrixTranslation(&xRot,x,y,z);
}

D3DXMATRIX World = xRot*yRot*zRot;
Device->SetTransform(D3DTS_WORLD, &World);