DirectX11 学习笔记5 - D3DXMath 库

directx11 特别推出了一个数学库 用于向量 矩阵的计算,而且使用128位 同时计算4条32位数据 (SIMD)

之前基本是用的directx10math.h这个头文件。  这个数学库既然是新出的,肯定在硬件方便处理起来比以前的快许多,优化了很多。 技术永无止境嘛。推荐用新的

而现在可以单独用 xnamath.h directx9 10 11 都可以用这个库,很方便。 下面的表可以快速从以前的数学库找到替换函数。

对了 昨晚遇到一个坑。解决了很久。原来是由于xnamath 里面的  xmatrix  xmvector 等  涉及到一个对齐问题。

如果是 局部变量、全局变量  感觉不到。硬件会自动对齐。 但是如果放在类成员变量,就很容易报错了。 而且你看不出是那的问题。

调试了很久。 所以我们在用这个库的时候,最后尽量避免设为类成员变量。

下一节我将附上,把之前那个封装程序升级为xnamath库的完整源码,并实现了绘制一个三角形。 以后的教程都将在这个源码上演示。

他们的区别快速查询 :

D3DXMath Type	DirectXMath Equivalent
D3DXFLOAT16	HALF
D3DXMATRIXA16	XMMATRIX or XMFLOAT4X4A
D3DXQUATERNION

D3DXPLANE

D3DXCOLOR

XMVECTOR is used rather than having unique types, so you will likely need to use an XMFLOAT4
Note  D3DXQUATERNION::operator * calls the D3DXQuaternionMultiply function, which multiplies two quaternions. But, unless you explicitly use the XMQuaternionMultiply function, you get an incorrect answer when you use XMVECTOR::operator * on a quaternion.

D3DXVECTOR2	XMFLOAT2
D3DXVECTOR2_16F	XMHALF2
D3DXVECTOR3	XMFLOAT3
D3DXVECTOR4	XMFLOAT4
(or if you can guarantee the data is 16-byte aligned, XMVECTOR or XMFLOAT4A )

D3DXVECTOR4_16F	XMHALF4

Note  There is no direct equivalent to D3DXVECTOR3_16F in XNAMath.

D3DXMath Macro	DirectXMath Equivalent
D3DX_PI	XM_PI
D3DX_1BYPI	XM_1DIVPI
D3DXToRadian	XMConvertToRadians
D3DXToDegree	XMConvertToDegrees

D3DXMath Function	DirectXMath Equivalent
D3DXBoxBoundProbe	BoundingBox::Intersects(XMVECTOR, XMVECTOR, float&)
D3DXComputeBoundingBox	BoundingBox::CreateFromPoints
D3DXComputeBoundingSphere	BoundingSphere::CreateFromPoints
D3DXSphereBoundProbe	BoundingSphere::Intersects(XMVECTOR, XMVECTOR, float&)
D3DXIntersectTriFunction	TriangleTests::Intersects
D3DXFloat32To16Array	XMConvertFloatToHalfStream
D3DXFloat16To32Array	XMConvertHalfToFloatStream
D3DXVec2Length	XMVector2Length or XMVector2LengthEst
D3DXVec2LengthSq	XMVector2LengthSq
D3DXVec2Dot	XMVector2Dot
D3DXVec2CCW	XMVector2Cross
D3DXVec2Add	XMVectorAdd
D3DXVec2Subtract	XMVectorSubtract
D3DXVec2Minimize	XMVectorMin
D3DXVec2Maximize	XMVectorMax
D3DXVec2Scale	XMVectorScale
D3DXVec2Lerp	XMVectorLerp or XMVectorLerpV
D3DXVec2Normalize	XMVector2Normalize or XMVector2NormalizeEst
D3DXVec2Hermite	XMVectorHermite or XMVectorHermiteV
D3DXVec2CatmullRom	XMVectorCatmullRom or XMVectorCatmullRomV
D3DXVec2BaryCentric	XMVectorBaryCentric or XMVectorBaryCentricV
D3DXVec2Transform	XMVector2Transform
D3DXVec2TransformCoord	XMVector2TransformCoord
D3DXVec2TransformNormal	XMVector2TransformNormal
D3DXVec2TransformArray	XMVector2TransformStream
D3DXVec2TransformCoordArray	XMVector2TransformCoordStream
D3DXVec2TransformNormalArray	XMVector2TransformNormalStream
D3DXVec3Length	XMVector3Length or XMVector3LengthEst
D3DXVec3LengthSq	XMVector3LengthSq
D3DXVec3Dot	XMVector3Dot
D3DXVec3Cross	XMVector3Cross
D3DXVec3Add	XMVectorAdd
D3DXVec3Subtract	XMVectorSubtract
D3DXVec3Minimize	XMVectorMin
D3DXVec3Maximize	XMVectorMax
D3DXVec3Scale	XMVectorScale
D3DXVec3Lerp	XMVectorLerp or XMVectorLerpV
D3DXVec3Normalize	XMVector3Normalize or XMVector3NormalizeEst
D3DXVec3Hermite	XMVectorHermite or XMVectorHermiteV
D3DXVec3CatmullRom	XMVectorCatmullRom or XMVectorCatmullRomV
D3DXVec3BaryCentric	XMVectorBaryCentric or XMVectorBaryCentricV
D3DXVec3Transform	XMVector3Transform
D3DXVec3TransformCoord	XMVector3TransformCoord
D3DXVec3TransformNormal	XMVector3TransformNormal
D3DXVec3TransformArray	XMVector3TransformStream
D3DXVec3TransformCoordArray	XMVector3TransformCoordStream
D3DXVec3TransformNormalArray	XMVector3TransformNormalStream
D3DXVec3Project	XMVector3Project
D3DXVec3Unproject	XMVector3Unproject
D3DXVec3ProjectArray	XMVector3ProjectStream
D3DXVec3UnprojectArray	XMVector3UnprojectStream
D3DXVec4Length	XMVector4Length or XMVector4LengthEst
D3DXVec4LengthSq	XMVector4LengthSq
D3DXVec4Dot	XMVector4Dot
D3DXVec4Add	XMVectorAdd
D3DXVec4Subtract	XMVectorSubtract
D3DXVec4Minimize	XMVectorMin
D3DXVec4Maximize	XMVectorMax
D3DXVec4Scale	XMVectorScale
D3DXVec4Lerp	XMVectorLerp or XMVectorLerpV
D3DXVec4Cross	XMVector4Cross
D3DXVec4Normalize	XMVector4Normalize or XMVector4NormalizeEst
D3DXVec4Hermite	XMVectorHermite or XMVectorHermiteV
D3DXVec4CatmullRom	XMVectorCatmullRom or XMVectorCatmullRomV
D3DXVec4BaryCentric	XMVectorBaryCentric or XMVectorBaryCentricV
D3DXVec4Transform	XMVector4Transform
D3DXVec4TransformArray	XMVector4TransformStream
D3DXMatrixIdentity	XMMatrixIdentity
D3DXMatrixDeterminant	XMMatrixDeterminant
D3DXMatrixDecompose	XMMatrixDecompose
D3DXMatrixTranspose	XMMatrixTranspose
D3DXMatrixMultiply	XMMatrixMultiply
D3DXMatrixMultiplyTranspose	XMMatrixMultiplyTranspose
D3DXMatrixInverse	XMMatrixInverse
D3DXMatrixScaling	XMMatrixScaling
D3DXMatrixTranslation	XMMatrixTranslation
D3DXMatrixRotationX	XMMatrixRotationX
D3DXMatrixRotationY	XMMatrixRotationY
D3DXMatrixRotationZ	XMMatrixRotationZ
D3DXMatrixRotationAxis	XMMatrixRotationAxis
D3DXMatrixRotationQuaternion	XMMatrixRotationQuaternion
D3DXMatrixRotationYawPitchRoll	XMMatrixRotationRollPitchYaw (Note the order of parameters is different: D3DXMatrixRotationYawPitchRoll takes yaw, pitch, roll, XMMatrixRotationRollPitchYaw takes pitch, yaw, roll)
D3DXMatrixTransformation	XMMatrixTransformation
D3DXMatrixTransformation2D	XMMatrixTransformation2D
D3DXMatrixAffineTransformation	XMMatrixAffineTransformation
D3DXMatrixAffineTransformation2D	XMMatrixAffineTransformation2D
D3DXMatrixLookAtRH	XMMatrixLookAtRH
D3DXMatrixLookAtLH	XMMatrixLookAtLH
D3DXMatrixPerspectiveRH	XMMatrixPerspectiveRH
D3DXMatrixPerspectiveLH	XMMatrixPerspectiveLH
D3DXMatrixPerspectiveFovRH	XMMatrixPerspectiveFovRH
D3DXMatrixPerspectiveFovLH	XMMatrixPerspectiveFovLH
D3DXMatrixPerspectiveOffCenterRH	XMMatrixPerspectiveOffCenterRH
D3DXMatrixPerspectiveOffCenterLH	XMMatrixPerspectiveOffCenterLH
D3DXMatrixOrthoRH	XMMatrixOrthographicRH
D3DXMatrixOrthoLH	XMMatrixOrthographicLH
D3DXMatrixOrthoOffCenterRH	XMMatrixOrthographicOffCenterRH
D3DXMatrixOrthoOffCenterLH	XMMatrixOrthographicOffCenterLH
D3DXMatrixShadow	XMMatrixShadow
D3DXMatrixReflect	XMMatrixReflect
D3DXQuaternionLength	XMQuaternionLength
D3DXQuaternionLengthSq	XMQuaternionLengthSq
D3DXQuaternionDot	XMQuaternionDot
D3DXQuaternionIdentity	XMQuaternionIdentity
D3DXQuaternionIsIdentity	XMQuaternionIsIdentity
D3DXQuaternionConjugate	XMQuaternionConjugate
D3DXQuaternionToAxisAngle	XMQuaternionToAxisAngle
D3DXQuaternionRotationMatrix	XMQuaternionRotationMatrix
D3DXQuaternionRotationAxis	XMQuaternionRotationAxis
D3DXQuaternionRotationYawPitchRoll	XMQuaternionRotationRollPitchYaw (Note the order of parameters is different: D3DXQuaternionRotationYawPitchRoll takes yaw, pitch, roll, XMQuaternionRotationRollPitchYaw takes pitch, yaw, roll)
D3DXQuaternionMultiply	XMQuaternionMultiply
D3DXQuaternionNormalize	XMQuaternionNormalize or XMQuaternionNormalizeEst
D3DXQuaternionInverse	XMQuaternionInverse
D3DXQuaternionLn	XMQuaternionLn
D3DXQuaternionExp	XMQuaternionExp
D3DXQuaternionSlerp	XMQuaternionSlerp or XMQuaternionSlerpV
D3DXQuaternionSquad	XMQuaternionSquad or XMQuaternionSquadV
D3DXQuaternionSquadSetup	XMQuaternionSquadSetup
D3DXQuaternionBaryCentric	XMQuaternionBaryCentric or XMQuaternionBaryCentricV
D3DXPlaneDot	XMPlaneDot
D3DXPlaneDotCoord	XMPlaneDotCoord
D3DXPlaneDotNormal	XMPlaneDotNormal
D3DXPlaneScale	XMVectorScale
D3DXPlaneNormalize	XMPlaneNormalize or XMPlaneNormalizeEst
D3DXPlaneIntersectLine	XMPlaneIntersectLine
D3DXPlaneFromPointNormal	XMPlaneFromPointNormal
D3DXPlaneFromPoints	XMPlaneFromPoints
D3DXPlaneTransform	XMPlaneTransform
D3DXPlaneTransformArray	XMPlaneTransformStream
D3DXColorNegative	XMColorNegative
D3DXColorAdd	XMVectorAdd
D3DXColorSubtract	XMVectorSubtract
D3DXColorScale	XMVectorScale
D3DXColorModulate	XMColorModulate
D3DXColorLerp	XMVectorLerp or XMVectorLerpV
D3DXColorAdjustSaturation	XMColorAdjustSaturation
D3DXColorAdjustContrast	XMColorAdjustContrast
D3DXFresnelTerm	XMFresnelTerm
时间: 2024-11-05 22:40:20

DirectX11 学习笔记5 - D3DXMath 库的相关文章

Directx11学习笔记【二十二】 用高度图实现地形

本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5827714.html 在前面我们曾经实现过简单的地形(Directx11学习笔记[十三] 实现一个简单地形),只不过原来使用一个固定的函数获得地形高度,这样跟真实的地形差距比较大.接下来让我们学习使用高度图来进行三维地形模拟. 1.高度图 高度图其实就是一组连续的数组,这个数组中的元素与地形网格中的顶点一一对应,且每一个元素都指定了地形网格的某个顶点的高度值.高度

[学习笔记] Python标准库简明教程 [转]

1 操作系统接口 os 模块提供了一系列与系统交互的模块: >>> os.getcwd() # Return the current working directory '/home/minix/Documents/Note/Programming/python/lib1' >>> os.chdir('~/python') # Change current working directory Traceback (most recent call last): File

[学习笔记] Python标准库的学习准备 [转]

Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准库所涉及的应用很广,所以需要学习一定的背景知识. 硬件原理 这一部份需要了解内存,CPU,磁盘存储以及IO的功能和性能,了解计算机工作的流程,了解指令的概念.这些内容基础而重要. Python标准库的一部份是为了提高系统的性能(比如mmap),所以有必要了解基本的计算机各个组成部分的性能. 操作系统 在了解操作系统时,下面是重点: 1) 操作系统的进程管理,比如什么是UID, PID, daemon 2) 进程之间

Directx11学习笔记【二】 将HelloWin封装成类

我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 MyWindow.h文件 1 /************************************************************************ 2 Directx11学习笔记[2] 将HelloWin封装成类 3 2016.01 by zhangbaochong 4 /

iOS学习笔记16-数据库SQLite

一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 1. 归档:NSKeyedArchiver 2. 偏好设置:NSUserDefaults 3. plist存储:writeToFile 上述的使用可以参考iOS学习笔记15-序列化.偏好设置和归档,但上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题,在这个时候就是使用数据库的时候. 数据库(Database)是按照数据结构来组

Git 学习笔记<本地版本库的管理> (二)

今天来记录一下关于版本库的创建与管理的笔记. 版本库是什么? 版本库可以理解为一个仓库(一个可以被git管理的目录),里面文件的修改删除都可以被追踪,并且每个版本都会保存以便还原(仅仅保存修改或删除的文件),于是可以认为保存了各种不同的版本,所以叫版本库. 如何管理? Git给你提供各种不同的指令来管理版本库. 1.创建: 选择一个地方创建一个新文件夹,然后进入这个文件夹(windows中不要出现中文路径) $mkdir LEARNER   //当前目录下新建文件夹 $cd LEARNER //

DirectX11 学习笔记6 - 使用D3DXMATH数学库的一个例子

这个例子是在之前的例子基础上 ,把之前d3dx10math数学库换成了最新的d3dxmath.优点就不说了.先上效果图 全部代码.以及效果文件 文件结构 全部代码: 按照上图的文件顺序 #pragma once #include <D3DX10math.h> #include <xnamath.h> class XCamera { public: XCamera() { m_positionX = 0.0f; m_positionY = 0.0f; m_positionZ = 0.

Directx11学习笔记【十四】 使用最新的Effect框架和SDK

由于之前一直在看directx11龙书学习,因此sdk一直用的Microsoft DirectX SDK (June 2010) 版本,最近在stackoverflow上问dx11相关问题时,一直被大神吐槽为何还用已经废弃的directx sdk,由于directx sdk现在已经和windows sdk合并到一起了,只能去下windows sdk了.为了方便索性直接换了vs 2015社区版,里面自带了(windows sdk),既然sdk换了最新的,effect框架也要换最新的啊(Effect

学习笔记_Java_day13_JSTL标签库(1、2、3、4、5、6、7、8)

1.一种标签语言 day13 l  JSTL标签库(重点) l  自定义标签(理解) l  MVC设计模式(重点中的重点) l  Java三层框架(重点中的重点) JSTL标签库 1 什么是JSTL JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一定,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已! 如果你使用MyEclipse开发JavaWeb,那么在把项目发布到Tomcat时,你会