Расчет нормалей
От: Sysel  
Дата: 27.03.07 09:55
Оценка:
Hi

Помогите плиз, я начинающий gamedevelop'er.
Есть ландшафт, нужно сделать нормали к грани или вертексу.
Пишу на OpenGL. Если можно пример или линк.
Re: Расчет нормалей
От: NikeByNike Россия  
Дата: 28.03.07 14:01
Оценка: +1
Здравствуйте, Sysel, Вы писали:

S>Hi


S>Помогите плиз, я начинающий gamedevelop'er.

S>Есть ландшафт, нужно сделать нормали к грани или вертексу.
S>Пишу на OpenGL. Если можно пример или линк.

Нормаль к грани считается очень просто: (V2 — V1) * (V3 — V1), нормализовать её перед использованием или нет — зависит от методов использования. Как правило можно обойтись без нормализации.

Нормаль к вертексу, которая собственно говоря и используется для отрисовки, считается как: Normal = SUMM(FaceNormal * поправочный коэффициент), для всех фейсов инцидентных вершине. В простом случае поправочный коэффициент можно сделать = 1, или высчитывать в зависимости от важности фейса. Нормализация тоже по обстоятельствам (обычно нормализация происходит в видяхе).

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

P.S.
В случае ландшафта, если считать, что он представлен картой высот — можно соптимизировать расчеты, но это зависит от его структуры.
Нужно разобрать угил.
Re[2]: Расчет нормалей
От: Vain Россия google.ru
Дата: 29.03.07 17:05
Оценка:
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: Расчет нормалей
От: demi США  
Дата: 29.03.07 20:53
Оценка:
Здравствуйте, 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 не предвидется.
Не стыдно попасть в дерьмо, стыдно в нём остаться!
Re[3]: Расчет нормалей
От: NikeByNike Россия  
Дата: 30.03.07 09:33
Оценка:
Здравствуйте, 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>Всегда происходит?
Как укажешь. Тем более, что геймдевелоперы обычно используют шейдеры.
Нужно разобрать угил.
Re[4]: Расчет нормалей
От: NikeByNike Россия  
Дата: 30.03.07 09:35
Оценка:
Здравствуйте, demi, Вы писали:

NBN>>> Нормализация тоже по обстоятельствам (обычно нормализация происходит в видяхе).

V>>Всегда происходит?
D>только если включить. но это не рекомендуется и поддержки этого в новых поколениях api не предвидется.

1. Что значит не рекомендуется? Кем не рекомендуется?
2. В каких апи не предвидится поддержка? Ты имеешь в виду Директ10?
Нужно разобрать угил.
Re[4]: Расчет нормалей
От: Vain Россия google.ru
Дата: 30.03.07 09:49
Оценка:
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: Расчет нормалей
От: NikeByNike Россия  
Дата: 30.03.07 10:12
Оценка:
Здравствуйте, Vain, Вы писали:

Так оно все так, но в играх принято применять только одну. Не усложняй
Нужно разобрать угил.
Re[6]: Расчет нормалей
От: Vain Россия google.ru
Дата: 30.03.07 12:17
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Так оно все так, но в играх принято применять только одну. Не усложняй

Что значит не усложняй, это обязан знать каждый.. 3D девелопер!
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: Расчет нормалей
От: NikeByNike Россия  
Дата: 30.03.07 12:26
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, NikeByNike, Вы писали:


NBN>>Так оно все так, но в играх принято применять только одну. Не усложняй

V>Что значит не усложняй, это обязан знать каждый.. 3D девелопер!

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

P.S.
Вообще, в качестве базового списка вопросов по 3Д математике я рекомендовал бы использовать хелп из DirectX SDK. И не соваться в графику, пока не сможешь объяснить, что и как делает каждая функция из его раздела математики
Нужно разобрать угил.
Re[8]: Расчет нормалей
От: Vain Россия google.ru
Дата: 30.03.07 12:57
Оценка:
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: Расчет нормалей
От: NikeByNike Россия  
Дата: 30.03.07 16:21
Оценка:
Здравствуйте, Vain, Вы писали:

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