Я пытаюсь применить преобразование к 3D-объекту в файле STL (без создания структурированного объекта-сетки). Вот как я продолжаю: я читаю информацию о нормалях и гранях одну за другой в файле STL, применяю свое преобразование к каждой вершине и к нормали лица и записываю новые вычисленные значения в другой файл STL. Вершины в сгенерированном файле в порядке, но мои нормали неправильные. Кажется, я не могу просто применить свое преобразование к нормали, как к вершине. Как такое возможно ??





Преобразование вектора отличается от преобразования точки - вы не можете применить преобразование, только вращения.
Вы должны посмотреть преобразование нормалей.
На самом деле, Джефф, ты прав только отчасти. Что касается вектора, ты прав. Но для нормального, который немного отличается по значению, вы должны преобразовать верхние 3x3, но инвертировать, а затем транспонировать.
Да - для вращений (и отражений) транспонирование является является обратным, поэтому обратное транспонирование - это просто исходная матрица.
Ага - это анизотропное масштабирование, которое убивает ваши нормали - вот почему обратное транспонирование.
Вам нужно применить обратное транспонирование вашей матрицы к нормалям вместо использования исходной матрицы.
Кроме того, вам нужно обрабатывать w-координату нормали как 0 (а не 1, как с точками) при ее преобразовании.
Вы можете применить практически одно и то же преобразование для обоих, но помните об этих двух вещах:
Quote Rodrigo Lopez: Normals are directions, so the position part of a 4x4 matrix shouldn't really be applied though renormalization will fix it anyway.
перенормировка не исправит это: предположим, что нормальное значение равно (1,0,0), затем переведем его с помощью (-2,0,0) => нормальное значение будет (-1,0,0), которое нормализовано и неверно, потому что нормальное должно оставаться прежним.
К чести Джеффа, вы должны отметить, что то, что он сказал, справедливо для жестких преобразований, таких как вращения (кажется, именно то, о чем он говорил). И Джумар не сказал, что именно он имел в виду под «преобразованием» ...