2

我有一些使用 glm 进行向量和矩阵数学的函数和数据结构。

现在我想计算关于输入变量的梯度。由于计算相当复杂,我想使用自动微分来验证我的手动梯度计算。

我找到了https://autodiff.github.io/,这正是我所需要的。它的标量变量基于一个struct包含 ashared_ptr到一个表达式。我想使用glm::vec<2, autodiff::Variable<float>, 和类似的矩阵,以及所有有趣的 glm 函数。

我已经开始移植代码,但我遇到了问题。例如glm::dot包含支票

template<length_t L, typename T, qualifier Q>
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)
{
    GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
    return detail::compute_dot<vec<L, T, Q>, T, detail::is_aligned<Q>::value>::call(x, y);
}

我相信在这种情况下,将支票替换为std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE(以及提出拉取请求)是安全的,但我不确定,我当然也不知道所有其他地方。

在包含 glm 之前,我已经定义了以下内容:

#define GLM_FORCE_PURE
#define GLM_FORCE_XYZW_ONLY
#define GLM_FORCE_UNRESTRICTED_GENTYPE

一起使用 glm 和 autodiff 是否现实?

4

0 回答 0