User Tag List

Страница 16 из 71 ПерваяПервая ... 121314151617181920 ... ПоследняяПоследняя
Показано с 151 по 160 из 703

Тема: Новый графический режим для игр

  1. #151

    Регистрация
    21.07.2010
    Адрес
    Ukraine
    Сообщений
    276
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Почти, а теперь немного другая задача. Нужно оставить посередине картинку, остальное затенить. В играх часто бывает типа фон серый становится а герой яркий и цветной.
    Если оставить 4 страницы палитры, то переключить на нужную нам в момент вывода героя, это как уже выше писали может делать простой блиттер или работать через наложение альфа слоя. Пока я этим не занимался, сказать ничего точно не могу, нужно брать и пробовать делать.

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

  3. #152

    Регистрация
    21.07.2010
    Адрес
    Ukraine
    Сообщений
    276
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спецификация этого "нового графического режима" есть?
    Если нет, то для начала хотя-бы нужно привязаться к одному из стандартных видео разрешений. Взять к примеру индустриальный стандарт VGA 640х480@60Hz 24bpp, Pixel freq.=25.175 MHz(округлим под PLL до 25МГц).
    Получается, что максимальное разрешение 640х480 24bpp, сюда теперь можно вложить несколько видео режимов, к примеру так:
    1) 640х480
    2) 320x240
    3) ZX-Spectrum screen (x2 = H:32+256+32; V=24+192+24)
    4) ZX-Spectrum screen (х1 = 4-ре поля H:32+256+32; V=24+192+24):

    Фото режимов 3 и 4



    [свернуть]

  4. #153

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,966
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Почти, а теперь немного другая задача. Нужно оставить посередине картинку, остальное затенить. В играх часто бывает типа фон серый становится а герой яркий и цветной. Как такие штуки делать без палитры я не знаю. Понятно что можно процом пройтись,
    Блиттером. Операция наложения с частичной прозрачностью "блока" из единственной точки на часть экрана.

    Цитата Сообщение от krt17 Посмотреть сообщение
    или подготовить кучу тайлов с различной яркостью, но палитра решает проблему на корню, и еще вдобавок уменьшает bpp, что для спекки с его дискетами актуально.
    Это лучше не через физическую палитру, а распаковкой сжатых изображений.
    Так можно заменять раскраски (в том числе частично), не то что яркость.
    Прихожу без разрешения, сею смерть и разрушение...

  5. #154

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,966
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Во уже альфа канал начался,
    говоришь, как будто это что-то плохое
    также пригодился бы и для сглаживания

    Цитата Сообщение от krt17 Посмотреть сообщение
    Да ладно, тоесть надо сделать 20 одинаковых изображений. Ок.
    20 (или сколько там тебе надо) небольших табличек для распаковки
    но изображение то же самое (и таблички можно юзать не только с ним)
    Прихожу без разрешения, сею смерть и разрушение...

  6. #155

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сорри, весь тред не осилил, но расскажу мнение адаптатора игр на примере Саботера 2. Мне было бы очень кайфово и быстро адаптировать Саботера, если бы можно было:
    1. Сказать видеокарте, что у меня n тайловых слоев.
    2. Отправить ей тайлы 8x8 для каждого слоя
    3. Замапить куски ОЗУ на тайловые буфера для слоев.
    4. Получить от карты момент окончания отрисовки экрана чтобы включить другую страницу с тайлмапами в момент отрисовки бордюра.

    Это позволит мне отключить рендерер. А, чтобы оптимизировать вывод тайлов в тайлмапы, было бы неплохо, чтобы сами тайлмапы были размером больше, чем 32x24, желательно раза хотя бы в 3. Чтобы не париться с клиппированием.

    PS Не претендую на то, что так оно будет удобно для всех игр. С Elite такое явно не прокатит, ей нужен 3D-успоритель

  7. #156

    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    67
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Простой пример, плавное гашение экрана. Хотя тут конечно предложат сделать 50 экранов в памяти (у нас же 16 метров) или шейдеры (куда же без них это же гашение экрана).
    То есть для гашения нужна команда, по которой видеокарта должна будет пройтись по всем точкам экрана: прочитать точку из буфера экрана, уменьшить число в каждом канале RGB на 1 и записать обратно в буфер экрана. За 31 цикл с паузами для обеспечения нужной скорости можно плавно погасить весь экран.

    ---------- Post added at 23:39 ---------- Previous post was at 23:25 ----------

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Сорри, весь тред не осилил, но расскажу мнение адаптатора игр на примере Саботера 2. Мне было бы очень кайфово и быстро адаптировать Саботера, если бы можно было:
    1. Сказать видеокарте, что у меня n тайловых слоев.
    2. Отправить ей тайлы 8x8 для каждого слоя
    3. Замапить куски ОЗУ на тайловые буфера для слоев.
    4. Получить от карты момент окончания отрисовки экрана чтобы включить другую страницу с тайлмапами в момент отрисовки бордюра.
    INT надо подавать после отображения на телевизоре правой нижней точки экрана 256х192 ?

    Это позволит мне отключить рендерер. А, чтобы оптимизировать вывод тайлов в тайлмапы, было бы неплохо, чтобы сами тайлмапы были размером больше, чем 32x24, желательно раза хотя бы в 3. Чтобы не париться с клиппированием.

    PS Не претендую на то, что так оно будет удобно для всех игр. С Elite такое явно не прокатит, ей нужен 3D-успоритель
    Т.е. каждую локацию подготовить в виде таблицы 32х24 тайла (768 на экран) и загрузить в SDRAM в буфер локаций. Дополнительные слои делать с прозрачными цветами и прозрачным спрайтам № 0. После этого для копирования из буфера локаций в буфер экрана достаточно будет указать адрес локации. После перехода в новое место скопировать в буфер экрана нижний слой, потом спрайты героев, потом верхний слой. Я правильно понял?

    Сколько примерно надо локаций?
    Сколько байтов надо на номер тайла ?
    Перечислите, пожалуйста, названия игр, для которых такой способ тоже подойдет.
    А для каких нужен другой способ ?
    Какой ?
    Последний раз редактировалось zx-kit; 26.06.2015 в 22:01.
    "L-256"

  8. #157

    Регистрация
    21.07.2010
    Адрес
    Ukraine
    Сообщений
    276
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кто-бы что тут не говорил... вот рабочий пример, можно попробовать в конфигурации Zet:
    Код:
    ; fadeout.asm
    ; выполняет плавное гашение экрана
    
            .model     tiny
            .code
            .186                            ; для команд insb/outsb
            org        100h                 ; СОМ-программа
    start:
            cld                             ; для команд строковой обработки
            mov        di,offset palettes
            call       read_palette         ; сохранить текущую палитру, чтобы
                                            ; восстановить в самом конце программы,
            mov        di,offset palettes+256*3
            call       read_palette         ; а также записать еще одну копию
                                            ; текущей палитры, которую будем
                                            ; модифицировать
            mov        cx,64                ; счетчик цикла изменения палитры
    main_loop:
            push       cx
            call       wait_retrace         ; подождать начала обратного хода луча
            mov        di,offset palettes+256*3
            mov        si,di
            call       dec_palette          ; уменьшить яркость всех цветов
            call       wait_retrace         ; подождать начала следующего
            mov        si,offset palettes+256*3    ; обратного хода луча
            call       write_palette        ; записать новую палитру
            pop        cx
            loop       main_loop      ; цикл выполняется 64 раза - достаточно для
                                      ; обнуления самого яркого цвета (максимальное
                                      ; значение 6-битной компоненты - 63)
            mov        si,offset palettes
            call       write_palette  ; восстановить первоначальную палитру
            ret                       ; конец программы
    
    ; процедура read_palette
    ; помещает палитру VGA в строку по адресу ES:DI
    read_palette       proc    near
            mov        dx,03C7h             ; порт 03C7h - индекс DAC/режим чтения
            mov        al,0                 ; начинать с нулевого цвета
            out        dx,al
            mov        dl,0C9h              ; порт 03C9h - данные DAC
            mov        cx,256*3             ; прочитать 256 * 3 байта
            rep        insb                 ; в строку по адресу ES:DI
            ret
    read_palette       endp
    
    ; процедура write_palette
    ; загружает в DAC VGA палитру из строки по адресу DS:SI
    write_palette      proc    near
            mov        dx,03C8h             ; порт 03C8h - индекс DAC/режим записи
            mov        al,0                 ; начинать с нулевого цвета
            out        dx,al
            mov        dl,0C9h              ; порт 03C9h - данные DAC
            mov        cx,256*3             ; записать 256 * 3 байта
            rep        outsb                ; из строки в DS:SI
            ret
    write_palette      endp
    
    ; процедура dec_palette
    ; уменьшает значение каждого байта на 1 с насыщением (то есть, после того как
    ; байт становится равен нулю, он больше не уменьшается  из строки в DS:SI
    ; и записывает результат в строку в DS:SI
    dec_palette        proc    near
            mov        cx,256*3             ; длина строки 256 * 3 байта
    dec_loop:
            lodsb                           ; прочитать байт,
            test       al,al                ; если он ноль,
            jz         already_zero         ; пропустить следующую команду
            dec        ax                   ; уменьшить байт на 1
    already_zero:
            stosb                           ; записать его обратно
            loop       dec_loop             ; повторить 256 * 3 раза
            ret
    dec_palette        endp
    
    ; процедура wait_retrace
    ; ожидание начала следующего обратного хода луча
    wait_retrace       proc    near
            push       dx
            mov        dx,03DAh
    VRTL1:  in         al,dx           ; порт 03DAh - регистр ISR1
            test       al,8
            jnz        VRTL1           ; подождать конца текущего обратного хода луча,
    VRTL2:  in         al,dx
            test       al,8
            jz         VRTL2           ; а теперь начала следующего
            pop        dx
            ret
    wait_retrace       endp
    
    palettes:                          ; за концом программы мы храним две копии
                                       ; палитры - всего 1,5 Кб
            end        start
    Взято отсюда: http://devotes.narod.ru/Books/3/ch05_10d.htm

    Ну, это так для примера, чтобы понятнее было как оно в реале на пальцах по простому работает.

  9. #158

    Регистрация
    21.07.2010
    Адрес
    Ukraine
    Сообщений
    276
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня уже написаны модули текстового и графического режимов для VGA 640x480@60Hz (ссылка).
    Текстовый режим 80х30 16 цветов, под текст и атрибуты используется 4800 байт, символы с атрибутами хранятся линейно - символ 0, атрибут 0, символ 1, атрибут 1, ... символ 2399, атрибут 2399. Реализован аппаратный курсор, может принимать два вида - большой и подчеркивание.
    Графический режим 640х480@60Hz 24bpp, используется 921600 байт, точки хранятся линейно - (R,G,B); (R,G,B); ...
    Попробую сделать ещё палитру. У кого есть желание и FPGA платы могут уже подключаться, есть возможность попробовать свои силы и научить нас чему-то...

  10. #159

    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    67
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от MVV Посмотреть сообщение
    У меня уже написаны модули текстового и графического режимов для VGA 640x480@60Hz (ссылка).
    Текстовый режим 80х30 16 цветов, под текст и атрибуты используется 4800 байт, символы с атрибутами хранятся линейно - символ 0, атрибут 0, символ 1, атрибут 1, ... символ 2399, атрибут 2399. Реализован аппаратный курсор, может принимать два вида - большой и подчеркивание.
    Графический режим 640х480@60Hz 24bpp, используется 921600 байт, точки хранятся линейно - (R,G,B); (R,G,B); ...
    Попробую сделать ещё палитру. У кого есть желание и FPGA платы могут уже подключаться, есть возможность попробовать свои силы и научить нас чему-то...
    Может все-таки начнем с простого 256х192 без текстового режима ?
    Последний раз редактировалось zx-kit; 26.06.2015 в 22:59.
    "L-256"

  11. #160

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,966
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Повторю, это просто один из них, который при использовании палитры становится простым и не напряжным для процессора
    если что-то посложней гашений экрана полностью, напрягаться будет разраб/художник
    часть цветов только на эффекты придётся выделить
    Прихожу без разрешения, сею смерть и разрушение...

Страница 16 из 71 ПерваяПервая ... 121314151617181920 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 18
    Последнее: 11.04.2021, 10:54
  2. графический редактор
    от yur в разделе Вектор
    Ответов: 1
    Последнее: 08.11.2012, 13:01
  3. графический режим на Атари
    от goblinish в разделе Atari
    Ответов: 3
    Последнее: 06.01.2012, 11:19
  4. графический софт для 48 К
    от goglus в разделе Софт
    Ответов: 6
    Последнее: 02.08.2006, 15:33

Ваши права

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