Важная информация
Показано с 1 по 6 из 6

Тема: Графика

  1. #1 Графика 
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,829
    Сказал(а) спасибо
    1,810
    Поблагодарили 934 раз(а) в 796 сообщениях
    Записей в блоге
    1
    Уже были выложены
    Там ещё медленней к сожалению(возможно из-за преобразований цвета и медленного EGA вывода), нужно подгружать целый буфер(хотя бы несколько горизонтальных линий за 1 раз), а не попиксельно. Не вижу смысла грузить 32 битные(а тем паче 48 битные) картинки в 16 цветном режиме в стандартной палитре. Сейчас распространено много редакторов, да берём стандартный "фотозад" и оптимизируем палитру, бывает даже на 16 цветах вполне неплохо выглядит(особенно если одни области делать 1-м дизером, а другие другим, палитра естественно одна), сохранять удобно в индексном эквиваленте, при грамотном подходе в 256 цветов можно засунуть кучу оптимизированных картинок. 16 цветов на вывод определённо мало, остаётся только VESA, без ассемблера на везе делать нечего. Есть 2 варианта:
    1) Сломать себе весь мозг, пытаясь сделать буфферизированный вывод "окошками" или попробовать закодить старшие версии VESA(не во всех видеокартах) в защищённом режиме(либо завести там соотв. буфер в обычной памяти).
    2) Использовать например режим 640x400x8Bit, завести статическую память( в коде программы на ассемблере), проверить последовательность расположения 64kb кусков, всю image(и прочую) дату сгружать в видеопамять и 1 раз написать геморную процедуру по копированию страницы, на этом геморои закончатся и можно смело кодить все требуемые графические элементы, всё будет "летать".

    вру, есть ещё третий вариант, найти нормальную VESA библу для паскаля, коих должно быть много(раз даже для бейсика они есть)...
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    1) Сломать себе весь мозг, пытаясь сделать буфферизированный вывод "окошками
    Зачем даже так? Можно просто организовать в памяти буфер (хотя по самой память это конечно накладно), изначально выводя любое изображение в него, без всяких там вычислений, на какую страницу это все дело класть. Потом лишь 1 раз вывести этот буфер на экран, и при этом никаких особых вычислений делать не придется
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    или попробовать закодить старшие версии VESA(не во всех видеокартах) в защищённом режиме
    Идея также неплохая, но требует некоторых познаний в этой области + если использовать этот хваленый LFB - то программы, поддерживаюшие его смогут работать только в чистом DOS, либо в эмуляторах, вроде DOSBOX - т.к Windows блокирует работу подобных программ. Если работа в Windows не критична, то тогда в принципе можно и так

    По поводу палитры. Конечно, делить 256 цветов - задача непростая. Помнится, когда я делал свою предыдущую версию библиотеки на паскале, передо мной всплыла та же задача. Тут я для себя нашел 3 варианта:
    1) - побить палитру на несколько кусков например, по 16 или 32 цвета, в котором будет кодироваться цвета для каждого отдельного изображения, или их группы (Например, вторые 16 цветов - для спрайтов, изображающих землю, третье 16 - для спрайтов главных героев и.т.п, этим способом частенько пользовались создатели DOS-игр в режиме 320x200x256). Из минусов - придется оптимизировать все изображения. А если они у вас в 32-битном цвете - придется сильно постараться, чтобы вывести их на несколько небольших палитр - это задача, пожалуй дико сложная. У меня получалось добиваться незначительной потери качества для 32бит в 32 цвета (пользовался конвертером Irfan View) - но изображения были небольшими. Для крупных изображений, с градиентом потери будут критическими. Но если есть соответствующие возможности у вас, как у художника - можно обработать каждое изображение самому - для достижения оптимального качества, но это крайне долгая работа. Проще изначально рисовать всю графику самому с соотв. оптимизацией.
    2)- использовать 1 общую палитру для всех изображений. Например, в ней будут представлены все часто используемые цвета. Однако опять же придется оптимизировать изображения. Не смотря на это - этот способ несколько проще организовать программно. Кстати, я выбрал этот пункт в качестве рабочего для моей прошлогодней библиотеки подпрограмм на паскале - правда потери качества были очень существенными.
    3) Совершенно сумасшедшая идея - однако для некоторых программ может сгодиться. Является подвидом второго пункта, а именно использовать grayscale - палитру, все 256 оттенков серого. Получим полную передачу любых оттенков, но все будет в "черно-белом" виде. Для некоторых игр, например, на определенную тематику метод может оказаться годным

    Я в свое время, рассмотрел каждый из них подробно, и вскоре плюнул - буду пользоваться так же SVGA. Сейчас я занимаюсь созданием своей библиотеки объектов на BP7.0. Когда закончу работу над ресурсными файлами, попробую написать и свой SVGA-модуль.

    "вру, есть ещё третий вариант, найти нормальную VESA библу для паскаля, коих должно быть много(раз даже для бейсика они есть)... "
    Ребята, посетите сайт [Ссылки могут видеть только зарегистрированные пользователи. ]. Там, я видел, не одну библиотеку для SVGA. Самому мне они интересные не были (хочется самому свою замутить) однако, возможно там и будет что либо подходящее.
    Последний раз редактировалось Абадябер; 11.06.2011 в 23:50.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,829
    Сказал(а) спасибо
    1,810
    Поблагодарили 934 раз(а) в 796 сообщениях
    Записей в блоге
    1
    Можно просто организовать в памяти буфер (хотя по самой память это конечно накладно), изначально выводя любое изображение в него, без всяких там вычислений, на какую страницу это все дело класть. Потом лишь 1 раз вывести этот буфер на экран, и при этом никаких особых вычислений делать не придется.
    Я у ся во 2-м пункте про это и говорил, если по разрешению не слишком критично, то расклад получается крайне заманчивый, адрес определяется там легко(юзаем сегментный регистр, это позволит охватить всю область, всё равно ведь его заполнять при копировании, т.к. область превышает 64Кб). Всю дату храним в видеопамяти (её обычно много, ну 16 метров сейчас у каждого есть, кроме разве даунгрейдеров), оттуда отрисовка идёт на обычную память, а копируем как было сказано 1 раз, правда придётся написать геморную процедуру(где-то полчаса ковыряться с калькулятором, высчитывая относительные сегменты и смещения копируемых кусков)
    (хотя по самой память это конечно накладно)
    Да, на программу тоже надо оставить чутку, а то пэпэц...

    (пользовался конвертером Irfan View)
    А он лучше "фотозадовского"?(подсознательно понимая, что лучше маловероятно, ну а вдруг)

    Касательно идеи 256 оттенков серого(а если быть точным, то реально получится 64 ибо цветопередача больше не позволит, остальные цвета можно юзать как угодно), полагаю много кто думал над ней, но я лично пришёл к выводу что "оно того не стоит", наверное лучше заморочиться с оптимизацией цветов.
    Ответить с цитированием  
     

  4. #4  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Всю дату храним в видеопамяти (её обычно много, ну 16 метров сейчас у каждого есть
    Насколько я знаю, VGA-видеопамять (это если не использовать LFB) всегда имеет размер 256КБ, с начального сегмента 0A000h. Мало того, где то слышал, даже не где то, а вот, С.С Андрианов - "Однако практически все видеоадаптеры считывают данные из видеопамяти в несколько раз (нередко и в десятки раз) медленнее, чем записывают в нее, поэтому пересылать данные из одной области видеопамяти в другую или считывать их без крайней необходимости нецелесообразно". Тоесть любое чтение из видеопамяти, во всяком случае для SVGA - видеоплат нежелательно.
    А для LFB придется отдельно геморроиться
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    А он лучше "фотозадовского"?
    Думаю, врятли. Я вообще не умею пользоваться фотошопом, поэтому мало что могу сказать . Однако Irfan полон всяких фильтров, дитерингов, и прочих вкусностей, и всем этим пользоваться очень легко. Прекрасная вещь .
    Дружба-магия-радость!
    Ответить с цитированием  
     

  5. #5  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,829
    Сказал(а) спасибо
    1,810
    Поблагодарили 934 раз(а) в 796 сообщениях
    Записей в блоге
    1
    Насколько я знаю, VGA-видеопамять (это если не использовать LFB) всегда имеет размер 256КБ.
    VGA да, но средствами VBE можно добраться до любого куска SVGA памяти, двигать окно много раз и не надо, поэтому сервис биос тормозить работу программы практически не будет.

    Однако практически все видеоадаптеры считывают данные из видеопамяти в несколько раз (нередко и в десятки раз) медленнее
    Да вроде бы не существенно медленнее(допускаю пару процентов, креш тест не проводил, но на глаз разницы нету), во всяком случае я не замечал такого даже на первых пнях с картами у которых всего метр памяти. Вообще проверить это легко, пишем допустим кусок:

    Код :
         MOV EBX, 1000   ; тут подбираем чтобы комп это долго делал
    Cyc:  XOR SI, SI
         MOV CX, 16383
         REP LODSD
         DEC EBX
         JNZ Cyc

    Далее замеряем таймером(можно ручным секундомером) считывание с сегмента &HA000 и с обычной памяти(ставим регистр DS). Вот и будет реальный результат, но мне кажется там разница не такая убийственная, во всяком случае на относительно нестарых компах(те, что после первого пня). Тестил я на многих компах, когда игрался с VESA, поэтому говорю уверенно, фатального снижения производительности нет. Есть конечно ещё MMX инструкции всякие и прочие, но полагаю если память работает медленней это и на обычных инструкциях отразится(т.к. чудес не бывает).
    Ответить с цитированием  
     

  6. #6 Графика 
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Тут я создал тему, для обсуждения графики в паскале, чтобы небыло оффтопа в Windows Apocalypse 2012.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

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

Похожие темы

  1. 2D/3D Графика. Игры.
    от handrix в разделе Общие вопросы программирования
    Ответов: 5
    Последнее сообщение: 13.09.2012, 20:23
  2. Графика на Бейсике
    от >Quiet Snow< в разделе Basic
    Ответов: 16
    Последнее сообщение: 28.06.2011, 19:18
  3. Графика
    от nikita в разделе QBasic
    Ответов: 2
    Последнее сообщение: 05.05.2011, 18:20
  4. Графика в TurboC
    от pingvin в разделе C/C++
    Ответов: 3
    Последнее сообщение: 02.03.2011, 13:25
  5. Графика в ассемблере
    от Potap в разделе Assembler
    Ответов: 3
    Последнее сообщение: 21.01.2011, 13:42
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •