2013-03-24 4 views
0

Я работаю со спрайтом, и мне нужно создать многоугольник (массив вершин) для детектора столкновения.Получить вершины изображения?

У меня есть метод getPixel(x, y), который я могу использовать для получения цвета пикселя. Мне не нужны какие-либо причудливые определения цвета или что-то еще, просто сплошные пиксели и прозрачные пиксели. Вот что я начал, прежде чем мой мозг начал плавиться:

boolean[] hasColor = new boolean[size]; 

for (int i = 0; i < size; i++) { 
    int row; 
    row = i % width; 
    if ((pixmap.getPixel(i, row) != 0) || (pixmap.getPixel(row, i) != -256)) { 
     hasColor[i] = true; 
    } else { 
     hasColor[i] = false; 
    } 
} 

Это должно следить за то, что пиксели являются пустыми, а какие нет. Но я не знаю, куда мне идти.

Есть ли алгоритм или что-то, что я могу использовать, чтобы помочь? Может ли кто-нибудь предоставить вход?

+0

Возможно, вы ищете что-то вроде этого? http://en.wikipedia.org/wiki/Gift_wrapping_algorithm – AlchemicalApples

ответ

0

У вас есть растровое изображение.

Что вам нужно, это векторный контур.

Преобразование из вектора в растровое легко, от растра до вектора, не так много.

Вот один из возможных рабочих процессов:

  1. Преобразование произведения искусства в черно-белое изображение (как ваш цвет пикселя присутствует/не-настоящее матрица).
  2. Используйте функцию «Живая трасса» в Adobe Illustrator, чтобы проголосовать.
  3. Экспортируйте контурный многоугольник в формат, который вы можете легко прочитать.
  4. Используйте это как свой вход для обнаружения столкновения.

Вот другой подход:

A) Предположим, что контур выглядит шестиугольника, как это:

 ***** 
     *  * 
    *  * 
    *   * 
    *  * 
     *  * 
     ***** 

B) Определение "подгонки" в качестве благости набросков, вычисленная проверяя, какой процент пикселей находится внутри шестиугольника (не обязательно должен быть фигурой в правильной форме, показанной выше). C) Измените положение вершин, пока не найдете оптимальную посадку (или пока вы не устанете).

Шаг (C), конечно, самый сложный. Кроме того, если ваш спрайт нуждается в большем количестве вершин, вам может потребоваться начать с восьмиугольника/n-gon вместо этого.