本博客的例子来自于《基于DirectX11的3D图形程序设计案例教程》

矩阵转换函数XMStoreFloat*x*(*表示正数,*×*矩阵)

如:XMStoreFloat4x4(以4×4矩阵为例)

函数定义:

VOID XMStoreFloat4x4([out] XMFLOAT4X4 *pDestination,         //存储数据的地址[in]  XMMATRIX   M                     //要存储的数据矩阵);

函数介绍:

是一个行主矩阵形式。要写出列主数据,需要在调用存储函数之前通过XMMatrixTranpose来替换XMMATRIX。

参考:https://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.storing.xmstorefloat4x4(v=vs.85).aspx

例子:

 XMFLOAT4X4 mScalFL;//利用XMStoreFloat4x4函数把XMMATRIX对象mScal的内容存入XMFLOAT4X4对象mScalFL中XMStoreFloat4x4(&mScalFL, mScal);

矩阵缩放函数:XMMatrixScaling

XMMatrixScaling

函数定义:

XMMATRIX XMMatrixScaling([in] float ScaleX,              //沿x轴缩放因子ScaleX[in] float ScaleY,               //沿y轴缩放因子ScaleX[in] float ScaleZ            //沿z轴缩放因子ScaleX);

参考:https://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.matrix.xmmatrixscaling(v=vs.85).aspx

例子:

    //声明3个XMMATRIX对象,//分别用来表示平移矩阵(mTrans),旋转矩阵(mRota),以及缩放矩阵(mScal)XMMATRIX mTrans, mRota, mScal;//第一步:生成缩放矩阵//调用XMMatrixScaling()函数用以生成缩放矩阵,该函数3个参数分别表示//在X,Y,Z轴上的缩放量。//在X, Y, Z轴缩小到1/5(即0.2),然后将生成的缩放矩阵**赋值给mScal**mScal = XMMatrixScaling(0.2f, 0.2f, 0.2f);//注意0.2形式,及时变为1,也只能写成1.0或1.//将生成的缩放矩阵打印到控制台上,**这里只是方便我们查看生成的矩阵,此步骤非必须**cout << "缩放矩阵为:" << endl;//由于重载的输出操作符<<是针对XMFLOAT4X4对象,所以这里要将XMMATRIX//对象转换为XMFLOAT4X4对象//首先声明一个XMFLOAT4X4对象XMFLOAT4X4 mScalFL;//利用XMStoreFloat4x4函数把XMMATRIX对象mScal的内容存入XMFLOAT4X4对象mScalFL中XMStoreFloat4x4(&mScalFL, mScal);cout << mScalFL;

矩阵平移函数:XMMatrixTranslation

XMMatrixTranslation

函数定义:

XMMATRIX XMMatrixTranslation([in] float OffsetX,             //x轴平移量[in] float OffsetY,              //y轴平移量[in] float OffsetZ               //z轴平移量);

参考:https://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.matrix.xmmatrixtranslation(v=vs.85).aspx

例子:

//声明3个XMMATRIX对象,//分别用来表示平移矩阵(mTrans),旋转矩阵(mRota),以及缩放矩阵(mScal)XMMATRIX mTrans, mRota, mScal;
//第三步:生成平移矩阵//在X轴平移1个单位,在Y轴平移2个单位,在Z轴平移-3个单位//调用函数XMMatrixTranslation生成平移矩阵,该函数3个参数分别表示在X,Y,Z轴上的平移量mTrans = XMMatrixTranslation(1.0f, 2.0f, -3.0f);//将生成的旋转矩阵打印到控制台上,方法同上,这里不再赘述cout << "平移矩阵为:" << endl;XMFLOAT4X4 mTransFL;XMStoreFloat4x4(&mTransFL, mTrans);cout << mTransFL;

矩阵旋转函数:XMMatrixRotationX

参考:https://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.matrix.xmmatrixrotationy(v=vs.85).aspx

例子:

//声明3个XMMATRIX对象,//分别用来表示平移矩阵(mTrans),旋转矩阵(mRota),以及缩放矩阵(mScal)XMMATRIX mTrans, mRota, mScal;
XMMATRIX XMMatrixRotationX([in] float Angle             //绕x轴旋转的角度,以弧度表示。当沿旋转轴向原点看时,角度是顺时针测量的。);
XMMATRIX XMMatrixRotationY([in] float Angle             //绕y轴旋转的角度,以弧度表示。当沿旋转轴向原点看时,角度是顺时针测量的。);
XMMATRIX XMMatrixRotationZ([in] float Angle             //绕z轴旋转的角度,以弧度表示。当沿旋转轴向原点看时,角度是顺时针测量的。);

将三者整合起来就是刚体变换

相关知识可以参考我的另一博客(用matlab写的,可以看讲解,代码不用看):

https://blog.csdn.net/weixin_41649786/article/details/82115829

例子:

//第四步:将上面生成的3个变换矩阵组合成一个最终的变换矩阵//首先声明一个XMMATRIX对象用来存放最终的变换矩阵XMMATRIX mFinal;//利用XMMatrixMultiply来完成矩阵的相乘,//**注意**:由于矩阵相乘不具有交换性,所以做乘法时各个变换矩阵的顺序很重要//教材的例子的变换顺序是缩小(mScal)->旋转(mRota)->平移(mTrans)//所以这里首先将mScal和mRota相乘的中间结果放入mFinal中mFinal = XMMatrixMultiply(mScal, mRota);//再将中间结果与mTrans相乘,得到最终结果并覆盖先前的mFinalmFinal = XMMatrixMultiply(mFinal, mTrans);//将生成的变换矩阵打印到控制台上cout << "最终变换矩阵为:" << endl;XMFLOAT4X4 mFinalFL;XMStoreFloat4x4(&mFinalFL, mFinal);cout << mFinalFL;

矩阵相乘函数:XMMatrixMultiply

XMMatrixMultiply

函数定义:

XMMATRIX XMMatrixMultiply([in] XMMATRIX M1,          //第一个相乘的矩阵[in] XMMATRIX M2          //第二个相乘的矩阵);

参考:https://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.matrix.xmmatrixmultiply(v=vs.85).aspx、

例子,前文中已经包含了

感兴趣的可以看完整代码:来自于《基于DirectX11的3D图形程序设计案例教程》

//本例由于需要使用XNA函数库
//所以需要包含"d3dcompiler.h"和"xnamath.h"
#include<iostream>
#include<d3dcompiler.h>
//#include<xnamath.h>//在从Windows8开始,DirectX 11中xnamath.h就去掉了,替换成DirectXMath.h头文件。//所以如果遇到一些在旧系统上开发的代码示例,如果提示找不到xnamath.h的话,可以用下面两行代码代替
#include <DirectXMath.h>
using namespace DirectX;using namespace std;//重载"<<"操作符,让XMVECTOR的对象也可以使用"cout<<"进行输出,
//向量会以(X, X, X)形式输出到屏幕上
ostream& operator << (ostream& os, XMVECTOR u)
{//XMVectorGetX(),XMVectorGetY(),XMVectorGetZ(), XMVectorGetW()//这4个函数用来获取XMVECTOR的4个分量os << "(" << XMVectorGetX(u)<<","<< XMVectorGetY(u)<<","<< XMVectorGetZ(u)<<","<< XMVectorGetW(u)<<")"<< endl;return os;
}//重载"<<"操作符,让XMFLOAT4X4的对象也可以使用"cout<<"进行输出,
//矩阵会以行-列的形式输出到屏幕上
//注意:这里使用XMFLOAT4X4对象作为参数而不是XMMATRIX作为参数
//      这是由于因为系统(x64/x86)不同会存在对齐的问题,详细说明
//      参考教材第  页。使用XMMATRIX会报以下错误
//      error C2719: “m”: 具有 __declspec(align('16')) 的形参将不被对齐
//      大家可以试一下,如果这里使用XMMATRIX做为参数会有什么结果
ostream& operator << (ostream& os, XMFLOAT4X4 m)
{for(int i=0; i < 4; i++){for(int j=0; j < 4; j++){//通过XMFLOAT4X4的重载括号操作符引用矩阵元素os<<"\t"<<m(i, j)<<" ";}os << endl;}os << endl;return os;
}int main()
{//声明3个XMMATRIX对象,//分别用来表示平移矩阵(mTrans),旋转矩阵(mRota),以及缩放矩阵(mScal)XMMATRIX mTrans, mRota, mScal;//第一步:生成缩放矩阵//调用XMMatrixScaling()函数用以生成缩放矩阵,该函数3个参数分别表示//在X,Y,Z轴上的缩放量。//在X, Y, Z轴缩小到1/5(即0.2),然后将生成的缩放矩阵**赋值给mScal**mScal = XMMatrixScaling(0.2f, 0.2f, 0.2f);//将生成的缩放矩阵打印到控制台上,**这里只是方便我们查看生成的矩阵,此步骤非必须**cout<<"缩放矩阵为:"<<endl;//由于重载的输出操作符<<是针对XMFLOAT4X4对象,所以这里要将XMMATRIX//对象转换为XMFLOAT4X4对象//首先声明一个XMFLOAT4X4对象XMFLOAT4X4 mScalFL;//利用XMStoreFloat4x4函数把XMMATRIX对象mScal的内容存入XMFLOAT4X4对象mScalFL中XMStoreFloat4x4(&mScalFL, mScal);cout<<mScalFL;//第二步:生成旋转矩阵//绕Y轴旋转45度,即1/4PI//调用XMMatrixRotationY()函数用以生成旋转矩阵,该函数只有一个参数为旋转的弧度//XM_PIDIV4为XNA库定义的数据常量表示1/4PImRota = XMMatrixRotationY(XM_PIDIV4);//将生成的旋转矩阵打印到控制台上,方法同上,这里不再赘述cout<<"旋转矩阵为:"<<endl;XMFLOAT4X4 mRotaFL;XMStoreFloat4x4(&mRotaFL, mRota);cout<<mRotaFL;//第三步:生成平移矩阵//在X轴平移1个单位,在Y轴平移2个单位,在Z轴平移-3个单位//调用函数XMMatrixTranslation生成平移矩阵,该函数3个参数分别表示在X,Y,Z轴上的平移量mTrans = XMMatrixTranslation(1.0f, 2.0f, -3.0f);//将生成的旋转矩阵打印到控制台上,方法同上,这里不再赘述cout<<"平移矩阵为:"<<endl;XMFLOAT4X4 mTransFL;XMStoreFloat4x4(&mTransFL, mTrans);cout<<mTransFL;//第四步:将上面生成的3个变换矩阵组合成一个最终的变换矩阵//首先声明一个XMMATRIX对象用来存放最终的变换矩阵XMMATRIX mFinal;//利用XMMatrixMultiply来完成矩阵的相乘,//**注意**:由于矩阵相乘不具有交换性,所以做乘法时各个变换矩阵的顺序很重要//教材的例子的变换顺序是缩小(mScal)->旋转(mRota)->平移(mTrans)//所以这里首先将mScal和mRota相乘的中间结果放入mFinal中mFinal = XMMatrixMultiply(mScal,mRota);//再将中间结果与mTrans相乘,得到最终结果并覆盖先前的mFinalmFinal = XMMatrixMultiply(mFinal,mTrans);//将生成的变换矩阵打印到控制台上cout<<"最终变换矩阵为:"<<endl;XMFLOAT4X4 mFinalFL;XMStoreFloat4x4(&mFinalFL, mFinal);cout<<mFinalFL;//按照例子声明一个XMVECTOR对象//例子中向量为3维向量,而XMVectorSet只能生成4维向量,//最后一个分量如果是1表示这是一个向量,如果是0表示这是一个点//这种向量称之为“齐次向量”,详细说明见补充知识。XMVECTOR vector= XMVectorSet(5.0f, 0.0f, 0.0f, 1.0f);//利用重载的操作符<<将声明的XMVECTOR对象打印到控制台上cout<<"变换前的向量为:"<<endl;cout<<vector;//将上面生成的最终变换矩阵应用到XMVECTOR对象上//并将生成的新向量覆盖原来的向量vector = XMVector4Transform(vector, mFinal);//将最终的向量打印到控制台上cout<<"变换后的向量为:"<<endl;cout<<vector;system("PAUSE"); //让控制台不要闪退return 0;}

注:1.本博客的例子来自于《基于DirectX11的3D图形程序设计案例教程》

2.以上介绍的函数都在<DirectXMath.h>这个头文件中。

3.也可以下载本博客文档,下载地址:https://download.csdn.net/download/weixin_41649786/10711869

4.跟多的相关函数可以看:https://www.cnblogs.com/zhangbaochong/p/5240358.html

路漫漫其修远兮,吾将上下而求

DirectX11中XNA数据库常见的几个函数相关推荐

  1. qt中的数据库可以创建在主函数中吗_在qt中怎么建立数据库

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. cmd中操作数据库的那些常见命令

    在cmd中进行数据库或表的增删修改 1.cmd中直接连接数据库语法为: >mysql -uroot -p 如果不是内部命令的话就需要去把mysql中bin目录的路径复制到计算机path路径中. ...

  3. 访问数据库_如何访问虚拟主机中的数据库

    如何访问虚拟主机中的数据库?访问虚拟主机数据库,通过虚拟主机控制面板,找到数据库入口,在数据库管理界面,以Linux系统为例,我们点击"管理MySQL数据库(UTF-8版)",或者 ...

  4. android中的数据库操作(SQLite)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  5. 如何在服务器中找到数据库文件夹,如何在服务器中找到数据库文件

    如何在服务器中找到数据库文件 内容精选 换一换 本手册基于华为云关系型数据库实践所编写,用于指导您完成相关设置,购买更符合业务的数据库实例. 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用 ...

  6. python用另一个字段替代本字段的null_Python中的数据库

    数据库和Python 持久化存储 在任何应用中,都需要持久化存储,一般有三种基础的存储机制,文件,数据库系统,以及一些混合类型,一种是使用普通文件或者python特定文件进行访问,另一种是使用数据库管 ...

  7. mysql+linux+无法启动服务无法启动不了_Linux实例中MySQL服务常见的无法启动或启动异常处理...

    概述 本文介绍了在Linux实例中,MySQL常见的无法启动或启动异常处理方法. 详细描述 常见问题处理描述,目录如下. 提示:MySQL错误日志通常记录在/alidata/log/mysql/err ...

  8. 10个问题让你快速避开java中的jdbc常见坑

    摘要:JDBC,即Java Database Connectivity,java数据库连接.是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范. 本文分享自华为云社区<1 ...

  9. java简述常见的布局极其特点_请简要说明 Android 中五种常见布局的特点。_学小易找答案...

    [简答题]请简要说明有序广播和无序广播的区别 [简答题]请简要说明 Android 程序结构中 AndroidManifest.xml 的功能? [简答题]简述李村站人工办理进路的作业过程. [简答题 ...

最新文章

  1. 华南理工计算机基础知识题,华南理工_计算机应用基础_随堂练习答案(2017年)
  2. js中BOM和DOM的区别
  3. windows远程下载
  4. 8 包含min函数的栈
  5. 一般python项目的结构
  6. Java线程面试题,值得一看!
  7. 反编译 破解crash html editor winform [WinHTMLEditorControl.dll][.NET Win HTML Editor Control]
  8. 能搜python题的软件_中国大学MOOC的APP用Python玩转数据期末考试搜题公众号答案...
  9. Cookie中path总结
  10. at/atq/atrm
  11. vue vux x-header组件的返回图标颜色修改
  12. 文件加密的c语言程序课程设计,C语言文件加密课程设计.pdf
  13. mermaid与flowchart.js绘制流程图分支结构试验
  14. JDBC防止SQL注入原理
  15. 哈勃望远镜研究员测试区块链的空间数据处理
  16. ccc.exe_什么是CCC.exe,为什么运行?
  17. Atcoder abc A~E
  18. Linux大事TOP 100
  19. Before Anything, an Architect Is a Developer
  20. matlab赌徒输完问题,Gambler's Ruin(赌徒破产问题 概率论)

热门文章

  1. 828c语言程序设计_21计算机考研只考一门高级语言程序设计的院校大汇总!
  2. [蓝桥杯][2018年第九届真题]整理玩具(树状数组)
  3. 273. 整数转换英文表示(模拟)
  4. tf.nn.dropout和tf.keras.layers.Dropout的区别(TensorFlow2.3)与实验
  5. 推荐算法DeepFM原理介绍及tensorflow代码实现
  6. BLE简介和Android BLE编程
  7. linux 文件系统---类型、创建、
  8. oracle数据库的医院信息系统数据库升级方案,医院信息系统数据库从Oracle8i到10gR2升级的实现...
  9. PCB的阻抗控制与前端仿真(SI9000的应用)(Z)
  10. Ubuntu 10.04 的源服务器和PXE安装环境搭建。