Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Стенсильные тени изнутри. (Комментарии к статье)

Стенсильные тени изнутри. (Комментарии к статье)

robotПостоялецwww4 сен. 20049:56#0
Комментарий к Статье Стенсильные тени изнутри
tavПостоялецwww4 сен. 20049:56#1
...каждое такое ребро превращаем в квад... Понятно, что до бесконечности мы вытянуть его не можем...
Не понятно. Почему не можем???
Запросто:
glBegin(GL_QUADS);
  for (i=0;i<nEdges;i++)
  {
    ...
    //текущее ребро: V1-V2
    glVertex3f(V2.x,V2.y,V2.z);
    glVertex3f(V1.x,V1.y,V1.z);
    glVertex4f(V1.x-Light.x,V1.y-Light.y,V1.z-Light.z,0);
    glVertex4f(V2.x-Light.x,V2.y-Light.y,V2.z-Light.z,0);
  }
glEnd();
СеменПостоялецwww4 сен. 200410:25#2
Эта секция писалась для людей, которые никогда не реализовывали алгоритм, и поэтому усложнять все проективной геометрией не хотелось. Впрочем, похожий метод обсуждается дальше, где рассказывается об infinity matrix, и о том, что в этом случае достаточно треугольника, а не квада.
tavПостоялецwww5 сен. 20048:16#3
Семен
>для людей, которые никогда не реализовывали алгоритм
А при чём тут алгоритм. Речь идёт просто о точках в бесконечности. Можно таким же образом сделать луч лазера действительно бесконечной длины -- ведь отсечение в OpenGL идёт в однородных координатах.
>где рассказывается об infinity matrix
Ну, я читал на dev.dtf.ru статью "Мех. чётких стенс. теней", только совсем не понял зачём нужна эта infinity matrix. Ну отсекаются ShadowVolum'ы дальней плоскостью, что с того-то? Всё равно дальше неё никакой геометрии нет, и значит там и затенять то нечего. А отсечение и с обычной ProjectionMatrix работает правильно -- сам проверял, всё вроде нормально должно отсекаться. И на практике всё работает. Единственное не знаю как эти "шапки" делать.
>в этом случае достаточно треугольника, а не квада.
В смысле???? Как это так треугольник можно квадом заменить?

>Эта секция писалась для людей, которые никогда не реализовывали алгоритм
Ну с этой секцией ладно, но почему другие не так подробны. Там уже одни ссылки пошли.
Да, и для начинающих есть неплохой перевод урока NeHe про стенсильные тени.

Лучше, ИМХО, было про "любимый" способ написать. А то опять всё в общем и ничего конкретного (это я об этих "шапках").

DemoniacПостоялецwww5 сен. 20048:39#4
tav

Про шапки согласен!!!

Я не однократно Семена мучал по этому поводу, так ни до чего и не доспорились... :)

P.S.: вот, если бы, Семен написал статью чисто про Stencil Shadows, различные методы их построения ( я имею ввиду CPU или GPU (vs)), зачем нужна все-таки ента инфинити матрица и т.п. ,

и, конечно же, подкрепил это все _работоспосоным_ архивом с сырцами,

  - Вот это было бы здорово!!! -

СеменПостоялецwww5 сен. 200420:47#5
tav
Безусловно, так можно делать. Безусловно, речь идет о точках на бесконечности. Вообще говоря, стенсенльные тени обросли центнером триков, дополнений, возможных методов использования и так далее. Начиная от zfail и шапок, и заканчивая новомодными wedges. И рассказывать в примере алгоритм во всем объеме - я не решился. Хотелось дать простейшую реализацию, ничем не отягощенную.

Infinity matrix становится важной, когда требуется замкнутось волюма, в случае zfail. Вот там нельзя, чтобы волюм усекался far plane.

> смысле???? Как это так треугольник можно квадом заменить?
Если две вершины квада находятся на бесконечности, можно вместо него рисовать треугольник с одной бесконечно удаленной вершиной. Тем самым сэкономив на количестве полигонов в волюме.

> Ну с этой секцией ладно, но почему другие не так подробны. Там уже одни ссылки пошли.
Разжевывать предполагалось только простейший вариант. Так как дальше все становится очень индивидуально, я пытался просто показать все, что происходит в данный момент в этой области, чтобы выбор "кирпичиков" был как можно более полным. Разумеется, мне не хотелось спускаться до самых деталей в этих способах. Скорее, это пища для размышлений. YMMV, как говорит aruslan.

Даже в таком "сухом" изложении некоторые важные вещи выпали из статьи. В теме на форуме IronPeter рассказал об альтернативном способе избавления от тривиальных самозатенений, потом появился способ считать мягкость теней от shadow volume'ов более честно (wedges), и уже вышло несколько публикаций на эту тему.

В суматоху с шапками я, если честно, не въехал. Из статьи не понятно, зачем они нужны или как их строить? Скажите как написать, чтобы понятно было, я постараюсь поправить :)
Если мне не изменяет память, в теме Demoniac'a я пытался рассказать про шапки как минимум тремя разными способами, и вот, видимо, так и не смог объяснить.
Вроде и картинка есть... В общем, не знаю... Я был бы очень благодарен за помощь и предложения, как написать это понятней.

tavПостоялецwww6 сен. 20044:19#6
>Если две вершины квада находятся на бесконечности, можно вместо него рисовать треугольник с одной бесконечно >удаленной вершиной. Тем самым сэкономив на количестве полигонов в волюме.
Ну, если источник направленный, тогда согласен, а если точечный? И светит в бесконечность.

>Скажите как написать, чтобы понятно было, я постараюсь поправить :)
>Я был бы очень благодарен за помощь и предложения, как написать это понятней.
Эх, если бы я знал хотя бы как это сделать (шапки эти) я бы и спрашивать-то не стал, а уж как объяснить/написать.

DrebotНовичокwww20 дек. 200522:07#7
Можно по подробнее объяснить что это значит:

Отрисовать квад во весь экран с цветом яркости затененного участка (то есть например цвет (127, 127, 127) означает что в тени в два раза темнее).

ExecutorУдалёнwww21 дек. 20055:53#8
Ну то и значит... :) Конкретнее, что непонятно в этой фразе?
st0keПостоялецwww21 дек. 20059:57#9
Drebot
рисуешь квадрат перед экраном, чтобы в нужных участках была неть. Но так лучше не делать. Лучше рисовать геометрию. Так как потом можно будет освещение корректно сделать...
ДжоУдалёнwww12 сен. 200614:20#10
Вот опечатка:

Кроме этого, в каждое ребро между треугольниками в одинаковыми нормалями добавляется квад, составленный из "разъехавшихся" вертексов.
...
На рисунке 1 показаны два треуольника изначальной модели с разными нормалями, они перескаются по ребру AB. Так как нормали трекугольников отличаются, то мы должны размножить вершины A и B и "сшить" их между собой дополнительным квадом.

Выше должно быть тоже с "разными нормалями".

watВедущийwww12 сен. 200617:01#11
Спасибо тебе, Джо.

/ Форум / Программирование игр / Графика

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

2001—2018 © GameDev.ru — Разработка игр