问题标签 [xna-math-library]

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 投票
3 回答
384 浏览

c++ - 函数后向量赋值的表现

我使用这段代码:

我有 fps 1900000,但是当我使用这个时:

我有 fps = 200。为什么?

0 投票
2 回答
11749 浏览

c++ - 如何正确使用 XMVECTOR 成员变量

我有一个简单的 IRenderable 类,它具有位置、缩放和旋转的成员:

我正在尝试使用构造函数设置它们。这里的第一种方法给出了访问冲突 0x00000000 试图设置 _rotation (_position 和 _scaling 都设置好):

将 _rotation 改为 XMVECTOR* 并在构造函数中使用 _rotation(new XMVECTOR()) 将其设置为空 XMVECTOR,但稍后在尝试设置身份四元数时会引发访问冲突:

在创建对象时,在构造函数中使用 XMQuaternionIdentity 的地址可以正常工作,

但是四元数本身在需要用于渲染时包含垃圾数据。_position 和 _scaling 在所有这些情况下都可以正常工作。

在这种情况下使用 XMVECTOR的正确方法是什么?

0 投票
2 回答
12336 浏览

c++ - 使用 DirectXMath 获得 2 点之间距离的最佳方法是什么

使用新的 XMVECTOR 和 XMFLOAT3 类获得两点之间距离的最佳方法是什么?我在 XMVector* 函数系列中找不到执行此操作的函数,因此我想出了以下内容:

这会比普通的 Vector3 类更快吗?只有 3 个浮点数用于 x、y、z,然后使用 sqrt,因为它使用了内在优化?即:

0 投票
4 回答
3301 浏览

c++ - m = XMMatrixIdentity() 后崩溃 - 类中的对齐内存?

我正在查看 DirectX SDK 中的教程。教程 5 工作正常,但是在我将代码复制并分离到我自己的类之后,我在启动我的应用程序时遇到了奇怪的错误。

该行是:

因此,我在 xnamathmatrix.int operator= 中出现错误,如下所示:

错误信息是:

我在某处读到它可能是由连接到 XMFLOAT4X4 / XMMATRIX 的东西引起的:

您是否考虑过使用 XMFLOAT4X4 来存储矩阵,并且只使用 XMMATRIX?

但我想我已经在使用 XMMATRIX。

MyClass.h:

我的类.cpp:

我不认为我应该改变 XMMATRIX g_World1; 到 XMFLOAT4X4 g_World1,因为它会产生如下错误:

错误 C2679:二进制“=”:未找到采用“XMMATRIX”类型右侧操作数的运算符(或没有可接受的转换)

0 投票
2 回答
238 浏览

dll - 在 DLL 类中使用 XNA Math

我在创建的 DLL 中使用 XNA Math 时遇到问题。我有一个在 DLL 中的类,将被导出。它有一个 XMVECTOR 类型的成员变量。在类构造函数中,我尝试初始化 XMVECTOR。我从读取位置 0x0000000000 读取时遇到访问冲突

代码运行如下:

请注意,此类位于将要导出的 DLL 中。我不知道这是否会通过一些进一步的信息有所作为。

另外,当我这样做时,我还有一个问题:

我也收到警告:struct '_XMMATRIX' 需要有 dll-interface 供类 'DLLClass' 的客户端使用

这是致命的吗?如果不是,这是什么意思,我该如何摆脱它?请注意,此 DLLClass 将被导出,并且 DLLClass 的“客户端”可能会使用变量“matr”。

任何帮助,将不胜感激。

编辑:只是一些进一步的信息:我已经逐行调试了代码,似乎在将 XMLoadFloat3 的返回值分配给 vect 时发生了错误。

0 投票
1 回答
1463 浏览

directx-11 - 使用 DirectXMath 有效计算法线

我需要计算一些三角形的法线,其中我有一个顶点向量,其中每个顶点都有 x、y、z 坐标。i1, i2, i3 是三角形三个顶点向量中的索引。

我正在使用<DirectXMath.h>并编写了这个似乎有效的方法。

然而,它似乎有比实际计算更多的加载和存储,并且想知道是否有更好的方法来实际执行此操作?还是加载和存储“廉价”操作?

我必须为每个三角形运行它,并且相对于我的其余代码需要大量时间,因此欢迎提高速度。

0 投票
2 回答
1489 浏览

c++ - 导致崩溃的矩阵

我的 Direct3D11 应用程序有一个奇怪的问题,我已经尝试解决了几个小时。问题在于该方法:

一切都很好,直到它到达那条线:

不知何故,它会导致应用程序崩溃(切换到不响应是正确的)。

以下是实际调用的样子:

事先,顶点和像素着色器编译得很好,所以这不是问题。很可能我在 xnamath 上做错了(我对它完全陌生),但我不知道这可能是什么。提前致谢。如果需要,我会提供更多信息。

编辑@1:通过数十项更改,我设法让投影和世界矩阵工作。虽然我仍然无法设置视图矩阵。我更改了代码,使其与实际代码匹配,并去掉了不重要的部分。

编辑@2:最后一分钟的突发新闻:XMMatrixLookAtLH 函数没有问题,因为我决定将结果保存到局部变量并且它可以工作,但是如果我想将结果矩阵分配给类成员,那么我会崩溃. 这当然很有趣。

0 投票
1 回答
150 浏览

c++ - 使用 XNAMATH 优化堆栈分配的对象

我最近开始分析和优化一个过去使用 x64 平台配置开发的 DirectX 11 应用程序。在切换到 x86 以测试使用扩展指令集时的行为后,我开始注意到我的某些对象正在被优化掉,尤其是堆栈分配的 XMMATRIX 对象。这仅在构建 x86 版本配置时发生(在 x64 版本中工作正常),并且我已确保链接到正确的库。我还测试了一个新项目,以确保我没有意外更改隐藏的项目设置。我已经验证关闭 C++ 代码优化可以解决问题。在为 Windows x86 平台开发时尝试使用 XNAMATH 库时,我是否忽略了任何特定的使用要求?

用代码片段更新

0 投票
2 回答
199 浏览

c++ - 新停止我的对象正常工作

我不得不完全重写这个问题,因为我现在发现了更多关于它的信息。

背景:

我的程序正在directx11 下绘制一些3d 对象。我有一个类,其中包含绘制所需 3d 对象所需的数据、指针和函数。一切运作良好。我可以创建许多不同的 3d 对象并将它们绘制到任何我想要的地方。伟大的!

然后我需要将它们放入容器和向量中,这样我就不必手动创建每个对象,这就是麻烦开始的地方;它会在 5 次左右崩溃 1 次。

使用矢量和地图时它崩溃了。我继续这行查询并尝试使用指针和新的:

当我运行它的绘图功能时,这也导致它崩溃。

但是,如果创建为标准对象:

绘图功能永远不会崩溃。

同样,创建指向 threed_cube_ 的指针按预期工作。

问题:

默认构造函数没有的新功能。有什么我应该看的东西来解决这个问题吗?

0 投票
1 回答
1237 浏览

c++ - 将 glm::mat4 转换为 XMFLOAT4X4

我想从方向四元数和位置向量创建一个初始变换矩阵。

我的初始矩阵是 glm 格式,但我想将 glm 矩阵转换为 XMFLOAT4X4 矩阵。

那么如何将 glm_mWorld 的内容加载到 XMFLOAT4X4 中呢?

更新:所以在建议我使用 memcpy 之后,我想出了以下内容:

这会导致错误:

此外,关于列主矩阵/行主矩阵,glm 使用列主矩阵,而 XMFLOAT4X4 使用行主矩阵,这就是我在尝试转换 glm 矩阵之前转置它的原因。