gpt4 book ai didi

c++ - Eigen slerp 导致读取访问冲突 (C++/OpenGL)

转载 作者:行者123 更新时间:2023-11-28 01:34:00 29 4
gpt4 key购买 nike

我正在从 Eigen libary 调用 slerp()如下:

Eigen::MatrixXf Rtime = (Eigen::Quaternionf::Identity().slerp(timer, quarts[i])).toRotationMatrix();

其中 timer 是一个 float ,quarts 声明为

std::vector<Eigen::Quaternionf> quarts;

对 slerp 的调用有时只会导致读取访问冲突(大约 50% 的时间),这让我很困惑。

查看栈帧,Stack Frame我可以看到代码到达 Eigen::internal::pload 直到它中断。

通常我会认为我的索引不正确,但即使在i = 0quarts.size() = 1。我在 vector 中声明唯一的四元数:

Eigen::Matrix3f rotMatrix;
rotMatrix = U * V;
Eigen::Quaternionf temp;
temp = rotMatrix;
quarts.push_back(temp);

UV 来自奇异值分解的计算,所以我声明四元数的方式可能有问题?或者以某种方式将它存储在 vector 中会影响它?我不确定。

最佳答案

问题是 Quaternionf 需要 std::vector 不能保证的 16 字节对齐。更多详情 there .解决方案是使用对齐的分配器,例如:

std::vector<Quaternionf,Eigen::aligned_allocator<Quaternionf>> quats;

或者在 vector 中使用非对齐的四元数:

std::vector<Quaternion<float,Eigen::DontAlign>> quats;

关于c++ - Eigen slerp 导致读取访问冲突 (C++/OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50168109/

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