![]() |
Ответ: Как сделать правильнее
буду изучать говнорисование в текстуру
|
Ответ: Как сделать правильнее
да это вообще беспонтовый способ, т.к. текстур не напасёшься на весь уровень.
я делал декали аля хл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:57. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot