Конференция "Игры" » Как нарисовать линии без зазубринок? [Delphi, Windows]
 
  • Псарь (14.08.11 22:12) [0]
    Допустим рисуем такую линию оранжевый цветом:

     
     Canvas.Pen.Width:= 8;
     Canvas.Pen.Color:= RGB(255, 100, 0);
     Canvas.MoveTo(100, 100);
     Canvas.LineTo(400, 300);



    Как видите появляются зазубринки, рисунок получается
    некрасивым.
    Гуглил, но хорошего ответа не нашел.
    Устанавливал HALFTONE перед рисованием, толку ноль.
    Хотя очевидно - он для скейлинга.

    Как быть и что делать?
  • antonn © (14.08.11 22:59) [1]
    взять GDI+ или извращаться как тут http://desksoft.ru/index.php?forum=13&th=46
  • Псарь (16.08.11 20:37) [2]
    Спасибо.
    А других способ нет? :)
  • Псарь (16.08.11 20:39) [3]
    Sapersky! :)
  • antonn (work) (16.08.11 20:58) [4]
    ну можно без рисования на огромном битмапе с последующим уменьшением, но тогда будет некоторый геморр с линиями разной толщины.
  • miek (17.08.11 12:04) [5]
    Рисовать вручную. Это называется Wu line(алгоритм Ву).
  • Sapersky (17.08.11 14:03) [6]
    Sapersky! :)

    Мне почти нечего добавить.
    Могу перечислить библиотеки, в которых есть реализация сглаживания на уровне примитивов, Wu line или что-то подобное: FastLib, Graphics32, AggPas.
    Ещё вариант - рисовать аппаратно и использовать функции антиалиасинга видеокарты, обычно это "рисование на огромном битмапе с последующим уменьшением", ну и проблемы соответствующие.
  • Псарь (17.08.11 19:10) [7]
    В общем, пользуюсь пока методом antonn'а.
    Медленно.

    Хотя решил сделать по другому, рисовать на большом битмапе, а потом
    через один CopyRect (Т.е. пропустить манип. с пикселями), так FPS жутко упал.
    Плюс еще изображение ужасное в итоге без HALFTONE. С ним выглядит нормально, но FPS низкий.

    Я думал большой CopyRect (StretchBlt) будет быстрее чем  CopyRect с манип. с пикселями.

    Ах да, еще вопрос, почему, если устанавливаешь HALFTONE перед скейлингом - все нормально. Устанавливаешь при создании растра (Задали размеры, битность), установили HALFTONE, как он перестает действовать?
  • antonn © (17.08.11 20:22) [8]
    Конкретно у меня еще достаточно тормознутая реализация этого АА, нужно на ММХ хотя бы. Вот тут есть кусок от homm http://pda.delphimaster.net/?id=1192295230&n=7 , ее можно почти без гемора прикрутить к tbitmap (взяв Spriteutils у miek'а например =)), но ожидать "полноэкранного" сглаживания все равно не надо. Мне для игрушки хватило (плавно повторачивались битмапы, но по сути не важно)
  • xayam © (28.09.11 16:35) [9]

    > Как видите появляются зазубринки, рисунок получается
    > некрасивым.
    > Как быть и что делать?

    на html 5 переходи
  • Псарь (29.09.11 19:24) [10]

    > xayam ©   (28.09.11 16:35) [9]
    >
    >
    > > Как видите появляются зазубринки, рисунок получается
    > > некрасивым.
    > > Как быть и что делать?
    >
    > на html 5 переходи


    И работать через Дельфи? :D
  • xayam © (30.09.11 18:39) [11]

    > И работать через Дельфи? :D

    и с делфи переходи.
    Могу даже обосновать, почему это стоит делать.
    Допустим
    1) Ты решил все проблемы с "зазубринками"
    2) ... и все остальные, попавшиеся на пути...
    3) В результате получилась супер пупер навороченная игра-программа

    И что ты дальше будешь делать?
    Я тебе скажу:
    1) Ты захочешь чтобы в неё сыграл кто-нибудь
    2) Ты захочешь чтобы в неё сыграл кто-нибудь не только на windows, но и на более экзотических системах
    3) Ты захочешь чтобы в неё играло как можно больше народу (игра станет сетевой)
    4) ...
    5) И вот еще одна новость: тебе в любом случае нужно будет делать сайт для программы
    (рано или поздно, не обязательно сейчас)

    ----------------------------------------------

    Вывод:
    Игра-программа и сайт должны представлять одно целое (делфи не подходит),
    что относительно легко реализуется с помощью HTML5 Canvas API

    PS
    Глава 2 в книге Питера Лабберса
    http://rutracker.org/forum/viewtopic.php?t=3611560
  • Псарь (30.09.11 21:57) [12]

    > xayam ©   (30.09.11 18:39) [11]


    Я не игру делаю, а CAD-систему.
  • xayam © (03.10.11 11:45) [13]

    > Я не игру делаю, а CAD-систему.

    на самом деле это не важно... ты скоро поймёшь...

    PS

    Чего тогда занесло в раздел Игры? Шучу :)
 
Конференция "Игры" » Как нарисовать линии без зазубринок? [Delphi, Windows]
Есть новые Нет новых   [119007   +12][b:0][p:0.001]