D3D9学习笔记之精灵变换篇
程序员文章站
2022-07-02 11:02:52
...
内容:
- 如何旋转精灵
- 如何缩放精灵
- 如何平移精灵
- 如何对2D图形做矩阵变换
- 如何以动画的方式绘制精灵
需要的知识:
- 2D向量:由2个数组成的单位,指明了方向与大小 如D3DXVECTOR2 xl(2,3);
- 弧度:360度=6.28弧度,即2π,1度=(2π/360度),即1度=(π/180)弧度
使用方法:先使用精灵对象子函数D3DXMatrixTranstormation2D设置好矩阵,矩阵(参数1)应传递指针,其他参数是传达要怎么实现矩阵变换(如:大小变换,旋转,位移),第二步使用精灵对象子函数SetTransform(矩阵指针);最后就可以使用Draw函数渲染精灵对象了,使用Draw时不能指定渲染位置,应为第一步设置矩阵时,最后一个参数已经设置好了。
第一步:
D3DXMATRIX * D3DXMatrixTransformation2D(
D3DXMATRIX * pOut, //通过引用传递的目标矩阵
CONST D3DXVECTOR2 * pScalingCenter, //尺度向量
FLOAT pScalingRotation, //缩放值
CONST D3DXVECTOR2 * pScaling, //水平和垂直缩放的向量
CONST D3DXVECTOR2 * pRotationCenter, //旋转中心/轴矢量
FLOAT Rotation, //旋转角,需要弧度
CONST D3DXVECTOR2 * pTranslation //平移向量,绘制精灵的位置
);
D3DXMATRIX POUT; //4*4矩阵
FLOAT suofang = 1; //缩放因子,1为正常图片大小
D3DXVECTOR2 SUOFANG(suofang, suofang); //缩放向量
D3DXIMAGE_INFO info1;
D3DXGetImageInfoFromFile("liu.png", &info1);//获得文件尺寸
D3DXVECTOR2 ZHONGXING((info1.Width * suofang) / 2,
(info1.Height * suofang) / 2);//缩放因子
FLOAT du = 0; //角度值
FLOAT rotation = (3.14 / 180) * du; //将角度值转换成弧度
D3DXVECTOR2 trans(inta, intb);
D3DXMatrixTransformation2D(
&POUT,
NULL,
0,
&SUOFANG,
&ZHONGXING,
rotation,
&trans
);
第二步:
有了第一步之后,就可以使用下面这个函数告诉精灵对象,使用这个矩阵作为当前的变换
spriteobj->SetTransform(&POUT);
第三步:
可以使用Draw函数渲染啦,但是Draw函数渲染位置参数要为NULL,应为矩阵的位移向量已经指明了,要是填的话会怎样我也没试过,懒
我使用Draw渲染矩阵对象只要2个参数就可以了,第一个参数是纹理对象,最后一个参数是屏蔽色
spriteobj->Begin(D3DXSPRITE_ALPHABLEND); //锁住
spriteobj->Draw(texture, NULL, NULL, NULL,D3DCOLOR_XRGB(255,255,255)); //渲染
spriteobj->End(); //释放
完
上一篇: 性能优化-service进程防杀
下一篇: 抖音直播互动话术(玩主播练口才的段子)