我以前做过OpenGL
,现在正在学习一些DirectX11
。新数学库中的一个特性是为向量和矩阵提供了Load/Store方法(例如http://msdn.microsoft.com/en-us/library/ee415635(v=vs.85).aspx)。
对我来说,当我想要使用它们时,这让我很奇怪,我不得不存储/加载每个向量和矩阵-很多笨重的代码-我想知道是否有任何好的,干净的替代加载/存储过程?
如果有帮助,您可以查看simplemath。它现在是DirectXTK的一部分。
从链接站点:
为什么包装DirectXMath?
DirectXMath提供了高度优化的矢量和矩阵数学函数,这些函数利用了SSE SIMD的内在特性编译为x86/x64时,或编译为ARM NEON指令集时编译为ARM平台,如Windows RT或Windows Phone。的为有效使用SIMD而设计的缺点是DirectXMath使用起来有些复杂。开发人员必须注意正确的类型用法(理解两者的区别)SIMD寄存器类型(如XMVECTOR)与内存存储类型(如XMFLOAT4),必须注意维护SIMD堆的正确对齐分配,并且必须小心地构造自己的代码来避免从SIMD寄存器访问各个组件。这种复杂性是实现最佳SIMD性能所必需的,但有时您只是想要让工作没有那么多麻烦!你应该使用SimpleMath如果你是:
- 寻找具有类似c# XNA类型API的c++数学库
- 将现有的XNA代码从c#移植到c++
- 希望以牺牲运行时间为代价来优化程序员效率(简单性,可读性,开发速度)效率
你应该直接到底层的DirectXMath API如果你:
- 想要创建最快的代码
- 享受在原始SIMD中表达算法所需的横向思维