求助DirectX的物体变换问题{Shader部分}!SetMatrix!
以下是我不懂的片段。。这段片段是画若干个球在屏幕上!
然后每隔10就放一个球!
1.不懂为什么要先D3DXMatrixInverse(&WIT, 0, &W);
D3DXMatrixTranspose(&WIT, &WIT);
2.HR(mFX->SetMatrix(mhWVP, &(W*mView*mProj)));
HR(mFX->SetMatrix(mhWorld, &W));
HR(mFX->SetMatrix(mhWorldInvTrans, &WIT));
这边的三个SetMatrix分别有什么用呢?
为什么这样就能把物体给变换好了呢?原先不是要用SetTransform么?
- C/C++ code
for(int z = -30; z <= 30; z+= 10) { D3DXMatrixTranslation(&W, -10.0f, 7.5f, (float)z); D3DXMatrixInverse(&WIT, 0, &W); D3DXMatrixTranspose(&WIT, &WIT); HR(mFX->SetMatrix(mhWVP, &(W*mView*mProj))); HR(mFX->SetMatrix(mhWorld, &W)); HR(mFX->SetMatrix(mhWorldInvTrans, &WIT)); HR(mFX->CommitChanges()); HR(mSphere->DrawSubset(0)); }
请各位高手帮帮小弟!此问题已经困扰小弟好久了!一直没能找到答案!
[解决办法]
1 平移,求逆,转置。
2 视图、投影,世界变换。
T^(-1)*A*T, 有点像是要 将一个物体搬移到坐标原点做变换,然后再搬移到原处。
就是为了变换矩阵好求一点。