Directx9学习(八)初识texture(3)
来源:互联网 发布:影子网络真的很恐怖吗 编辑:程序博客网 时间:2024/06/08 02:58
2017.08.31
今天了解一下对Sprite进行矩阵变换
对一个Sprite进行矩阵操作,可以对他一次性的进行平移,旋转,缩放,还是非常犀利的。
我们需要构造一个矩阵,然后设置这个矩阵,最后对Sprite做一个矩阵变换,就能得到想要的效果。
比较重要的变换函数:D3DXMatrixTransformation2D
D3DXMATRIX* WINAPI D3DXMatrixTransformation2D( D3DXMATRIX *pOut, CONST D3DXVECTOR2* pScalingCenter, FLOAT ScalingRotation, CONST D3DXVECTOR2* pScaling, CONST D3DXVECTOR2* pRotationCenter, FLOAT Rotation, CONST D3DXVECTOR2* pTranslation );
这个函数传递的参数:矩阵指针(会在这里给矩阵赋值),缩放中心点,旋转缩放值,缩放大小,中心点,旋转弧度,平移。
首先需要创建矩阵,这个矩阵由16个浮点数组成,排成4行4列,包含了对Sprite进行的变换
D3DXMATRIX matrix; //矩阵这个矩阵会在后面写好平移旋转缩放后由上面的函数填充完成
然后是缩放和旋转中心,都是D3DXVECTOR2类型的变量,分别表示x和y上的缩放值和以哪个点位中心进行旋转,这个中心和缩放有关
D3DXVECTOR2 scale(1.0f, 1.0f); //缩放大小D3DXVECTOR2 center(0.0f, 0.0f); //旋转中心先声明,后面再修改
然后是旋度数,d3d对于旋转角是用的弧度制表示,所以在定义旋转角度(我们习惯用角度degree)后再定义一个函数将角度转为弧度
float rotationDeg = 0.0f; //弧度const float pi = 3.14159;const float pi_under_180 = pi / 180.0f;//角度转弧度float Deg2Rad(float degree){return degree * pi_under_180;}
然后是平移,将图片沿着x和y平移多少个单位(相对于世界而不是自身),是D3DXVECTOR2类型
D3DXVECTOR2 trans(0.0f, 0.0f); //平移
接着就可以给矩阵赋值了
D3DXMatrixTransformation2D(&matrix, NULL, 0.0f, &scale, ¢er, rotationRad, &trans);//第二个参数一般设置为空,它的效果可以由平移达到,第三个参数不知道什么效果,我试了好几个值都没有什么变化- -
最后利用
sprite->SetTransform(&matrix);来进行最后的矩阵变换
最后在画的时候,Draw函数的第4个参数(位置参数)最好不要用(最好写成NULL),因为是用矩阵变换来处理
sprite->Draw(texture, NULL, NULL, NULL, D3DCOLOR_XRGB(255, 255, 255));
下面是几个对比
原图:
缩放到和窗口一样大
float scaleX = (float)SCREENW / (float)info.Width;float scaleY = (float)SCREENH / (float)info.Height;scale = D3DXVECTOR2(scaleX , scaleY ); //缩放大小
缩放2倍+平移100,100+旋转45度
基本的操作就是这样,然后我试了一下D3DXMatrixTransformation2D的第二个参数,也就是缩放中心点:
这是放大2倍以后的图像:
当我把第二个参数设置为 D3DXVECTOR2(100,100) 的时候(这里应该是一个地址):
然后把它设置成D3DXVECTOR2(0,0),然后设置平移变量trans = D3DXVECTOR2(-100,-100);
结果和上图一样
所以这第二个参数一般都置位NULL(或(0,0)),然后利用平移来修改位置。
阅读全文
0 0
- Directx9学习(八)初识texture(3)
- Directx9学习(七)初识texture(1)
- Directx9学习(七)初识texture(2)
- DirectX9学习(一)
- DirectX9学习(二)
- Directx9学习(五)输入
- DirectX9.0学习(二):Direct3D基础
- DirectX9学习(四)装载位图
- Directx9学习(六)第一个小游戏
- 八皇后问题(初识)
- DirectX9.0 开发学习(一):向量几何基础知识
- SQLite初识(八)数据库--查询数据
- 翻译 managed DirectX9(第一章)
- managed DirectX9(第二章)
- 深入Managed DirectX9(二)
- 深入Managed DirectX9(三)
- 深入Managed DirectX9(四)
- 深入Managed DirectX9(五)
- 【搜狐笔试题】产品包装
- Python 3实现k-邻近算法以及 iris 数据集分类应用
- 正则表达式整理
- java解析HL7协议报文工具(v24版)
- Window下python 2.73安装pip
- Directx9学习(八)初识texture(3)
- haoi2013软件安装解题报告
- Over子句开窗函数
- java笔记(七)ServerSocket跟Socket
- 小试牛刀
- Devexpress:在GridControl中使用BindingList
- 解决Hibernate 注解在属性上 ,多对一,一对一懒加载 当调用one那一方getId 也会查数据库的问题
- linux下搭建git服务器全过程
- javascript深入理解js闭包