首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

D3DXMatrixTranslation的有关问题

2012-03-29 
D3DXMatrixTranslation的问题我贴了一个X文件,想按左键的时候让它用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); 

热点排行