gpt4 book ai didi

c++ - DirectX 11 : Runtime Assertion Failure using XMLoadFloat4X4()

转载 作者:行者123 更新时间:2023-11-28 06:37:07 26 4
gpt4 key购买 nike

在尝试将矩阵存储在结构内部时,当使用 XMLLoadFloat4X4() 从结构调用 XMLOAT4x4* 类型时,我在运行时收到断言失败错误。

enter image description here

这些值简单地存储为:

XMFLOAT4X4 *f4x4_Scale;
XMFLOAT4X4 *f4x4_Rotation;
XMFLOAT4X4 *f4x4_Translate;
XMFLOAT4X4 *f4x4_ObjectViewSpace;

大概是从结构内部的 XMFLOAT4x4* 位置加载实际值。

我在转换函数中调用 XMLLoadFloat4X4(),结构如下:

XMMATRIX Entity::Scale(float x, float y, float z){
XMMATRIX m_Scale = XMLoadFloat4x4(e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale);
m_Scale = XMMatrixScaling(x, y, z);
return m_Scale;
}

反汇编显示 XMLLoadFloat4x4() 函数本身内部有一个中断,但我无法理解。 enter image description here

有没有一种方式/方法可以用来解决与 XMLLoadFloat() 相关的断言失败错误? (或者关于断言错误的非常好的 Material )和/或我做错了什么?

更新:

正如 Chuck Walbourn 所建议的,XMLLoadFloat4X4()(XMFLOAT4X4)*pSource 指针为 NULL,满足函数的断言条件。传递的指针起初未初始化,然后我尝试 [在堆上] 设置指针。

watch 已设置,XMFLOAT4X4 值已使用 XMStoreFloat4X4() 初始化为矩阵恒等式。

XMMATRIX Identity = XMMatrixIdentity();
XMStoreFloat4x4(&e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale, Identity);

最后的罪魁祸首是转换函数有太多重载,我错过了一个错误的调试步骤(我在其中一个函数中设置了一个新的 XMFLOAT4X4 变量并且从未初始化它)从早些时候。问题已解决。

最佳答案

DirectXMath 是库中的共享源,因此您可以在调试器中单步执行函数。

XMLLoadFloat4x4 中唯一的断言是验证输入指针不为空:

/------------------------------------------------------------------------------
_Use_decl_annotations_
inline XMMATRIX XMLoadFloat4x4
(
const XMFLOAT4X4* pSource
)
{
assert(pSource);
#if defined(_XM_NO_INTRINSICS_)

你认为 e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale 指针实际上是在这里设置的吗?

关于c++ - DirectX 11 : Runtime Assertion Failure using XMLoadFloat4X4(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26600317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com