Re: opengl сгладить ломаную поверхность
От: Videoman Россия https://hts.tv/
Дата: 26.10.18 09:30
Оценка:
Здравствуйте, coder9999:

Ни в коем случае не являюсь спецом по 3D графике, но раз уж никто не отвечает, пока, попробую помочь, т.к. раньше немного работал с визуализацией моделей в OpenGL.

C>Вопрос, по материалам и освещению. Правильно ли я понимаю что для работы освещения нужны нормали к каждой вершине?

Правильно.

C>Как их рассчитывать?

У вас каждая плоскость описывается тремя вершинами, по часовой для определения где внешняя сторона плоскости, а где внутренняя. Также вы можете представить эти три вершины как два вектора задающие эту же плоскость. Если выполнить векторное произведение этих двух векторов, в результате, вы получите еще один вектор — это и будет нормаль. Если, при отрисовке каждой плоскости, задать для каждой из вершин нормаль для ее плоскости, то грани отрисуются рубленными, так как у вас сейчас.
Теперь, например, рассмотри вершину общую для любых нескольких плоскостей, например для трех. Для того чтобы сгладить освещение в этой вершине, можно при ее отрисовке задать нормаль, полученную как усреднение трех нормалей плоскостей сходящихся в этой вершине. Как получить такую нормаль? Да очень просто: для трех плоскостей есть три нормали A, B и С. Усредненная нормаль будет такой: ((Ax + Bx + Cx) / 3), ((Ay + By + Cy) / 3), ((Az + Bz + Cz) / 3) — просто усреднение координат по всем векторам. Далее движок сам интерполирует или считает промежуточные нормали для остальных точек плоскостей.

C>И какие должны быть правильные настройки для того чтобы освещение и материалы корректно заработали?

Нужно запретить автоматический расчет нормалей и включить режим, при котором вы сами задаете нормали для каждой вершины. Также нужно задать: будут ли честно считаться нормали остальных точек плоскости, или они будут получены интерполяцией заданных вами нормалей.
Отредактировано 26.10.2018 9:40 Videoman . Предыдущая версия . Еще …
Отредактировано 26.10.2018 9:31 Videoman . Предыдущая версия .
Отредактировано 26.10.2018 9:30 Videoman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.