Pull to refresh

Comments 22

Положил в копилку. Очень эффектная штука, а делается так просто — супер!
А почему бы и нет? Вот, например, kreosan самые что ни на есть желтые разряды из микроволновки вытягивает:

а почему бы и нет? не все ж делать стандартно — синенькое. Да и в жизни можно увидеть такое в желтом спектре.
Я думаю цвет зависит от материалов разрядников и окружающей среды.
Прочитал несколько раз, но не нашел подробностей про то, откуда берется сам меш для молнии
Первоначально система, разработанная для игры использовала закруглённые лучи. Каждый сегмент молнии рендерился с использованием трёх четырёхугольников, для каждого из которых применялась текстура со светом

Треугольники генерировались каждый кадр? При перемещении конечных точек пересчитывается вся молния? И что подразумевается под «генерацией» молнии в вашем конечном списке — полная «перегенерация» меша?
Я не автор исходного текста, но попробую ответить исходя из своего понимания.
Изначально автор не делал треугольники (те что на иллюстрации ниже) а взял прямоугольник сегмента молнии, разбил на три части и заполнил получившиеся четырёхугольники текстурой.
Треугольники генерировались каждый кадр? При перемещении конечных точек пересчитывается вся молния?

Насколько я полнял, каждый раз при сдвиге молнии необходимо её перегенерация. Но, кажется, что это относительно дешёвая операция.
Мне больше интресна генерация с точки зрения выделения памяти под новый меш / новые вершины, треугольники и нормали.
Немного уточню:
Изначально автор не делал треугольники (те что на иллюстрации ниже) а взял прямоугольник сегмента молнии, разбил на три части и заполнил получившиеся четырёхугольники текстурой.
меши с текстурой в любом случае представляют собой набор треугольников, из которых состоят прямоугольники. Соответственно для «заполнения прямоугольника текстурой» необходимо определить треугольники, из которых состоит этот прямоугольник и соответствующие им вершины, которым еще нужно задать правильные UV координаты и нормали.

Вот меня как раз интересует этот процесс генерации набора вершин, нормалей, треугольников и т.д., есть ли какой-то механизм определения, когда нужны новые вершины, или каждый раз происходит генерация нового набора? В общем хотелось бы узнать более низкоуровневые подробности генерации и рендера
Мне честно говоря не понятно, что именно вам не понятно. Очевидно что да, перегенерируются. Рассчитываются координаты новых вершин, и эти вершины заливаются в VertexBuffer.
есть ли какой-то механизм определения, когда нужны новые вершины
У VertexBuffer-а есть размер. Если размера недостаточно, то нужно аллоцировать новый. Это механизм типа: if (vbo->size < newsize) { //аллоцируем новый буфер }.
Люблю космические симуляторы вроде starscape. Как называется ваша игра? И если есть аналоги/конкуренты — поделитесь? :)

По теме — выглядит красиво, но странно, когда молния бьет на 105*, а потом на 0*(третья секунда)
Оригинал статьи: drilian.com/2009/02/25/lightning-bolts/
Наткнулся на нее полгода назад, когда хотел сделать молнии в своей игре. Получилось симпатично )

В этом же блоге автор пишет: «Valve recently announced that Procyon is in the most-recent batch of titles to be given the green light for release on Steam!».
Молнии отличные получились. Очень реалистично! Правда, взрывы не очень. Рекомендую что-то с ними сделать.

Что касается реальных ударов молнии — то вот детали высокоскоростной съемки: фрагмент документального фильма.
Добрый день. А что здесь имеется ввиду под «текстурой со светом»? Как она хоть примерно должна выглядеть? Как добиться свечения?
Не знаю точно что имел автор, но, скорее всего — что-то вроде обычного градиента шириной в один пиксель и некоторой высотой. В центре ярко, по краям прозрачно.
Спасибо. Поискал в источнике — и там в комментариях есть такой же вопрос. Ответ автора — радиальный градиент, прозрачный к краю. Накладывается на меш определенным образом, получается скругление концов прямоугольников.
На самом деле в данном случае достаточно текстурные координаты хранить в диапазоне [-1;1], и тогда никакая текстура не нужна. Считать интенсивность можно через как float Intensity = max(0.0, 1.0 — length(In.TexCoord));
с текстурой должен работать соответствующий Shader.
Да, и текстура должна быть соответствующая. Умиляют такие комментарии.
Что-то я, кажется, с альфа-каналами перемудрил
Sign up to leave a comment.

Articles