问题标签 [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.
c++ - 函数后向量赋值的表现
我使用这段代码:
我有 fps 1900000,但是当我使用这个时:
我有 fps = 200。为什么?
c++ - 如何正确使用 XMVECTOR 成员变量
我有一个简单的 IRenderable 类,它具有位置、缩放和旋转的成员:
我正在尝试使用构造函数设置它们。这里的第一种方法给出了访问冲突 0x00000000 试图设置 _rotation (_position 和 _scaling 都设置好):
将 _rotation 改为 XMVECTOR* 并在构造函数中使用 _rotation(new XMVECTOR()) 将其设置为空 XMVECTOR,但稍后在尝试设置身份四元数时会引发访问冲突:
在创建对象时,在构造函数中使用 XMQuaternionIdentity 的地址可以正常工作,
但是四元数本身在需要用于渲染时包含垃圾数据。_position 和 _scaling 在所有这些情况下都可以正常工作。
在这种情况下使用 XMVECTOR的正确方法是什么?
c++ - 使用 DirectXMath 获得 2 点之间距离的最佳方法是什么
使用新的 XMVECTOR 和 XMFLOAT3 类获得两点之间距离的最佳方法是什么?我在 XMVector* 函数系列中找不到执行此操作的函数,因此我想出了以下内容:
这会比普通的 Vector3 类更快吗?只有 3 个浮点数用于 x、y、z,然后使用 sqrt,因为它使用了内在优化?即:
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”类型右侧操作数的运算符(或没有可接受的转换)
dll - 在 DLL 类中使用 XNA Math
我在创建的 DLL 中使用 XNA Math 时遇到问题。我有一个在 DLL 中的类,将被导出。它有一个 XMVECTOR 类型的成员变量。在类构造函数中,我尝试初始化 XMVECTOR。我从读取位置 0x0000000000 读取时遇到访问冲突
代码运行如下:
请注意,此类位于将要导出的 DLL 中。我不知道这是否会通过一些进一步的信息有所作为。
另外,当我这样做时,我还有一个问题:
我也收到警告:struct '_XMMATRIX' 需要有 dll-interface 供类 'DLLClass' 的客户端使用
这是致命的吗?如果不是,这是什么意思,我该如何摆脱它?请注意,此 DLLClass 将被导出,并且 DLLClass 的“客户端”可能会使用变量“matr”。
任何帮助,将不胜感激。
编辑:只是一些进一步的信息:我已经逐行调试了代码,似乎在将 XMLoadFloat3 的返回值分配给 vect 时发生了错误。
directx-11 - 使用 DirectXMath 有效计算法线
我需要计算一些三角形的法线,其中我有一个顶点向量,其中每个顶点都有 x、y、z 坐标。i1, i2, i3 是三角形三个顶点向量中的索引。
我正在使用<DirectXMath.h>
并编写了这个似乎有效的方法。
然而,它似乎有比实际计算更多的加载和存储,并且想知道是否有更好的方法来实际执行此操作?还是加载和存储“廉价”操作?
我必须为每个三角形运行它,并且相对于我的其余代码需要大量时间,因此欢迎提高速度。
c++ - 导致崩溃的矩阵
我的 Direct3D11 应用程序有一个奇怪的问题,我已经尝试解决了几个小时。问题在于该方法:
一切都很好,直到它到达那条线:
不知何故,它会导致应用程序崩溃(切换到不响应是正确的)。
以下是实际调用的样子:
事先,顶点和像素着色器编译得很好,所以这不是问题。很可能我在 xnamath 上做错了(我对它完全陌生),但我不知道这可能是什么。提前致谢。如果需要,我会提供更多信息。
编辑@1:通过数十项更改,我设法让投影和世界矩阵工作。虽然我仍然无法设置视图矩阵。我更改了代码,使其与实际代码匹配,并去掉了不重要的部分。
编辑@2:最后一分钟的突发新闻:XMMatrixLookAtLH 函数没有问题,因为我决定将结果保存到局部变量并且它可以工作,但是如果我想将结果矩阵分配给类成员,那么我会崩溃. 这当然很有趣。
c++ - 使用 XNAMATH 优化堆栈分配的对象
我最近开始分析和优化一个过去使用 x64 平台配置开发的 DirectX 11 应用程序。在切换到 x86 以测试使用扩展指令集时的行为后,我开始注意到我的某些对象正在被优化掉,尤其是堆栈分配的 XMMATRIX 对象。这仅在构建 x86 版本配置时发生(在 x64 版本中工作正常),并且我已确保链接到正确的库。我还测试了一个新项目,以确保我没有意外更改隐藏的项目设置。我已经验证关闭 C++ 代码优化可以解决问题。在为 Windows x86 平台开发时尝试使用 XNAMATH 库时,我是否忽略了任何特定的使用要求?
用代码片段更新
c++ - 新停止我的对象正常工作
我不得不完全重写这个问题,因为我现在发现了更多关于它的信息。
背景:
我的程序正在directx11 下绘制一些3d 对象。我有一个类,其中包含绘制所需 3d 对象所需的数据、指针和函数。一切运作良好。我可以创建许多不同的 3d 对象并将它们绘制到任何我想要的地方。伟大的!
然后我需要将它们放入容器和向量中,这样我就不必手动创建每个对象,这就是麻烦开始的地方;它会在 5 次左右崩溃 1 次。
使用矢量和地图时它崩溃了。我继续这行查询并尝试使用指针和新的:
当我运行它的绘图功能时,这也导致它崩溃。
但是,如果创建为标准对象:
绘图功能永远不会崩溃。
同样,创建指向 threed_cube_ 的指针按预期工作。
问题:
默认构造函数没有的新功能。有什么我应该看的东西来解决这个问题吗?
c++ - 将 glm::mat4 转换为 XMFLOAT4X4
我想从方向四元数和位置向量创建一个初始变换矩阵。
我的初始矩阵是 glm 格式,但我想将 glm 矩阵转换为 XMFLOAT4X4 矩阵。
那么如何将 glm_mWorld 的内容加载到 XMFLOAT4X4 中呢?
更新:所以在建议我使用 memcpy 之后,我想出了以下内容:
这会导致错误:
此外,关于列主矩阵/行主矩阵,glm 使用列主矩阵,而 XMFLOAT4X4 使用行主矩阵,这就是我在尝试转换 glm 矩阵之前转置它的原因。