![]() |
Ответ: Как сделать правильнее
По-хорошему деколь копирует часть поверхности, на которой лежит.
Так что тебе придётся брать треугольник, на который попала декаль и проверять, не выходит ли декаль за его пределы. Если выходит - обрезать. Другой вариант - сразу копировать треугольники, которые "попадают" под деколь и обрезать их, формируя из них саму деколь. Примерчик сложно и долго. Ну естественно можно придумать и другие способы, менее качественные, но более простые :) |
Ответ: Как сделать правильнее
вот мне желательно попроще бы ))
|
Ответ: Как сделать правильнее
А пробовал попытатся на текстуре рисовать? Мож так проще... Это так, мысли вслух)
|
Ответ: Как сделать правильнее
В Half-Life 2 декали рисовались так чтобы не попадать на изломы поверхности. Т.е. при стрельбе точно в угол здания деколь рисовалась на одной из сторон угла на расстоянии от угла так чтобы она сама не вылезала за стену. Если же места для размещения деколи недостаточно (например небольшая полоска стены между трубами) то там деколь не создаётся.
Вот так было сделано в одной из лучших игр, думайте сами надо ли вам делать деколи честнее. |
Ответ: Как сделать правильнее
|
Ответ: Как сделать правильнее
тогда как узнать можно ли рисовать декаль или нельзя? тоесть как узнать как близко до "излома" чтобы было условие - рисовать\не рисовать декаль
|
Ответ: Как сделать правильнее
Тоже хотел предложить, но
Цитата:
![]() Непосредственно Half-Life 2 на компе не оказалось, но в CS:S деколи точно такие же. Кстати то, что ты говоришь, по-моему, было в Hlaf-Life 1 |
Ответ: Как сделать правильнее
Цитата:
Можно пойти дальше, и сдвинуть деколь перпендикулярно пересекаемой линии на длину наиболее выступающего участка (тригонометрия во все поля). Сделать такую же проверку после этого. Если он пересекает теперь уже что-то другое, то не создавать. |
Ответ: Как сделать правильнее
то что ты написал, для меня все равно что букварь на японском...
|
Re: Ответ: Как сделать правильнее
Цитата:
Цитата:
|
Ответ: Re: Ответ: Как сделать правильнее
Цитата:
|
Ответ: Как сделать правильнее
Цитата:
Возможжно с других версиях игры или модах пофиксили. Кроме того в Unreal Tournament 2004 аналогично. Хотя там декали умели иногда завернуть за угол. Принцип изменения поведения неизучен. Скорее всего для заворачивающих декалей кое где используется мультитекстурирование с занесением в текстуру соответствующих изображений. И эти спец слои предусмотрены не везде. Кстати возможно и в халве так же, гдето на видном месте заворачивают, а где то нет. |
Ответ: Как сделать правильнее
Вложений: 1
Цитата:
|
Ответ: Как сделать правильнее
Действительно установил запутсил всё ок. Значит то я ещё в бету играл.
|
Ответ: Как сделать правильнее
буду изучать говнорисование в текстуру
|
Ответ: Как сделать правильнее
да это вообще беспонтовый способ, т.к. текстур не напасёшься на весь уровень.
я делал декали аля хл2, остался код на ксорсе/с++, но он слишком уж говнокод, так что смысла постить его особо нет, в теории работало так: - мы выстрелили в объект, у нас есть позиция появления декали и нормаль поверхности в этом месте/альтернативно это может быть нормаль полёта пули. - представляем 4 бесконечных плоскости, равноудалённые от позиции дырки и образующие квадрат размером с декаль, если смотреть в направлении нормали. т.е. по сути это квадрат в пространстве нормали, но вытянутый в глубину бесконечно. - находим все треугольника объекта, попадающие внутрь этих плоскостей, по дистанции и разнице нормалей ещё можно отсеять повернутые обратной стороной трианглы или слишком далёкие от точки попадания. - обрезаем найденные трианглы нашими 4мя плоскостями и отодвигаем их чуть-чуть в направлении их нормалей (чтобы избежать z-fighting) - в пространстве нормали считаем планарные UV на трианглы (там тупо U=X, V=Y + нормализация) - рисуем полученный меш - можно объединять все декали одного типа на одном объекте в один меш - можно не обрезать трианглы и не считать UV, а получать UV в пиксельном шейдере + юзать режим аддресации BORDER, но это потенциально ведёт к overdraw + не особо позволяет сфигачить кучу декалей в 1 меш. - можно юзать deferred decals (?? не пробовал) - вышенаписанная фигня про треугольники можнт звучать МЕДЛЕННО, но на практике работало, и я не замечал снижения фпс ваще. |
Ответ: Как сделать правильнее
дабы не постить 100500 тем, спрошу сдесь же - как можно увеличить громкость 3dsound в блице? а то сделал 3д звук, а он какой то тихи даже вблизи... не я конечно знаю о команде
Код:
SoundVolume |
Ответ: Как сделать правильнее
интересная тема :)
Mr_F_ +1 метод с рендером в текстуру может подойти только для специфичных случаем ибо кроме проблем с уникальными текстурами для декалей (и их большими разрешениями), еще не забывайте что в блице всего два набора текстурных координат, и если первый для [цвета,спекуляра,нормали], а второй например для лайтмапы, то для декалей не остается юзать первый набор - не факт что развертка равномерная, декали могут деформироваться, как впрочем и для развертки лайтмапы. слышал про вариант с использованием стенсил-буфера для "обрезки" висячих частей, но думаю это тоже геморно (еще и потому что надо будет очередной DLL-костыль писать) кстати по поводу способа с копированием и обрезкой геометрии, там тоже проблем полно, например ![]() есть два пересекающихся бокса (два этажа например, соответственно горизонтальный бокс - пол, вертикальный - стена) зеленым цветом - точка пика и бокс декаля для обрезки черным цветом - выбраные для обрезки треугольники после обрезки синим цветом - нужные треугольники красным цветом - ненужные треугольники мне в голову приходит только один вариант - сначала обрезать выбраные треугольники плоскостями других выбраных, а потом уже резать боксом если есть какие-нибудь другие идеи, буду рад их выслушать ЗЫ Цитата:
|
Ответ: Как сделать правильнее
Цитата:
2. - поиграться с параметрами CreateListener |
Ответ: Как сделать правильнее
Цитата:
а насчёт обозначенной на картинке проблемы - да, не подумал о таком. интересно найти решение. в голову приходит только безумный вариант - т.к. проблема аналогична проблеме освещения при отсутствии теней, можно в крохотном разрешении (типа 32х32) растеризовать все отобранные треугольники с позиции прожектора декали, рисуя в 2д массив глубину (как при software occlusion culling) и потом сравнить все трианглы с записанной глубиной, узнав, есть ли перекрытие (отсеяв то, что у тебя на картинке красное). но это чёто уже черезчур тормозно звучит) |
Ответ: Как сделать правильнее
Цитата:
Цитата:
Цитата:
так же как и на предыдущей картинке точка пика, 4 плоскости квадрата в пространстве нормали и получаемые вертексы ![]() а если боксом, то стена и по вертикали обрежется как раз по размеру декаля Хотя может лучше тогда брать плоскости по вектору пика? Но опять таки если пикнем сверху получим такую же картину :( Цитата:
ЗЫ Точно у хумуса, третья снизу |
Ответ: Как сделать правильнее
гляжу, в UE тоже боксом:
http://udn.epicgames.com/Three/UsingDecals.html думаю дальше по поводу проблемы с декалированием левых мест. что если - определяем все точки пересечения меша с боксом - если у нас есть точки с одинаковым XY но разной глубиной в пространстве прожектора - оставляем только самые ближние. это должно выкинуть точки пересечения с низом вертикальной стены и даже низом горизонтальной (не требуется проверка по нормали) - находим треугольники, которым принадлежат оставшиеся точки пересечения - обрезаем, делаем UV итд |
Часовой пояс GMT +4, время: 21:54. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot