Я хотел бы узнать следующую информацию:
- Кто они такие?
- Пример использования в разработке игр (область, в которой они используются)
О следующих типах векторов:
Normal
Tangent
Binormal
Достаточно простого объяснения, ориентированного на разработку игр.
Ответы:
Вообще говоря, вектор нормалей представляет направление, направленное непосредственно «наружу» от поверхности, то есть он ортогональн (под углом 90 градусов) к любому вектору, который находится в одной плоскости (в случае плоской поверхности) или касается (в случай неплоской поверхности) поверхности в данной точке.
Касательный вектор обычно рассматривается как один вектор, который существует в плоскости поверхности (для плоской поверхности) или лежит касательной к контрольной точке на криволинейной поверхности (т. Е. Если плоская плоскость была построена с такой же нормалью от контрольной точки). , касательный вектор будет копланарным с этой плоскостью).
Концепция бинормального вектора немного сложнее; в компьютерной графике он обычно относится к вектору битангенса (ссылка здесь ), который фактически является «другим» касательным вектором для поверхности, который ортогонален как вектору нормали, так и выбранному вектору тангенса.
Что касается того, как они вычисляются, это варьируется в зависимости от сложности поверхности и от того, насколько точной должна быть нормаль (в некоторых случаях, например, с помощью гладких шейдеров, более желательно вычислить нормаль для приближенной поверхности, когда фактическая информация для поверхности нет), но есть несколько обобщенных формул , приведенных здесь .
С точки зрения того, где они происходят, ответ ВЕЗДЕ . Нормальные векторы используются для позиционирования камер и объектов в трехмерном пространстве, для определения траекторий, отражений и углов в физических расчетах, для отображения скинов и текстур в трехмерных моделях, для определения смещений траекторий при программировании ИИ, для подсказок шейдерам о том, как освещать, затенять и окрашивать точки на поверхности относительно источников света, камеры и других объектов и т. д. Они, возможно, являются одной из самых полезных частей информации в 3D-среде, и они даже очень полезны в 2D-среде.
источник
Нормальные векторы обычно используются для расчетов освещения. Предполагается, что это вектор, перпендикулярный поверхности, который аппроксимируется вершинами сетки. Нормы определяются в каждой позиции вершины, но могут быть рассчитаны по-разному, в зависимости от того, как вы хотите, чтобы свет отражался в этой вершине, или от того, что вы хотите делать со своими вычислениями света в шейдере.
Касательные и бинормальные векторы - это векторы, перпендикулярные друг другу, и вектор нормали, которые по существу описывают направление координат текстуры u, v относительно поверхности, которую вы пытаетесь визуализировать. Как правило, они могут использоваться вместе с картами нормалей, которые позволяют создавать детали освещения под поверхностью для вашей модели (неровности).
Очевидно, есть и другие способы использования этих векторов, и я только что описал их среднее использование. Для получения дополнительной технической информации я бы предложил вам взять книгу по компьютерной графике или изучить некоторые статьи в Интернете. Есть много информации об этом.
источник
Разница между касательной и бинормальным не сразу очевидна на поверхностях, но это не должно вызывать удивления - бинормальное было изначально определено не для поверхностей, а для кривых , где концепция имеет гораздо больше смысла (и где она действительно живет) как «нормальный» в том смысле, что он ортогонален направлению движения, то есть имени). Чтобы быть более конкретным, учитывая пространственную кривую вида p = V (t) = (V x (t), V y (t), V z (t)), то касательная, которая представляет собой вектор, указывающий на Направление движения - определяется как T u = dp / dt = (dV x / dt, dV z / dt, dV z/ дт). (Я использую нижний индекс здесь, чтобы различать «ненормализованный», поскольку здесь у меня нет MathJax.) Тогда (мгновенная) скорость вдоль кривой равна просто s = | T u |, длине касательного вектора и «нормализованный» касательный вектор - это просто T = T u / s.
Тогда вектор нормали к кривой является производной от нормализованного касательного вектора по времени, N u = dT / dt; причина, по которой здесь используется нормализованная касательная, состоит в том, чтобы не допустить перекоса скорости по кривой по кривой - вы можете показать, что при этом определении у нас всегда TN u = 0. Обратите внимание, что N u не обязательно является единичным вектором. больше, чем T u ; на самом деле его величина k = | N u | является (мгновенной) кривизной кривой в данной точке, а точка p + N u является центром так называемой осциллирующей окружности (в данной точке). Нормализованная нормаль тогда просто N = N u/ k, а касательная B представляет собой перекрестное произведение B = TxN; поскольку T и N оба являются единичными векторами и они ортогональны друг другу, то B также является единичным вектором, а (T, N, B) является ортогональным кадром.
Обратите внимание, что согласно этому определению «бинормаль» к кривой ближе к тому, что мы считаем нормалью к поверхности (это нормаль к «локальной» плоскости кривой), а нормаль к кривой ближе к тому, что мы думаем о битанге к поверхности.
(К сожалению, это изображение на самом деле не соответствует концепции, но это лучшее, что я могу найти в Интернете, и я не могу с готовностью создать свою собственную ...)
источник