前言:
在上篇文章(DirectX学习笔记三)中,我详细的说明了如何利用线框模式绘制可旋转的正方体。链接:点击打开链接。但是应该看到的是,如果我们通过创建三角形单元来创建3D物体是十分繁琐的事情。幸运的是,在D3DX库中提供了一些用于生成简单3D物体的网格数据方法。
如:利用网格数据创建一个茶壶:
1. 我们需要使用ID3DXMesh网格数据结构接口来创建我们的茶壶网格数据,这时我们需要使用此函数:
HRESULT D3DXCreateTeapot(LPDIRECT3DDEVICE9 pDevice, LPD3DXMESH* ppMesh, LPD3DXBUFFER* ppAdjacency)
下面是一个使用此函数的例子:
ID3DXMesh *mesh = 0;
D3DXCreateTeapot(_device, &mesh, 0);
那么我们为了绘制一个可旋转的茶壶都需要做哪些工作呢:
1.生成网格数据:
D3DXCreateTeapot(Device, &Teapot, 0);
2.取景变换:
在当摄像机的位置和朝向任意时,进行一些操作会造成效率低下很是麻烦。为了简化运算,我们将摄像机变换到世界坐标系的原点,并旋转摄像机使其光轴与世界坐标系的z轴朝向一致。要特别注意的是,世界中的所有物体都会随之摄像机变换,以保证摄像机的视场恒定。
我们先使用D3DXMatrixLookAtLH(...)函数来获取一个取景变换矩阵,然后利用::SetTransform(..)方法设定:
//取景变换
D3DXVECTOR3 position(0.0f, 0.0f, -5.0f);
D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &target, &up)