矩阵操作
超级小教程
现在假设你已经知道D3D的Render函数里是干什么的了,就是渲染一切3D对象的地方。但是想用d3d作动画还不知所措。
首先世界矩阵和视图矩阵,投影矩阵概念要明确,这里就不说了。
用d3d作简单动画主要有这么几个函数,平移,旋转,缩放,也是矩阵的三种基本变换当然矩阵的处理还有求逆等。所以D3DXMatrixRotationX D3DXMatrixTranslation D3DXMatrixScaling等函数必须会用,这里也不说了。
//一组动画 D3DXMatrixTranslation(&matMoveRight9,-1.5,0,0); //平移 D3DXMatrixRotationX(&matRotationX, timeGetTime()/1.0f); D3DXMatrixMultiply(&mAnimition1,&matRotationX,&matMoveRight9); m_pd3dDevice->SetTransform(D3DTS_WORLD, &mAnimition1); m_pMeshFront->DrawSubset(0); //Rotation(); //第二组动画 //m_matAni.SampleScalling(); D3DXMatrixTranslation(&matMoveLeft9,1.5,0,0); //平移 D3DXMatrixRotationY(&matRotationY, timeGetTime()/1.0f); D3DXMatrixMultiply(&mAnimition2,&matRotationY,&matMoveLeft9); m_pd3dDevice->SetTransform(D3DTS_WORLD, &mAnimition2); m_pMeshMe->DrawSubset(0);
产生模型你应该知道如何产生,我就没用什么,就用的默认的茶壶,因为我不会画画。所以即使以后出来了小的3D游戏我也基本上考虑一切都用茶壶来做模型。会了三种矩阵变换后,做画关键就在D3DXMatrixMultiply函数上,这个函数有三个参数,第一参数是输出的矩阵,所以不管你进行了多少次的矩阵乘积运算,而这个结果一定是唯一的,千万记注。矩阵成绩是后两个参数进行乘积,其先后是有顺序的。第二个参数和第三个参数是有顺序的现在假设你想先平移,那就用D3DXMatrixTranslation产生一个矩阵A,然后你想旋转,那你就用D3DXMatrixRotationX等产生一个矩阵B, 然后你再通过D3DXMatrixMultiply将两个矩阵乘积,生成的结果放入矩阵C 如果顺序是A x B就是先平移后旋转,如果是B x A就是先旋转后平移。注意这个顺序然后将此类用法不停的想做更多的效果吧。当然不要停在这里,你没有发现,即使是再旋转 移动 缩放,物体还停留在原地吗?也就是仍然是屏幕狭小的范围,所以摄影机的移动你要尽快的控制好它,并且你最好在屏幕外画一些模型,然后试图让摄影机靠近它,寻找它,这样你就看到离你很远的物体了,你会发现原来3D的世界真是太大了,我们看见的仅仅是个小屏幕而已。再后来你就试着在屏幕外画了更多的物体,你通过鼠标和键盘不停的移动摄影机,然后你发现好像还缺少什么,我们缺少地面和天空而且我们仅仅移动的是摄影机,我们还没有角色。所以等会控制摄影机了尽快去学习如何绘制地面和天空以及角色吧。当这几种元素或者更多的元素都搞定后,我们该发现该是考虑如何将资源和逻辑相分离的时候了,或者该考虑优化画面纹理贴图,什么混合了,关于视觉效果而非动画也是 3D的一项重要技术,基本的3D动画已经让我等初学者很激动了,如果绘制的物体更逼真些更好看些就更激动了,在这里我非常不赞同网上说游戏里不用高模的说法,只是我们环境不好而已,国外的大作不都是高模和高特效来耗费显卡和机器吗?只有这样才能推动游戏和硬件。所以我们业余外全可以不管那么多,就是要耗费计算机。
浙公网安备 33010602011771号