欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

D3D9学习笔记之精灵变换篇

程序员文章站 2022-07-02 11:02:52
...

内容:

  1. 如何旋转精灵
  2. 如何缩放精灵
  3. 如何平移精灵
  4. 如何对2D图形做矩阵变换
  5. 如何以动画的方式绘制精灵

需要的知识:

  1. 2D向量:由2个数组成的单位,指明了方向与大小 如D3DXVECTOR2 xl(2,3);
  2. 弧度: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();									//释放

D3D9学习笔记之精灵变换篇
D3D9学习笔记之精灵变换篇
D3D9学习笔记之精灵变换篇