Важная информация

User Tag List

Страница 13 из 32 ПерваяПервая ... 91011121314151617 ... ПоследняяПоследняя
Показано с 121 по 130 из 312

Тема: Программирование на ассемблере

  1. #121
    Veteran
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,658
    Спасибо Благодарностей отдано 
    226
    Спасибо Благодарностей получено 
    301
    Поблагодарили
    212 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Реализовал еще один мечт детства, касающийся paint - заливку с маской/шаблоном. ...
    Интересно, как будет выглядеть результат заливки, если маска будет "наезжать" на контур...
    Или это приведет к не предсказуемому результату?
    Наверное можно попробовать необходимость "наезда на контур" сделать одним из параметров. И применять, когда это даёт более "эстетичный" результат заливки. Хотя проверка на необходимость "наезда" замедлит алгоритм...

  2. #121
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #122
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,863
    Спасибо Благодарностей отдано 
    658
    Спасибо Благодарностей получено 
    1,854
    Поблагодарили
    1,059 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    как будет выглядеть результат заливки, если маска будет "наезжать" на контур
    Т.е. если заливка будет перекрашивать не только "внутренности", но и границу? Самый простой вариант - запомнить координаты точек границы при заливке и потом их все перекрасить (причем можно для границы задать отдельную маску), но это имхо довольно странный вариант. Выкладываю исходник, можно переделать его на свой вкус
    Вложения Вложения

  4. #123
    Veteran
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,658
    Спасибо Благодарностей отдано 
    226
    Спасибо Благодарностей получено 
    301
    Поблагодарили
    212 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    ... Самый простой вариант - запомнить координаты точек границы при заливке и потом их все перекрасить ...
    Не, запоминать координаты всех точек контура, это перебор... количество точек может быть слишком большим.
    А если сразу менять, то проблема может возникнуть, если заливка (с маской) подходит к одной точке контура и справа и слева.

  5. #124
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,863
    Спасибо Благодарностей отдано 
    658
    Спасибо Благодарностей получено 
    1,854
    Поблагодарили
    1,059 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    количество точек может быть слишком большим
    Можно грубо прикинуть. Пусть большая фигура, 256 строк, в каждой пусть 4 границы - 256*4*2=2 килобайта.
    Есть альтернативный вариант, при котором границы могут быть сколь угодно сложными, но зато -8 килобайт памяти - нарисовать границы в невидимой плоскости сплошными, а в видимой - как угодно, и при заливке ориентироваться на невидимые сплошные границы. Кстати, такой вариант можно сделать более быстрым, чем V5mask.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    такой вариант можно сделать более быстрым, чем V5mask
    Вот тут я поторопился, регистры то все кончились, поэтому будет даже медленнее.

  6. #125
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,121
    Спасибо Благодарностей отдано 
    803
    Спасибо Благодарностей получено 
    662
    Поблагодарили
    407 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если задача именно что-то нарисовать, то нужны залитые треугольники и выпуклые четырехугольники. Но не простые, а чтобы смежные стороны двух фигур не оставляли между собой дыр.
    Больше игр нет

  7. #126
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Если задача именно что-то нарисовать, то нужны залитые треугольники и выпуклые четырехугольники. Но не простые, а чтобы смежные стороны двух фигур не оставляли между собой дыр.
    Мне сдаётся, что треугольников должно быть достаточно на все возможные случаи, если задача именно нарисовать.
    Четырёхугольники, скорее нужны для всяких там интерфейсов оконных.

  8. #127
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,121
    Спасибо Благодарностей отдано 
    803
    Спасибо Благодарностей получено 
    662
    Поблагодарили
    407 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    PPC, конечно треугольников достаточно. Мне просто квады почему-то нравятся.
    Больше игр нет

  9. #128
    Member Аватар для hitomi2500
    Регистрация
    05.10.2018
    Адрес
    г. Москва
    Сообщений
    172
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Квады всем нравятся. Sega в своё время сделала на Сатурне аппаратные квады (а с ней на пару и NVidia в видеокарте), в результате разработчики сетовали на то, что приходится переделывать треугольные модели, потому как с квадами тогда никто не работал. Сегодня железо стало исключительно треугольным , хотя моделеры как раз предпочитают работать с квадами.

  10. #129
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,863
    Спасибо Благодарностей отдано 
    658
    Спасибо Благодарностей получено 
    1,854
    Поблагодарили
    1,059 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Прикидываю, что при переходе к цветному варианту замедление было бы в худшем случае раза в 4
    Оказалось, что не в 4, а в 3, причем еще можно немного оптимизировать.

  11. #130
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,863
    Спасибо Благодарностей отдано 
    658
    Спасибо Благодарностей получено 
    1,854
    Поблагодарили
    1,059 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Решил добить цветную заливку области (с маской). Сначала просто добавил цвет в ранее выложенную процедуру. А потом посмотрел, как дела в графических редакторах. В рембрандте просто чудовищная (ОЧЕНЬ-ОЧЕНЬ МЕДЛЕННАЯ) заливка, не scanline, так даже студентам надо запрещать делать. В карандаше/draw пиксельный scanline из basica/драйверов устройств, но добавили маску. Тут я обратил внимание, что в карандаше/draw есть маски с несколькими пустыми строками подряд, а у меня в той процедуре каждая пустая строка должна быть окружена непустыми (т.е. не более одной пустой подряд). И модернизировал.
    Предлагаемый вариант (V16) цветной, допускает практически любую (кроме полностью нулевой, нужна хотя бы одна единичная точка) маску. Но нужен дополнительный кольцевой буфер, который используется только для масок с нулевыми строками. Если сравнивать с корветом, то со сплошной маской уступает примерно в 6 раз. Если думаете, что это медленно, то для сравнения BASIC2.5 заливает область почти в 50 раз медленнее корвета.
    Если в маске есть пустые строки, то будет медленнее из-за поиска в буфере. Для простоты сделал буфер 256 байт.
    Нажмите на изображение для увеличения. 

Название:	paint16.png 
Просмотров:	138 
Размер:	3.3 Кб 
ID:	67422
    Можно и быстрее, если использовать не кольцевые, а линейные (и организованные иначе) буферы. Проблема в том, что для очень сложных фигур они могут съесть очень много памяти.
    Зато в такой спортивной процедуре:
    1) Высокая скорость заливки, уступает корвету в 4.5 раза.
    2) Скорость заливки практически не зависит от маски (хоть сколько пустых строк).
    3) Маска заливки может быть полностью нулевой.

    Исходник V16 пока не выкладываю, нужен рефакторинг. Кстати, невозможность использования полностью нулевой маски в V16 является скорее номинальным, а не практическим ограничением, т.к. тот же результат можно получить заливая сплошной маской, но с цветом 0.
    Вложения Вложения

Страница 13 из 32 ПерваяПервая ... 91011121314151617 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вычисление числа Пи на ассемблере
    от perestoronin в разделе Разное
    Ответов: 311
    Последнее: 12.02.2024, 17:12
  2. Ответов: 275
    Последнее: 16.12.2018, 23:01
  3. try-catch на ассемблере z80
    от siril в разделе Программирование
    Ответов: 22
    Последнее: 30.10.2012, 21:17
  4. Продам книгу- AMIGA: программирование на ассемблере
    от Doctor Max в разделе Барахолка (архив)
    Ответов: 11
    Последнее: 01.03.2012, 00:35
  5. Подпрограмма на ассемблере в памяти?
    от jimled в разделе Программирование
    Ответов: 1
    Последнее: 29.11.2009, 06:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •