#image-processing #xna #sprite
#обработка изображений #xna #спрайт
Вопрос:
Учитывая изображение, которое может содержать любое разнообразие однотонных изображений, каков наилучший метод для разбора изображения в данной точке и последующего определения наклона (или вектора, если вы предпочитаете) этой области?
Будучи новичком в разработке XNA, я чувствую, что должен быть устоявшийся метод для выполнения подобных действий, но я уже некоторое время гуглю эту проблему.
В качестве примера я смоделировал краткое изображение, чтобы продемонстрировать, что я пытаюсь сделать. Белая часть изображения (где показаны метки) будет содержать прозрачные пиксели. «Основой» будет объект RenderTarget2D или Texture2D, который предоставит цветовой массив пикселей.
Ответ №1:
То, что вы ищете, — это tangent
, которое находится под углом 90 градусов к normal
(который используется чаще). Эти два термина должны помочь вам в поиске.
Это тривиально, если у вас есть данные контура полигона. Если все, что у вас есть, это изображение, то вам нужно придумать способ преобразовать его в многоугольник.
Возможно, это не совсем подходит для вашей задачи, но в первую очередь я бы обратился к физическому движку Farseer, который имеет функцию преобразования текстуры в полигон, которую вы, возможно, могли бы использовать повторно.
Если вы используете местность как своего рода «грунт», возможно, вы можете немного схитрить, посмотрев на соседний столбец пикселей и используя его для определения наклона грунта в этой точной точке. Вроде того, что делают лемминги и черви.
Если вы сделаете это определение на границе между каждым пикселем, вы можете получить градиенты нарастания: пробег между двумя пикселями по горизонтали. Обычно вы просто разбиваете изображения на категории: слишком плоские (1: 1), 45 градусов (2: 1) или слишком крутые (> 3: 1). С помощью более сложного алгоритма, который просматривает большее количество столбцов, вы можете получить лучшее разрешение.
Комментарии:
1. Вторая часть вашего предложения — это то, что я делаю сейчас (я пробую участок 7×7 и применяю правила, гарантирующие, что непрозрачные пиксели на самом деле являются частью текущего участка, а не каким-то обнажением, которое было включено в срез). Это просто кажется ужасно запутанным (но это работает).