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);
理论上来说,如果要实现控制,最好是这样
我贴了一个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);