请教世界空间,摄象机空间变换的实现机制。。
看下面这段代码:
D3DXCreateTeapot(Device, &Objects[0], 0);
D3DXCreateTeapot(Device, &Objects[1], 0);
// ...
Device->SetTransform(D3DTS_WORLD, &ObjWorldMatrices[i]);
昨晚把矩阵变换搞懂了。
现在这个坐标系变换又不明白了,究竟内部都是怎么实现的?为何塞这些矩阵进去,就能得到一个世界坐标空间?
3D数学上讲,把一个坐标系旋转再平移,使其与另一个坐标系重合,这似乎也能理解。但这个SetTransform()函数,我越看,越想不明白。
若要我自己描述的话,就是每个局部坐标系的网格,都以同一个世界坐标系的(0, 0, 0)为原点。也就是要在世界坐标系中描述出每个局部网格在他们原先相对于原点的位置。
具体操作就是,定义一个矩阵用来当做“世界空间”,把每个要被变换的网格,都以此来重新进行平移,旋转。就是说重新向这个世界矩阵“看齐”。。但是一个矩阵似乎一次只能保存(变换)1个矩阵,我想不出怎么把多个网格整合在一起了。
越想越糊涂了- -
另外,还有摄象机空间的变换呢??
[解决办法]
settransform是当前所有要画的模型的顶点都会由d3d帮你乘那个矩阵。对于多个物体在不同的位置,你可以通过多次调用settransform来实现,流程如下
SetTransform(mat0);mesh0->DrawSubset();SetTransform(mat1);mesh1->DrawSubset();...SetTransform(matn);meshn->DrawSubset();