Здравствуйте, Sysel, Вы писали:
S>Hi
S>Помогите плиз, я начинающий gamedevelop'er. S>Есть ландшафт, нужно сделать нормали к грани или вертексу. S>Пишу на OpenGL. Если можно пример или линк.
Нормаль к грани считается очень просто: (V2 — V1) * (V3 — V1), нормализовать её перед использованием или нет — зависит от методов использования. Как правило можно обойтись без нормализации.
Нормаль к вертексу, которая собственно говоря и используется для отрисовки, считается как: Normal = SUMM(FaceNormal * поправочный коэффициент), для всех фейсов инцидентных вершине. В простом случае поправочный коэффициент можно сделать = 1, или высчитывать в зависимости от важности фейса. Нормализация тоже по обстоятельствам (обычно нормализация происходит в видяхе).
Практический алгоритм такой: обнуляешь все вертексные нормали, проходишь по всем треугольникам, для каждого считаешь нормаль и прибавляешь её к каждой (из трех) нормалей вертексов.
P.S.
В случае ландшафта, если считать, что он представлен картой высот — можно соптимизировать расчеты, но это зависит от его структуры.
Здравствуйте, NikeByNike, Вы писали:
S>>Помогите плиз, я начинающий gamedevelop'er. S>>Есть ландшафт, нужно сделать нормали к грани или вертексу. S>>Пишу на OpenGL. Если можно пример или линк.
NBN>Нормаль к грани считается очень просто: (V2 — V1) * (V3 — V1), нормализовать её перед использованием или нет — зависит от методов использования. Как правило можно обойтись без нормализации.
Осталось токо найти формулу: v2*v3 для x,y,z
Надо не забывать ещё что направление нормали зависит от системы:
Правосторонняя — по правилу правого винта/буравчика/ноги/руки
Левосторонняя — по правилу левого винта/буравчика/ноги/руки (т.е. в противоположную сторону!)
Многие это забывают..
Я точно не помею, но вроде в OpenGL мировая — правосторонняя система.
В DirectX наоборот.
NBN> Нормализация тоже по обстоятельствам (обычно нормализация происходит в видяхе).
Всегда происходит?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, NikeByNike, Вы писали:
S>>>Помогите плиз, я начинающий gamedevelop'er. S>>>Есть ландшафт, нужно сделать нормали к грани или вертексу. S>>>Пишу на OpenGL. Если можно пример или линк.
NBN>>Нормаль к грани считается очень просто: (V2 — V1) * (V3 — V1), нормализовать её перед использованием или нет — зависит от методов использования. Как правило можно обойтись без нормализации. V>Осталось токо найти формулу: v2*v3 для x,y,z V>Надо не забывать ещё что направление нормали зависит от системы: V>Правосторонняя — по правилу правого винта/буравчика/ноги/руки V>Левосторонняя — по правилу левого винта/буравчика/ноги/руки (т.е. в противоположную сторону!) V>Многие это забывают.. V>Я точно не помею, но вроде в OpenGL мировая — правосторонняя система. V>В DirectX наоборот.
NBN>> Нормализация тоже по обстоятельствам (обычно нормализация происходит в видяхе). V>Всегда происходит?
только если включить. но это не рекомендуется и поддержки этого в новых поколениях api не предвидется.
Не стыдно попасть в дерьмо, стыдно в нём остаться!
Здравствуйте, Vain, Вы писали:
NBN>>Нормаль к грани считается очень просто: (V2 — V1) * (V3 — V1), нормализовать её перед использованием или нет — зависит от методов использования. Как правило можно обойтись без нормализации. V>Осталось токо найти формулу: v2*v3 для x,y,z V>Надо не забывать ещё что направление нормали зависит от системы: V>Правосторонняя — по правилу правого винта/буравчика/ноги/руки V>Левосторонняя — по правилу левого винта/буравчика/ноги/руки (т.е. в противоположную сторону!) V>Многие это забывают.. V>Я точно не помею, но вроде в OpenGL мировая — правосторонняя система. V>В DirectX наоборот.
Кросс умножение векторов одинаково в любой системе. Покрайней мере в практической математике.
Формула такая:
V = V1 * V2;
V.x = V1.y * V2.z — V1.z * V2.y;
V.y = V1.z * V2.x — V1.x * V2.z;
V.z = V1.x * V2.y — V1.y * V2.x;
Но как геймдевелоперу я бы порекомендовал: 1 — подтянуть математику. 2 — найти нормальную математическую либу.
NBN>> Нормализация тоже по обстоятельствам (обычно нормализация происходит в видяхе). V>Всегда происходит?
Как укажешь. Тем более, что геймдевелоперы обычно используют шейдеры.
Здравствуйте, demi, Вы писали:
NBN>>> Нормализация тоже по обстоятельствам (обычно нормализация происходит в видяхе). V>>Всегда происходит? D>только если включить. но это не рекомендуется и поддержки этого в новых поколениях api не предвидется.
1. Что значит не рекомендуется? Кем не рекомендуется?
2. В каких апи не предвидится поддержка? Ты имеешь в виду Директ10?
Здравствуйте, NikeByNike, Вы писали:
NBN>Кросс умножение векторов одинаково в любой системе.
Но при этом геометрически зависит от базиса системы:
К примеру, для левосторонней системы перемножение векторов самого базиса системы X-Y-Z:
X * Y = Z
Y * Z = X
Z * X = Y
Но:
Y * X = -Z
Z * Y = -X
X * Z = -Y
Т.е. зависит от "направления" перемножения, это вроде называется симметричностью..
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, NikeByNike, Вы писали:
NBN>Так оно все так, но в играх принято применять только одну. Не усложняй
Что значит не усложняй, это обязан знать каждый.. 3D девелопер!
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, NikeByNike, Вы писали:
NBN>>Так оно все так, но в играх принято применять только одну. Не усложняй V>Что значит не усложняй, это обязан знать каждый.. 3D девелопер!
Это мы в универе знали, а в реальной жизни все проще. Я до сих пор не понимаю университетского курса по кватернионам, но это не мешает их применять и понимать, как они работают в реальной жизни
P.S.
Вообще, в качестве базового списка вопросов по 3Д математике я рекомендовал бы использовать хелп из DirectX SDK. И не соваться в графику, пока не сможешь объяснить, что и как делает каждая функция из его раздела математики
Здравствуйте, NikeByNike, Вы писали:
NBN>>>Так оно все так, но в играх принято применять только одну. Не усложняй V>>Что значит не усложняй, это обязан знать каждый.. 3D девелопер! NBN>Это мы в универе знали, а в реальной жизни все проще.
Знать это токо полдела, совсем другое использовать.
Здесь всё сводится к тому, что в 3D важнее геометрия, чем алгебра. Не будешь знать/понимать геометрию, алгебра тебе не поможет. NBN>P.S. NBN>Вообще, в качестве базового списка вопросов по 3Д математике я рекомендовал бы использовать хелп из DirectX SDK.
Знать всё не обязательно, главное знать некоторый диапазон ключевых моментов:
— длина вектора
— нормаль (единичный вектор) из вектора (нормализация)
— векторное произведение и связанные с ним особенности
— скалярное произведение и связанные с ним особенности
— формулы+матрица поворота (тригонометрия)
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Я бы сказал что это жизненно необходимый минимум, но никак не достаточные знания...
Кроме того я бы добавил, что стоит уметь пользоваться мат.либами, а не писать все эти операции в ручную.