2017-01-29 16 views
0

В компьютерной графике обычные векторы используются для определения направления, в котором поверхность некоторой геометрии «обращена», потому что они перпендикулярны указанной поверхности.В какой системе координат нормальные вершины заканчиваются после преобразования нормальной матрицей?

Когда положение вершины преобразуется матрицей модельного вида, теперь считается, что вершина находится в «пространстве вида», потому что теперь она находится в системе координат, которая находится относительно зрителя/камеры.

Однако, когда вершина нормальная преобразуется, А нормальная матрица ¹ используется вместо.

В то время как I understand why this is done, я не уверен, что преобразованная нормальная вершина также называется находящейся в «пространстве просмотра». Интуитивно кажется, что это может быть так.

Действительно ли это правильно сказать, что норма веры, преобразованная нормальной матрицей, находится в «пространстве просмотра»? Если нет, то нормальная вершина преобразуется в одно и то же координатное пространство или есть какой-то другой, более подходящий термин?


¹ Транспонирование обратной матрицы модели.

+0

Да, вы можете это сказать. Но я не знаю, как написать ответ, а не просто «да». – BDL

+0

отличие состоит в том, что нормальная матрица имеет начало координат, равную '(0,0,0)', поэтому она преобразует только направления, а не позиции, которые идеально подходят для векторного преобразования (преобразованный вектор имеет тот же размер, но в другом направлении). Если вы преобразовываете нормальный вектор по modelview_matrix, то он обрабатывается как позиция вместо вектора, который не является тем, что нам нужно для освещения. – Spektre

ответ

1

Да. Позволь мне объяснить. (извините за написание эссе!)

Хотя обе вершины и нормали обычно представлены в виде 3D-векторов с плавающей запятой, их природа делает их разными.

Координатное пространство - это не что иное, как сравнение, из которого измеряется геометрия происхождения относительно.

Например, я определяю два куба размером 1x1x1. Происхождение, из которого определены все их 8 вершин, находится в самом их центре. Поэтому их вершинные координаты являются всеми возможными комбинациями (+ -0,5, + -0,5, + -0,5).

Эти кубы могут показаться похожими координатами, но до сих пор мы рассматривали их как объекты сами по себе. Чтобы поместить их в сцену, нам нужно определить трансформацию, которая определит их местоположение, ориентацию и размер в этой сцене.

Если я применить тождественное преобразование на обоих кубов, теперь я могу сказать, что они находятся в одной и той же координатном пространстве, потому что истоки, с помощью которого определяются координаты всех вершин как кубов теперь то же самое.

Не имеет значения, могу ли я изменить одну или обе трансформации в зависимости от того, какое преобразование я прошу. Пока я могу сказать, что после того, как преобразование применяется к координатам каждого соответствующего куба, координаты всех вершин каждого куба измеряются относительно одного и того же происхождения, они находятся в одном и том же координатном пространстве.


А как нормали подходят на этой фотографии?

Здесь я проведу различие между нормальностью поверхности и нормальным вектором. Нормальная поверхность - математическая концепция, представляющая нормализованный вектор, ортогональный определенной точке на поверхности модели. Нормальным вектором является конкретное значение этой поверхностной нормали в известной точке. Обычный вектор - это то, что вы обычно храните в памяти вместе с вашими координатами вершин.

Некоторые преобразования могут изменять нормаль поверхности модели. Другие нет. Если я переведу любой из кубов, определенных мной ранее, направления каждой поверхности куба тоже не изменятся. Поэтому нормали поверхности остаются точно такой же, какой вы выбираете на поверхности. То же самое верно при масштабировании куба.

Однако, если я поворачиваю куб, меняется ориентация некоторых или всех поверхностей на кубе. Это, в свою очередь, означает изменение нормалей поверхности. Таким образом, нормальные векторы, хранящиеся как часть вершинных спецификаций в памяти, устаревают и также должны быть повернуты, чтобы снова привести их в соответствие с нормалями поверхности.

Таким образом, мы можем сказать, что нормальные векторы зависят от нормалей поверхности, которые, в свою очередь, зависят от любого преобразования, выполненного над вершинами (или любой точкой на поверхности модели). Поэтому применение преобразования на вершине, взятие его из одного координатного пространства в другое, приводит к тому, что нормальный вектор следует примеру.

Даже если поверхностная нормаль технически не всегда зависит от преобразования, применяемого к модели (см. Перевод), преобразование из одного координатного пространства в другое может включать только преобразование идентичности, как я показал ранее.

Итак, чтобы ответить на ваш вопрос: Да, применение ряда потенциально различных преобразований на множестве потенциально разных координат, преобразующих их в одно и то же пространство координат, потенциально изменит и их нормали, которые будут независимо считаться находящимися в одной и той же координате пространства как вершины/точки на поверхности модели, из которых они представляют нормальную поверхность.

+0

Большинство вещей, о которых вы упомянули, я уже понимаю. Мой вопрос состоял в том, что если после нормализации нормальной поверхности (которая представлена ​​нормальным вектором) нормальная матрица, то было бы правильным сказать, что нормальная поверхность была теперь * также * в пространстве вида так же, как и вершинные позиции, преобразованные матрицей модели. Из вашего последнего предложения кажется, что вы думаете, что ответ «да», правильно? – ray

+0

Да. Действительно, я по причинам, указанным выше. – Bartvbl

+0

Звучит честно, хотя он казался немного длиннее, чем действительно необходимо :) – ray