Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2011, 11:16   #1
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию Кривая

Многие умеют работать с инструментом "pen tool" в photoshop'е. Вкратце - это инструмент, рисующий кривую по точкам.
Я решил в своей игре сделать рисование таких кривых. Это пригодится для обводки контура ландшафта (это выглядит лучше, чем простое соединение точек отрезками) и для рисования оформления уровня (чтобы не хранить все эти рисунки в файлах, а рисовать прямо в редакторе).
То есть я сохраняю точка в массив, а по ним рисуется кривая.
Если у вас есть идея, как это реализовать, прошу поделиться
Изображения
Тип файла: jpg Untitled-2.jpg (17.2 Кб, 131 просмотров)
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 28.01.2011, 14:57   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Думаю, вам может пригодиться кубическая/косинусовая/... интерполяция - нахождение промежуточных значений функции (по разным алгоритмам). Большинство из методов дают сглаженную кривую.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 28.01.2011, 15:20   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

интерполяция сплайнами, кривая Безье, nurbs... куча способов
NiCola999 вне форума Ответить с цитированием
Старый 28.01.2011, 16:32   #4
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Андрей 93, есть очень простой в понимании и реализации метод. Он называется "шаблонный". Суть в том, что заранее заготовлен шаблон рисования, так же как это сделано в Photoshop. Есть некий контур изображения, он очень грубый, указывает лишь смещение трассирующих пикселов. Вот на рисунке последовательность:

Пример.jpg

Контур может быть выполнен любыми средствами, ...в играх часто применяют алгоритм выделения объектов, который возвращает такой грубый контур. Далее запускается алгоритм, который просто копирует шаблон в каждую точку контура, там где есть пиксел. Разумеется нужна поддержка альфа-канала. Этим же методом выполняются и плавные тени, например, для шрифтов, только изначально наложение шаблона смещается в нужную сторону, и сам шаблон очень прозрачен. Вообще, с помощью такого метода можно сделать море эффектов, просто меняя шаблон, и все в реальном времени.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.01.2011, 17:38   #5
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

С помощью Google занялся ликбезом. В моем случае интерполяция подходит больше всего.
NiCola999, Кривая Безье и nurbs не устраивают, так как точки для построения этих кривых не лежат на самих кривых, а это уже немного не то.
Где можно почитать про интерполяцию?
Beermonza, шаблонный метод - это второй шаг при создании кривой, сначала надо заготовить шаблон... А если этим методом обвести полигон, контур будет гладким? Может быть мне и не стоит влезать в дебри интерполяции?
Вот какие результаты я имею на данный момент в своей игре (на скриншоте). Вершины полигона соединены отрезками, которые представляют собой повернутые прямоугольники (с углами). "Шаблонный метод" придаст гладкость контуру?
Изображения
Тип файла: jpg Untitled-.jpg (51.3 Кб, 91 просмотров)
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 28.01.2011 в 17:45.
Андрей 93 вне форума Ответить с цитированием
Старый 28.01.2011, 19:02   #6
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Обрисовывать будет гладко:

Пример2.jpg

А если нужно чтобы прям вообще без углов, полуокружностями, то извини, нужно сразу полигоны выставлять полуокружностями.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.01.2011, 19:46   #7
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Ну ладно. Принципы я понял, а как это на деле? Я могу написать новую функцию для рисования линий по этому способу (много же надо кружков рисовать для каждой линии). А если оптимизировать, то можно рисовать прямоугольник с окружностями на концах...
А так я не представляю как обводить шаблоном.
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 28.01.2011, 20:39   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Андрей 93 Посмотреть сообщение
Ну ладно. Принципы я понял, а как это на деле? Я могу написать новую функцию для рисования линий по этому способу (много же надо кружков рисовать для каждой линии). А если оптимизировать, то можно рисовать прямоугольник с окружностями на концах...
А так я не представляю как обводить шаблоном.
Выделяешь память под буфер обвода, он прозрачен, ну или цветом заполнен, можно черным (рисовать будем белым). Переводим координаты исходного фона, на котором нужно рисовать контур, в координаты частного буфера, ...ну это понятно, от координат каждой линии отнимать x и y начального пиксела обрасти сканирования фона, т.е. если начало сканирования 239;356, это будет поправка для рисования тех же линий, но уже в буфере обвода.

Вот линии нарисованы белым цветом, грубо, только белый цвет, или нет цвета (Canvas так рисует линии). Теперь нужен алгоритм, который просто пройдется по всем пикселам буфера обвода, и там где есть белый пиксель, нужно уже на фон рисовать шаблон, естественно прибавив поправку (например 239;356). Там где нет белого пиксела - просто пропуск.

Получается так, что линии рисуются в невидимом буфере, а шаблоны копируются на рабочий фон по данным буфера. Все просто.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кривая Персея 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