Показать сообщение отдельно
Старый 24.07.2016, 03:22   #802
NB79
Местный
 
Регистрация: 12.07.2015
Сообщений: 417
По умолчанию

А в Иле тоже через трубу просвечивает? При двустороннем материале в Иле такого быть не должно.

В ОГЛ есть такая функция, glCullFace. Вот через неё, как раз, и идёт управление видимостью лицевых/обратных граней. Через неё можно управлять отсечением тех граней, которые не нужно выводить. Это для оптимизации отрисовки. Например, у нас глухой ящик. Оказаться внутри него мы не можем и, соответственно, не можем посмотреть изнутри. И значит, что нет смысла рисовать внутренние грани. Мы задаём для ящика односторонний материал и движок автоматом будет отсекать отрисовку внутренних граней. Если мы каким-то образом поместим камеру внутрь такого ящика, то увидим то, что находится снаружи, он изнутри будет прозрачным.

Если же у нас не замкнутый объём, например - коробка, то мы можем видеть и наружные, и внутренние грани. А значит - нам надо для неё делать материал двусторонним.

Аналогично и в DX, просто имя функции не помню. Эти оптимизации дают нам выигрыш в производительности за счёт того, что движок не рисует то, что мы никогда не увидим.

Твоя труба - это вариант коробки. Если у тебя материал односторонний, то как раз, при взгляде сверху через внутренние грани мы и будем видеть то, что вокруг трубы находится. Странно, что у тебя это не работает. Не должно быть такого.

Может ты вместо альфы блендинг используешь? Он не для дыр, а для полупрозрачностей обычно используется. Вот с ним вполне могут быть нюансы. В общем, для материала трубы должно быть установлено в иловском материале tfDoubleSide 1 (кажется так параметр называется, если склероз не изменяет), а нашлёпка сверху tfBlend 0 и tfAlpha в значение, ниже которого пиксели должны не рисоваться. Названия параметров пишу по памяти, может слегка ошибся в написании.

UPD: Да, и для нашлёпки наверное tfDoubleSide надо установить в 0.

Последний раз редактировалось NB79; 24.07.2016 в 03:26.
NB79 вне форума   Ответить с цитированием