Войти
ПрограммированиеФорумГрафика

Масштабирование модели и нормали (2 стр)

Страницы: 1 2 3 Следующая »
#15
0:40, 17 авг 2018

>
>Вроде норм все, где масштабирование то с косяком?
Нету. Я же выше написал, что нормализация сетела. Исправил. Теперь все норм.

#16
0:41, 17 авг 2018

eDmk
лоцк

#17
0:42, 17 авг 2018

Исправил ссылку на 2-й видос.

#18
11:54, 17 авг 2018

Нормали после масштабирования неплохо бы нормализовать, не?

#19
11:56, 17 авг 2018

g-cont
> Нормали после масштабирования неплохо бы нормализовать, не?
Дык нормализовал. Все стало норм.

#20
12:02, 17 авг 2018

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

#21
12:29, 17 авг 2018

>
>При неравномерном масштабировании нормали надо умножать на обратную транспонированную матрицу.
А ведь точно. Если не транспонировать, то ерунда получается.

#22
13:45, 17 авг 2018

Неравномерное масштабирование это "надувание" по аксиальным осям выборочно? Ну да, это сложная штука, особенно если модель из субмешей состоит.

#23
10:05, 22 авг 2018

}:+()___ [Smile]
> При неравномерном масштабировании нормали надо умножать на обратную
> транспонированную матрицу.
А потом понадобится ещё какое-то преобразование, помимо масштабирования, и опять будут проблемы.
eDmk
> в моем случае (софт) один раз для всей модели.
Я правильно понял, что нормали пересчитываются заранее, не в шейдере? Я когда-то поднимал этот вопрос и нашёл ответ:
https://gamedev.ru/code/forum/?id=224541

#24
11:03, 22 авг 2018

Mikle
> А потом понадобится ещё какое-то преобразование, помимо масштабирования, и опять будут проблемы.
Для любого аффинного преобразования нормали надо умножать на обратную транспонированную матрицу.

#25
11:26, 22 авг 2018

}:+()___ [Smile]
Там общее решение для любой, и не аффинной матрицы.

#26
12:56, 22 авг 2018

>Я правильно понял, что нормали пересчитываются заранее, не в шейдере? Я когда-то поднимал этот вопрос и нашёл ответ:
Да все решил уже. Нормаль же - это вектор. При масштабирование происходит увеличение/уменьшение длины вектора.
Поэтому требуется нормализация, т.е. пересчет длины вектора и приведение к единичной длине. Так что все норм.

Можно сделать нормализацию с учетом коэффициента масштаба. Нужно брать длину вектора и умножать на Zoom.
Потом приводить к единице. Тоже будет норм.

#27
13:11, 22 авг 2018

eDmk
Попробуй просто отскейлить с разным масштабом по осям и посмотри результат. Я уже не говорю о более сложных преобразованиях.

#28
13:30, 22 авг 2018

Mikle
> Там общее решение для любой, и не аффинной матрицы.
Преобразование любой матрицей с ненулевым определителем и называется аффинным.

#29
13:33, 22 авг 2018

Как строится матрица МВП?
Берешь матрицу модели, берешь матрицу камеры, берешь матрицу проекций и перемножаешь между собой.

    mat4 mvp = projection * view * model;

Потом уже этой итоговой матрицей воздействуешь (умножаешь) на вершины модели.

    vec4 world_position = mvp * vec3 ( vertex_position, 1.0 );

Это всё понятно, это всё мы проходили.
Так вот матрица модели (точнее матрица преобразования от локальных координат к мировым координатам) и есть та матрица, которая нам нужна.
Из неё и мы получаем матрицу для преобразования нормалей.

    mat3 normal = mat3 ( inverse ( transpose ( model ) ) );
    vec3 world_normal = normal * vertex_normal;
Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.