使用 XMMatrixLookAtLH - 试图面对一个点,但不起作用/崩溃?
Using XMMatrixLookAtLH - trying to face a point, but doesn't work/crashes?
我正在为我的实体类使用以下代码:
void Entity::Face(FXMVECTOR target)
{
XMVECTOR up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
up = XMVector3Transform(up, Rotation);
Rotation = XMMatrixLookAtLH(Translation, target, up); //Rotation is a XMMATRIX, Translation is a XMVECTOR
}
并试图让它面对另一个实体。基本上我正在这样做:
Entity a = //....
Entity b = //.......
a.Face(b.Translation);
发生的事情是以下三件事之一:1.函数崩溃,因为断言2.实体"a"被错误地放在一个奇怪的位置3.实体"a"消失
这个该死的函数XMMatrixLookAtLH一直是我整个项目问题的根源,无论我在哪里使用它,我都必须花费数小时才能使其正常工作。
如果我使用 XMMatrixRotationRollPitchYawFromVector 创建旋转矩阵,它可以完美运行,但是我需要让它直接面对它被给出的点,我不知道如何让它工作。请有人给我一个建议。
失败
的断言到底是什么?这就是问题可能是什么的线索。
assert(!XMVector3Equal(EyeDirection, XMVectorZero()));
assert(!XMVector3IsInfinite(EyeDirection));
assert(!XMVector3Equal(UpDirection, XMVectorZero()));
assert(!XMVector3IsInfinite(UpDirection));
既然您使用 XMVECTOR 和 XMMATRIX 作为类成员,您是否确保你的类实体始终分配 16 字节对齐方式?默认情况下,这仅在 x64(64 位)本机程序中得到保证。如果您正在编写 32 位应用程序,则需要使用 XMLoad*/XMStore* 函数,并避免直接在类中使用 XMVECTOR 和 XMMATRIX。确保您知道触发 C 断言断点的时间与由于对齐而实际引发的异常(如"访问冲突")之间的区别。
您可能会发现使用 SimpleMath(在 DirectX 工具包中)比直接使用 DirectXMath 更自然,但它通常是围绕 RH 坐标设计的。
相关文章:
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 反转一个数字程序不起作用,为什么?
- 我有一个应该打印数组的函数,但由于某种原因它不起作用
- 当我尝试在函数内声明一个函数时,它不起作用?有什么建议吗?*源代码如下*
- 从类中的另一个文件请求函数不起作用
- 将一个阵列中的数据存储到另外两个阵列中不起作用
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- 将字符从一个字符串简单分配到另一个字符串不起作用
- 试图找到一个数字的平方根,但代码不起作用。C++
- 我的代码应该接受一个数字,并返回字母等级或"Grade is not valid"但 else 语句不起作用
- 我正在编写一个拆分为 3 的合并排序,我不知道为什么它不起作用
- 我试图键入一个函数来在单链表的末尾添加一个节点,但不起作用
- VS为我提供了对构造函数的另一个解决方案,但我想知道为什么我的工作不起作用
- 一个'case'在简单的'switch'语句中不起作用
- 我试图编写一个代码来查找一个单词是否是回文,但它不起作用。怎么了?
- 将布局从一个类添加到另一类不起作用
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员<<这是一个iStream运算符
- C++ 为什么这些构造函数调用中有 3 个有效,但有一个不起作用?
- 为什么其中一个模板静态函数有效,而另一个不起作用
- C++将东西移到一个不起作用的函数中