glm :: dot product возвращает неожиданное значение

Я сталкиваюсь со следующей проблемой. В моем коде я имею дело со значением -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, и это должно быть недопустимым делением. На самом деле мой полученный якобиан равен -1. # IND000000000000. Поэтому я пошел назад. Мы можем просто принять во внимание float baseGeom и первое произведение внутренней точки: точка (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 :: точка возвращает меня в результате 0,00000000000000000. Как вы думаете, это ошибка?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector