我面临以下问题。在我的代码中,我处理-1。#IND000000000000值。进入调试似乎这个值是由0/0部门返回的。为了解决这个问题,我试图弄清楚为什么我有这些意想不到的0值。事实证明,glm :: dot产品不能按预期工作。我有以下代码:
double jacobian = 1.0;
double baseGeom = fabs(dot(baseDir, n1)) * fabs(dot(baseDir, baseN0)) / baseDist2;
double shiftGeom = fabs(dot(shiftDir, n1)) * fabs(dot(shiftDir, tri->N)) / shiftDist2;
jacobian *= (shiftGeom / baseGeom);
在我的例子中,shiftGeom和baseGeom都是两个等于0.0的浮点数,这应该是非法的除法。实际上,我的jacobian等于-1。#IND000000000000。因此,我倒退了。我们可以考虑baseGeom float和第一个内点产品:dot(baseDir,n1)。
根据调试,我的baseDir vec3有值:
baseDir.x = -0.98280960321426392
baseDir.y = -0.18137875199317932
baseDir.z = 0.034456323832273483
而vec3 n1的值为:
n1.x = 0.024055255576968193
n1.y = 0.059235699474811554
n1.z = 0.99795418977737427
手动执行点积:
n1.x *= baseDir.x;
n1.y *= baseDir.y;
n1.z *= baseDir.z;
double result = n1.x + n1.y + n1.z;
我有那个结果= -7.0025885090529982e-010。然而,glm :: dot让我回来了0.00000000000000000。您认为错误是什么?