Возникла необходимость нарисовать поверхность на основе примитивов (лаба по компьютерной графике). Поверхность рисуется в собственном контроле через переопределение OnRender (DrawingContext и т.д.). Однако, обнаружился вот такой вот дефект ("прозрачные" полосы между полигонами, конкретно здесь они белые):
Треугольники рисую через PolyLineSegment. Все полигоны использует общий массив точек, и смежные стороны лежат на одних и тех же точках. Так что проблема не в неверных координатах.
Вот тот же дефект на DrawRectangle для сомневающихся.
Предполагаю что проблема в сглаживании. В пограничный пиксель устанавливается цвет занимающий промежуточное значение между фоном и полигоном. Т.к. закрашивание происходит не одновременно, то в качестве фона выступает результат предыдущего покраса.
Упрощенно, если считать что цвета соседних полигонов Red и Blue, которые накрывают пиксель на 0.6 и 0.4 соответственно, то его цвет будет не 0.6*Red + 0.4*Blue, а 0.36*Red + 0.24*Background + 0.4*Blue.
Не знаю есть ли кошерный способ избавится от этого, но очевидно, что при рисовании без сглаживания данного глюка не будет (пиксель будет принадлежать одному/последнему полигону). Вопрос: как отключить сглаживание при рисовании?
// вариант с установкой Stroke не предлагать, в рамках лабы он неприемлем по "идейным" соображениям
По результатам обсуждения в комментариях:
Antialiasing можно отключить при помощи
RenderOptions.SetEdgeMode(element, EdgeMode.Aliased);
на отцовском элементе. В нашем случае, это элемент DrawingGroup
, содержащий полигоны.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть ~100 файлов png нужно их как бы анимировать, весят они от 8кб до 4мб
Пытаюсь к инталлятору положить DotNetFX461Если не выполнять ни каких действий, то при сборке проекта ругается:
Друзья помогите побороть ошибку при отправке email , обычная форма обратной связи