Сообщение от Кирпи4
Надо, надо, конечно надо =)
|
Я ожидал что будут какие-то вопросы направляющие, а то я вот даже незнаю что подробнее объяснить
Сообщение от Mr_F_
рисовать придётся видимо не 1 раз? т.к. даже если с огромным фовом отрендерить кадр в направлении портала, не факт что у нас в нём растеризуются другие порталы, которые очень по бокам.
наверное надо будет 5 раз рендерить, аля полукуб, чтобы со всех сторон потенциально видимые увидеть.
алсо, вместо софтварного растеризатора, эффективнее было бы юзать occlusion queries.
|
Рисовать 1 раз, ибо рисуем не через фрустум, а просто все что с одной стороны портала ( определяем чо с какой стороны находится относительно плоскости портала, как для BSP разделяющая плоскость короче ).
Насчет окклюжн квери - хороший вариант, но я предпочитаю велосипеды

)
Сообщение от Mr_F_
хм, я тупо делал фрустум из позиции камеры и точек портала (их было всегда 4)
|
Если портал виден чуть-чуть, то получишь оверхед, ибо фрустум будет через весь портал, и соответственно будет рисоваться то что не видно из камеры. Для маленьких порталов может и лучше будет, не надо будет тратить время на обрезку, и через такой портальчик

видно мало. Но для больших порталов уже сомнительно.
Сообщение от Mr_F_
в принципе достаточно получить описывающий прямоугольник портала в экране и поплющить направление/фов фрустума, чтобы через него шёл.
|
Ну можно и так, если портал не сильно сложный по форме, иначе такое огрубление прямоугольником может не окупится.
ЗЫ
Пока парочку картинок прикреплю для топикстартера, надеюсь они немного прояснят хрень в 5ой мессаге
На первой изображены некоторые варианты кулинга через порталы:
рис. 1 - порталов нет, обычный вариант кулинга через камеру
рис. 2 - один портал, полностью виден из камеры, темно-синим виден новый фрустум построеный через портал
рис. 3 - тот же вариант, только камеру немного повернули, портал теперь виден частично, ярко-красным - портал обрезаный фрустумом камеры
рис. 4 - вариант посложнее, тут уже проглядывается иерархия порталов
на второй схематично построение фрустума через полигон портала
p0 - точка камеры
p1 .. p6 - точки полигона портала
E1 .. E6 - ребра полигона, проходясь по которым строим плоскости фрустума
V1 .. V6 - вектора, построенные через точки портала от точки камеры
для каждой плоскости фрустума надо найти нормаль ( направление плоскости ) и смещение относительно центра координат.
внизу справа изображено что из себя представляет нормаль и смещение на примере треугольника ( которые и получаются по ходу расчета фрустума )
внизу слева - как считается
Ну а вообще всю эту тему можно долго мусолить, поэтому желательно чтобы были какие-то вопросы конкретные
