BlitzMax - создание эффекта 2D неоновой светящейся линии в файл png - PullRequest
0 голосов
/ 19 ноября 2010

Я собираюсь создать эффект светящейся линии в BlitzMax, что-то вроде светового меча или лазерного луча в Звездных войнах.Не должен быть в реальном времени, но только для объектов TImage и затем может быть сохранен в PNG для последующего использования в анимации.Я рад использовать 3D-функции, но это будет для использования в 2D-игре.

Поскольку это будет на черном фоне, моя стратегия - нарисовать серию белых размытых линий с цветомвысокая прозрачность, то в итоге центральные линии менее размытые и более белые.То, что я хочу нарисовать, это на самом деле более изогнутые линии.Рисовать изогнутые линии достаточно просто, но я не могу использовать описанную выше технику для создания хорошего лазерного / неонового эффекта, потому что он выглядит очень сегментированным.Итак, я думаю, что может быть лучше использовать эффект размытия / шейдер на том, что хорошо рендерится, это кривая Безье с 1 пикселем.

Проблемы, с которыми я столкнулся:

  • Применение шейдера только к определенной области экрана, где нарисованы линии.Если есть способ рисовать линии на текстуре, а затем размыть эту текстуру и сохранить png, было бы здорово услышать.Должен быть способ сделать это, но я просто пока не получил правильных элементов, работающих вместе.Любая помощь от кого-то, знакомого с этим материалом, будет принята с благодарностью.
  • Использование только 2D-вызовов может быть выгодно, проще для понимания и повторного использования.
  • Было бы очень хорошо знать, каксохраните PNG, который сохраняет прозрачность / альфа-содержимое.

ps Я просмотрел этот пост (и другие), подготовил примеры и даже разработал свой собственный шейдер 5x5.Но это 3D и вещь всей сцены, которая не очень хорошо конвертируется в 2D или просто в определенную область.http://www.blitzbasic.com/Community/posts.php?topic=85263

1 Ответ

0 голосов
/ 25 ноября 2010

Хорошо, ну, я не знаю о BlitzMax, поэтому я не могу вдаваться в подробности относительно реализации, но дам вам несколько указателей:

  • Для применения шейдеров к определенным частямтолько изображение, вы, вероятно, захотите использовать несколько проходов рендеринга для создания вашей сцены.
  • Если у вас есть пиксельный доступ, делать то же, что и фрагментные шейдеры, можно, конечно, «по старинке» в 2D, т.е.что-то вроде getpixel / setpixel.Однако при этом производительность будет намного ниже.
  • Если у вас есть текстура с неповрежденным альфа-каналом, сохранение в PNG с альфа-каналом должно просто работать (извините, еще раз не знаю, как это сделатьв BlitzMax конкретно).Просто убедитесь, что вы используете режимы RGBA все время.
...