|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.01.2011, 11:16 | #1 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Кривая
Многие умеют работать с инструментом "pen tool" в photoshop'е. Вкратце - это инструмент, рисующий кривую по точкам.
Я решил в своей игре сделать рисование таких кривых. Это пригодится для обводки контура ландшафта (это выглядит лучше, чем простое соединение точек отрезками) и для рисования оформления уровня (чтобы не хранить все эти рисунки в файлах, а рисовать прямо в редакторе). То есть я сохраняю точка в массив, а по ним рисуется кривая. Если у вас есть идея, как это реализовать, прошу поделиться
Не стыдно не уметь, стыдно не учиться.
|
28.01.2011, 14:57 | #2 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Думаю, вам может пригодиться кубическая/косинусовая/... интерполяция - нахождение промежуточных значений функции (по разным алгоритмам). Большинство из методов дают сглаженную кривую.
Изобретатель велосипедов
|
28.01.2011, 15:20 | #3 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
интерполяция сплайнами, кривая Безье, nurbs... куча способов
|
28.01.2011, 16:32 | #4 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Андрей 93, есть очень простой в понимании и реализации метод. Он называется "шаблонный". Суть в том, что заранее заготовлен шаблон рисования, так же как это сделано в Photoshop. Есть некий контур изображения, он очень грубый, указывает лишь смещение трассирующих пикселов. Вот на рисунке последовательность:
Пример.jpg Контур может быть выполнен любыми средствами, ...в играх часто применяют алгоритм выделения объектов, который возвращает такой грубый контур. Далее запускается алгоритм, который просто копирует шаблон в каждую точку контура, там где есть пиксел. Разумеется нужна поддержка альфа-канала. Этим же методом выполняются и плавные тени, например, для шрифтов, только изначально наложение шаблона смещается в нужную сторону, и сам шаблон очень прозрачен. Вообще, с помощью такого метода можно сделать море эффектов, просто меняя шаблон, и все в реальном времени.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
28.01.2011, 17:38 | #5 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
С помощью Google занялся ликбезом. В моем случае интерполяция подходит больше всего.
NiCola999, Кривая Безье и nurbs не устраивают, так как точки для построения этих кривых не лежат на самих кривых, а это уже немного не то. Где можно почитать про интерполяцию? Beermonza, шаблонный метод - это второй шаг при создании кривой, сначала надо заготовить шаблон... А если этим методом обвести полигон, контур будет гладким? Может быть мне и не стоит влезать в дебри интерполяции? Вот какие результаты я имею на данный момент в своей игре (на скриншоте). Вершины полигона соединены отрезками, которые представляют собой повернутые прямоугольники (с углами). "Шаблонный метод" придаст гладкость контуру?
Не стыдно не уметь, стыдно не учиться.
Последний раз редактировалось Андрей 93; 28.01.2011 в 17:45. |
28.01.2011, 19:02 | #6 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Обрисовывать будет гладко:
Пример2.jpg А если нужно чтобы прям вообще без углов, полуокружностями, то извини, нужно сразу полигоны выставлять полуокружностями.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
28.01.2011, 19:46 | #7 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Ну ладно. Принципы я понял, а как это на деле? Я могу написать новую функцию для рисования линий по этому способу (много же надо кружков рисовать для каждой линии). А если оптимизировать, то можно рисовать прямоугольник с окружностями на концах...
А так я не представляю как обводить шаблоном.
Не стыдно не уметь, стыдно не учиться.
|
28.01.2011, 20:39 | #8 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Вот линии нарисованы белым цветом, грубо, только белый цвет, или нет цвета (Canvas так рисует линии). Теперь нужен алгоритм, который просто пройдется по всем пикселам буфера обвода, и там где есть белый пиксель, нужно уже на фон рисовать шаблон, естественно прибавив поправку (например 239;356). Там где нет белого пиксела - просто пропуск. Получается так, что линии рисуются в невидимом буфере, а шаблоны копируются на рабочий фон по данным буфера. Все просто.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Кривая Персея | Mokriy | Помощь студентам | 0 | 25.01.2011 01:42 |
Кривая Фергюсона. | Катарина | Помощь студентам | 1 | 14.01.2011 10:56 |
кривая леви | X1TREC | Общие вопросы по Java, Java SE, Kotlin | 1 | 09.01.2011 13:31 |
Кривая Гильберта | SOKOLDANGER | Общие вопросы C/C++ | 4 | 23.05.2010 02:14 |
Кривая Безье | ELL | Помощь студентам | 4 | 20.05.2008 22:56 |