问题标签 [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 回答
189 浏览

camera - DirectXMath Unproject 在错误的轴上

编辑:解决了这个问题,看看我自己的答案

最近我一直在开发一个 3D 世界编辑器,它将使用拾取来升高或降低地形。我正在使用相机非投影和光线投射来查找鼠标屏幕坐标的世界位置。

但是,似乎光线在错误的轴上。我记得,应该从 unproject 出来的光线应该直接来自相机。

是它目前的样子的一个例子。

我的问题是,为什么光线应该在 Z 轴上时,却在 Y 轴上?

这是非投影代码..

这就是我使用它的方式

干杯!

0 投票
1 回答
3427 浏览

c++ - 有没有办法将四元数转换为角度?

我有一个(世界)矩阵,它将平移、旋转和缩放应用于 3D 对象。它是使用函数XMMatrixTransformation(DirectXMath) 创建的,参数RotationQuaternion是通过调用XMQuaternionRotationRollPitchYaw. 然后它与其他数据一起存储在一个文件中。

然后我需要恢复这些值,所以我可以使用此函数将其分解为每个组件:

缩放和平移是向量,旋转是四元数。如果矩阵在单个轴上旋转对象,我可以使用它来将四元数转换回角度:

它工作正常。但是当它在两个或更多轴上旋转时,我该怎么做呢?有没有办法做到这一点?

PS:我不在乎输出角度是否与输入不同。他们只需要等价。

PS2:好的,所以我关注了 Gene 的链接(我已经看过那里,但当时没有找到我需要的东西)。我根据在维基百科中找到的这个等式制作了这段代码: 方程

在输出中我有不同的角度。输出似乎等效于(90°, 0°, 90°),但不等效于(45°, 45°, 45°)

0 投票
1 回答
651 浏览

directx-11 - XMVector3Unproject - 屏幕到特定 Z 的世界坐标

我想在 Directx 11 中将屏幕坐标转换为世界坐标。我发现我可以使用 function 轻松完成XMVector3Unproject。有一个问题,我想选择我自己的 Z 坐标来告诉函数我的点离相机有多远(屏幕坐标是 2d,世界坐标是 3d)。根据我的观察,我必须弄清楚我的点在深度缓冲区上的位置。

我的深度缓冲区范围从 0.0 到 1.0(通常情况下)。我的近平面是 0.1f,远平面是 1000.0f。我知道深度缓冲区上的值不是均匀分布的。事实上,对于我的设置,20.0f 在深度缓冲区中大约为 0.995(接近平面,但在深度缓冲区中几乎一直向下)。我如何找出这些值?

0 投票
2 回答
1246 浏览

c++ - shared_ptr 如何破坏对齐

我正在阅读 DirectXMath 上的文档,偶然发现了下一段:

作为通过重载 new/delete 直接在 C++ 类中强制对齐的替代方法,您可以使用pImpl 习惯用法。如果您确保您的 Impl 类在内部通过 __aligned_malloc 对齐,则您可以在内部实现中自由使用对齐类型。当“公共”类是 Windows 运行时引用类或旨在与 std::shared_ptr<> 一起使用时,这是一个不错的选择,否则可能会破坏仔细对齐。

我不明白 shared_ptr 如何对对齐策略进行任何更改,它只有一个指针,它不分配对象。

0 投票
3 回答
1303 浏览

directx-11 - DirectXMath.h 运算符歧义

我最近写了一个矩阵类来处理 XMFloat4x4 和 XMVector 转换。它在 Windows 8 Metro 应用程序上运行良好,但是当我尝试将其移植到Win32 Windows 应用程序时,它开始出现错误

"error C2593: 'operator *' is ambiguous c:\program files (x86)\windows kits\8.1\include\um\DirectXMathMisc.inl",其中很多错误与多个重载实例有关函数 XMFunctions

包含“DirectXMath.h”时会出现问题

请让我知道出了什么问题

MATRIX4X4.h

0 投票
1 回答
151 浏览

visual-c++ - DirectXMathConvert.inl 断言失败(DirectXMathConvert.inl 第 704 行)

有人能帮我把这段代码翻译成人类可读的吗?

基本上这个断言在我的程序中失败了,但不是 100% 的时间(没有我重新编译任何东西),这很奇怪。

完整的XMLoadFloat4A函数是(第 697 行 - DirectXMathConvert.inl):

用例 :

为什么这个断言失败了?为什么不是 100% 的时间?

0 投票
1 回答
163 浏览

directx - DirectXTK 和 3D 对象

我有一个使用 D3D11 和 DirectXMath 显示 3D 对象的应用程序。我还想在左上角显示一个 HUD,所以我想我会使用 DirectXTK sprintBatch/spriteFont 来做到这一点。在我添加以下代码之前,我的 3D 效果很好。DirectXTK 是否使用它自己的着色器并更改某些状态?

问题是我该如何解决这个问题?

没有 spritefont->DrawString

使用 spritefont->DrawString

这是我的着色器。

0 投票
1 回答
194 浏览

directx - 3D 空间中的 DirectXTK spriteFont

我希望使用 DirectXTK 在 (50,0,0) 处显示“X”,并关注有关广告牌的文章。但是我似乎不正确。有人可以帮帮我。

这看起来很有希望

0 投票
1 回答
143 浏览

directx - index = 0 时的 XMVectorSetByIndex 和 XMVectorSetX 有什么区别?

看了DirectXMath库的源码,发现和实现XMVectorSetByIndex完全XMVectorSetX不一样。为什么XMVectorSetX不简单地返回XMVectorSetByIndex(index = 0) ?

0 投票
1 回答
205 浏览

c++ - 这样的继承对性能有什么影响?

我正在使用 DirectXMath(或 XNAMath)库(在 Windows SDK 的 DirectXMath.h 头文件中定义),因为它看起来非常高效,并提供了物理和渲染所需的一切。但是我发现它非常冗长(到处使用 XMStoreFloatX 和 XMLoadFloatX 很累)。

我试图让它更容易操作,并想出了在赋值运算符/转换运算符中隐藏 Stores/Loads 的想法。由于这两个都必须是成员函数,因此我想出了以下代码作为示例:

如您所见,它复制了 XMFLOAT2 的公共接口,并为 XMVECTOR 添加了构造函数、赋值运算符和转换,这是 DirectXMath 用于计算的 SIMD 类型。我打算为 DirectXMath 提供的每个存储结构执行此操作。

性能对于数学库来说是一个非常重要的因素,因此我的问题是:这种继承的性能影响是什么?与库的正常使用相比,是否生成了任何额外的代码(当然假设完全优化)?

直观地说,生成的代码应该与我在没有这些便利运算符的情况下使用详细变体时完全相同,因为我本质上只是重命名结构和函数。但也许有些方面我不知道?


PS 我有点担心赋值运算符的返回类型,因为它添加了额外的代码。省略引用返回以优化它会是一个好主意吗?