问题标签 [directxmath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
266 浏览

vector - 为什么 XMVector4Dot 返回一个将点积复制到其组件的向量?

XMVector4Dot 的文档将返回值列为向量。它还指出点积被复制到每个组件中。鉴于点积将是单个值,与仅返回浮点数相比,这有何优势?

我能看到获得价值的唯一方法是执行以下操作:

这似乎是不必要的。我忽略了还有其他原因吗?

0 投票
2 回答
289 浏览

c++ - 使用 DirectXTK / DirectXMath 转换平面

我有一个由三个点定义的 3D 平面,我想使用 DirectXTK 将其转换为 4x4 矩阵。

我尝试了两种方法来做到这一点:

  1. 使用 Plane::Transform() 方法变换平面 - 这会产生非常奇怪的结果。

  2. 变换三个点并从变换的点创建一个平面 - 这很好用。

我还尝试在调用 Plane::Transform() 之前转置矩阵,它使平面正常,但常数是错误的(另外转置矩阵对我来说真的没有意义)。

以下是归一化后的结果:

Plane::Transform() 调用 XMPlaneTransform ,它是 DirectXMath 库的一部分,它的文档简单地说“通过给定矩阵变换平面。”。我想这个方法很好,但是我的代码有什么问题?

0 投票
1 回答
1264 浏览

c++ - 如何从 XMVECTOR 获取浮点值?(DirectXMath)

我想在浮点数中获得两个 3D 向量的点积。但不幸的是,结果是一个向量,而不是一个浮点数。我确实可以使用 访问它的元素vector4_f32,但我收到一个错误,它不是__m128

[]运算符未定义在XMVECTOR

0 投票
1 回答
1215 浏览

directxmath - 使用 DirectXMath 和 D3DXMath

回到 D3DXMath,我们能够乘、加或减甚至除向量类型,它们是 D3DXVECTOR2、D3DXVECTOR3、D3DXVECTOR4 结构......现在在 DirectXMath 的化身中,我们有 XMFLOAT2、XMFLOAT3、XMFLOAT4 和 XMVECTOR。如果我想做任何数学运算,我必须以任何方式从 XMFLOAT 转换为 XMVECTOR,Visual Studio 会抛出错误“没有用户定义的转换”。这是为什么 ?实际上,在 DirectX 数学库矢量操作的新版本(Windows 8.1、10)中,矢量操作略有变化是事实。难道我做错了什么........... ?!

PS Well for Matrices 还有另一个问题,但现在我们只讨论向量。这些变化正在推动第三方开发人员创建自己的数学库,他们已经做到了..... :)

0 投票
1 回答
199 浏览

c++ - 无运算符 = 匹配操作数 - DX11

我试图在 DX11 中将两组值相乘。

但我不断收到错误消息;

根据我的阅读,它们不能相乘,但我似乎找不到解决方法。

代码片段。

前向声明

在 InitDevice() 函数的末尾设置相机/投影。

0 投票
1 回答
67 浏览

c++ - 与 XMVectorPermute 相关的 C++ 模板相关错误

我是 DirectX11 的新手,我正在尝试将使用 DirectX Legacy 编写的文件改编为新的 DirectX,但是我在使用模板 XMVectorPermute 时遇到了一些问题,该模板曾经是 Legacy 文件中的一个函数。

我试图让编译器识别模板DirectXMath.h

通过使用以下代码:

其中PermuteXXY定义为:

但编译器或链接器无法匹配: 错误报告

XM_PERMUTE_...被定义为const uint32_tin DirectXMath.h,并且XMVECTORI32被定义为并集:

我不太擅长 c++ 模板,所以请尽可能彻底地帮助我。非常感谢!

0 投票
1 回答
162 浏览

directx-11 - GXMVECTOR - 文档?

经过十年做其他事情后,我正在尝试重新学习directx。我在 github wiki 上阅读了有关如何渲染一些精灵的教程:

https://github.com/Microsoft/DirectXTK/wiki/Sprites-and-textures

在 Draw 方法中,它使用“DirectX::SpriteBatch::Draw”,其中一个重载似乎具有“FXMVECTOR”和“GXMVECTOR”的参数。我设法找到了前者的一些文档,但找不到后者的任何文档。

谁能告诉我在哪里看?它是 DirectXMath 的一部分还是其他东西?

0 投票
1 回答
265 浏览

c++ - 函数传递后 DirectX::XMMATRIX 乘法不正确 (C++)

我很难理解为什么将两个 DirectX 4x4 矩阵相乘时得到不同的结果,具体取决于乘法是否在类函数中执行。

以恒等矩阵为例,使用以下代码,结果 1 和结果 2 的值最终会有所不同。

它实际上看起来像在 result2 中,预期的结果从矩阵的第 3 行开始?(下面的输出)

我知道通过将数组作为函数传递,我正在制作它的副本,但我不会认为这会有所作为。

任何帮助将不胜感激!

0 投票
1 回答
85 浏览

windows-10 - #include-ing DirectXMath 和 DirectXTex 时的重新定义

使用VS2018Pro、Windows10、

在跨项目文件拉入 DirectXTex.h、DirectXMath.h 和 DirectXCollision.h 时,我遇到了许多重新定义编译错误。

DirectXMath 和 DirectXCollision 是 Win10SDK 标头的一部分,我从 github 存储库中提取 DirectXTex 并将其放在我的项目文件夹的本地。

在我的代码库中,我需要在各种文件中包含 DirectXTex.h、DirectXMath.h 和 DirectXCollision.h 标头,但是我在 DirectX 命名空间中遇到了许多重新定义错误和重复项。我知道我可能必须先包含一个(我已经尝试了许多变体,例如 DirectXTex 引入了 DirectXMath),但我无法编译。

有没有人知道在项目文件中提取这些包含的正确顺序?

0 投票
0 回答
26 浏览

augmented-reality - 当射线击中四边形时如何计算方向?

我知道如何确定光线击中四边形的位置,但我不知道如何确定击中位置的方向。

ArCore 将平面的HitResult 姿势描述为:

HitResult.getHitPose()

返回射线与检测到的真实世界几何体之间的交点位姿。位置是光线与几何体相交的空间位置。方向是面向用户设备的最大努力,其确切定义因被击中的 Trackable 而异。

平面:X+ 垂直于投射光线并平行于平面,Y+ 指向平面法线(向上,对于 HORIZONTAL_UPWARD_FACING 平面),Z+ 平行于平面,大致指向用户设备。

请注意,姿势是一个位置(Vector3)和一个方向(四元数)。

我目前正在使用DirectX::TriangleTests::Intersects来计算光线击中四边形的位置。使用平面法线计算 Y+ 很容易,但我不知道如何计算 X+ 和 Z+。