- A+
所属分类:Windows游戏开发 原创文章
现在来看看DirectX
对精灵的变换
平移,旋转,缩放
修改一下上次显示精灵图片的代码
在Game_Run()中加入修改,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if (d3ddev->BeginScene()) { float scaling = 0.5; spriteobj->Begin(D3DXSPRITE_ALPHABLEND); D3DXVECTOR2 scale = D3DXVECTOR2(scaling, scaling); D3DXVECTOR2 tran = D3DXVECTOR2(300, 200); D3DXVECTOR2 rotateCenter = D3DXVECTOR2(info.Width*scaling / 2, info.Height*scaling / 2); D3DXMatrixTransformation2D(&matrix, NULL, NULL, &scale, &rotateCenter, 3.14, &tran); spriteobj->SetTransform(&matrix); //spriteobj->Draw(img, NULL, NULL, &D3DXVECTOR3(200,300,0), D3DCOLOR_XRGB(255, 255, 255)); spriteobj->Draw(img, NULL, NULL, NULL, D3DCOLOR_XRGB(255, 255, 255)); spriteobj->End(); d3ddev->EndScene(); d3ddev->Present(NULL, NULL, NULL, NULL); } |
scaling是缩放因子
D3DXVECTOR2是一个二维向量
一个点,两个数字等(这么理解)
重点还是那个将平移,旋转,缩放
合成一个矩阵的函数
下面看看它的定义和参数
12345678910111213141516171819202122232425262728293031323334353637 D3DXMATRIX* D3DXMatrixTransformation2D(_Inout_ D3DXMATRIX *pOut,_In_ const D3DXVECTOR2 *pScalingCenter,_In_ FLOAT pScalingRotation,_In_ const D3DXVECTOR2 *pScaling,_In_ const D3DXVECTOR2 *pRotationCenter,_In_ FLOAT Rotation,_In_ const D3DXVECTOR2 *pTranslation);* pOut [in, out]Type: D3DXMATRIX*指向D3DXMATRIX矩阵结构体的指针* pScalingCenter [in]Type: D3DXVECTOR2*一个二维向量,缩放的中心点pScalingRotation [in]Type:FLOAT缩放的旋转因子pScaling [in]Type: D3DXVECTOR2*一个二维向量,缩放的大小pRotationCenter [in]Type: D3DXVECTOR2*一个二维向量,旋转中心点Rotation> [in]Type: FLOAT旋转的弧度, = 旋转的角度/180 * PIpTranslation [in]Type: D3DXVECTOR*一个二维向量,平移的距离大小
这个函数很简单,参数看起来一目了然
得到了变换矩阵之后
就要设置这个矩阵进行变换
spriteobj->SetTransform(&matrix);
最后Draw出来就行了
注意:Draw中的位置参数设为NULL。