Да. Позволь мне объяснить. (извините за написание эссе!)
Хотя обе вершины и нормали обычно представлены в виде 3D-векторов с плавающей запятой, их природа делает их разными.
Координатное пространство - это не что иное, как сравнение, из которого измеряется геометрия происхождения относительно.
Например, я определяю два куба размером 1x1x1. Происхождение, из которого определены все их 8 вершин, находится в самом их центре. Поэтому их вершинные координаты являются всеми возможными комбинациями (+ -0,5, + -0,5, + -0,5).
Эти кубы могут показаться похожими координатами, но до сих пор мы рассматривали их как объекты сами по себе. Чтобы поместить их в сцену, нам нужно определить трансформацию, которая определит их местоположение, ориентацию и размер в этой сцене.
Если я применить тождественное преобразование на обоих кубов, теперь я могу сказать, что они находятся в одной и той же координатном пространстве, потому что истоки, с помощью которого определяются координаты всех вершин как кубов теперь то же самое.
Не имеет значения, могу ли я изменить одну или обе трансформации в зависимости от того, какое преобразование я прошу. Пока я могу сказать, что после того, как преобразование применяется к координатам каждого соответствующего куба, координаты всех вершин каждого куба измеряются относительно одного и того же происхождения, они находятся в одном и том же координатном пространстве.
А как нормали подходят на этой фотографии?
Здесь я проведу различие между нормальностью поверхности и нормальным вектором. Нормальная поверхность - математическая концепция, представляющая нормализованный вектор, ортогональный определенной точке на поверхности модели. Нормальным вектором является конкретное значение этой поверхностной нормали в известной точке. Обычный вектор - это то, что вы обычно храните в памяти вместе с вашими координатами вершин.
Некоторые преобразования могут изменять нормаль поверхности модели. Другие нет. Если я переведу любой из кубов, определенных мной ранее, направления каждой поверхности куба тоже не изменятся. Поэтому нормали поверхности остаются точно такой же, какой вы выбираете на поверхности. То же самое верно при масштабировании куба.
Однако, если я поворачиваю куб, меняется ориентация некоторых или всех поверхностей на кубе. Это, в свою очередь, означает изменение нормалей поверхности. Таким образом, нормальные векторы, хранящиеся как часть вершинных спецификаций в памяти, устаревают и также должны быть повернуты, чтобы снова привести их в соответствие с нормалями поверхности.
Таким образом, мы можем сказать, что нормальные векторы зависят от нормалей поверхности, которые, в свою очередь, зависят от любого преобразования, выполненного над вершинами (или любой точкой на поверхности модели). Поэтому применение преобразования на вершине, взятие его из одного координатного пространства в другое, приводит к тому, что нормальный вектор следует примеру.
Даже если поверхностная нормаль технически не всегда зависит от преобразования, применяемого к модели (см. Перевод), преобразование из одного координатного пространства в другое может включать только преобразование идентичности, как я показал ранее.
Итак, чтобы ответить на ваш вопрос: Да, применение ряда потенциально различных преобразований на множестве потенциально разных координат, преобразующих их в одно и то же пространство координат, потенциально изменит и их нормали, которые будут независимо считаться находящимися в одной и той же координате пространства как вершины/точки на поверхности модели, из которых они представляют нормальную поверхность.
Да, вы можете это сказать. Но я не знаю, как написать ответ, а не просто «да». – BDL
отличие состоит в том, что нормальная матрица имеет начало координат, равную '(0,0,0)', поэтому она преобразует только направления, а не позиции, которые идеально подходят для векторного преобразования (преобразованный вектор имеет тот же размер, но в другом направлении). Если вы преобразовываете нормальный вектор по modelview_matrix, то он обрабатывается как позиция вместо вектора, который не является тем, что нам нужно для освещения. – Spektre