Главная » Разработка для Windows Phone 7 » Отрисовка линий Windows Phone 7

0

Разработчиков, имеющих опыт работы в более популярных графических средах разработки, очень пугает отсутствие в XNA возможности формирования визуального представления простых линий и кривых в двухмерном пространстве. Я покажу два способа обойти это ограничение.

Предположим, требуется отрисовать красную линию между точками (x1, y1) и (x2,y2), и мы хотим, чтобы эта линия была толщиной 3 пиксела. Сначала создадим RenderTarget2D, высота которого равна 3 пикселам, и ширина определяется выражением:

Единственная проблема в том, что линия выглядит несплошной, и это особенно заметно в местах перегибов кривой. Это вполне оправдывает имя данного проекта.

Если подумать о том, визуальное представление каких объектов формируется здесь на самом деле, станет абсолютно понятно, откуда все эти разрывы. Ведь фактически здесь отрисовываются прямоугольники между парами точек, и если эти прямоугольники располагаются под углом друг к другу, возникает «разлом» в кривой:

Это практически незаметно для тонких линий, но бросается в глаза при отрисовке более толстых кривых.

Что можно сделать? Если метод, отображающий эти прямоугольные текстуры, осведомлен о том, что выполняется отрисовка последовательности линий (что называется полилинией в кругах разработчиков графики), он может немного увеличивать коэффициент масштабирования растрового изображения в вертикальном направлении, обеспечивая соприкосновение прямоугольников в вершинах, а не по центральной оси:

Такое точное сопоставление углов обеспечат определенные вычисления с участием угла между этими двумя линиями. Данную методику придется немного скорректировать для приложения рисования посредством сенсорного ввода, потому что в момент формирования визуального представления текущей линии мы не можем знать, как пройдет следующая линия.

В средах, поддерживающих функции отрисовки линий (таких как Silverlight) такие проблемы тоже возникают при использовании значений свойств по умолчанию. Но в Silverlight можно задать скругленные наконечники линий, и все соединения будут выглядеть гладкими.

В XNA скругления наконечников, вероятно, лучше всего обрабатывать напрямую через изменение значений пикселов.

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

  • Комментарии