русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Низкоуровневое программирование компьютерной графики

Суть:
Низкоуровневое программирование – это когда в программе мы непосредственно обращаемся к регистрам.
         Преимущества:
                   Можно сделать нестандартные решения.
         До средины 90-х годов функции для рисования графики были в малом количестве и с очень ограниченными возможностями, железо было медленное.
         Для преодоления тупика по быстродействию программирование в те времена выполнялось на ассемблере.

Недостатки:

1. Чтобы уметь писать программу нужно четко знать стандарт описания работы до такта. Последний официальный стандарт в 87 году и называется VGA. После этого все фирмы начали делать свои версии адаптеров, все вместе они называются SVGA
SVGA – это VGA + нечто (у каждой фирмы свое)
Все сегодняшние фирмы  вставляют внутренние шины (198 бит шина внутри адаптера), существует не меньше 30 акселераторов (ускорение в 1000 100000 раз). Акселераторы выполняют в 1000 раз быстрее свои функции, генерируя алгоритм Бронзенхерма.
В  SVGA постоянно расширяют и развивают добавки.

2) Основной язык для создания таких программ – это ассемблер, но ассемблер самый тяжелый по записи язык, преимущества ассемблера заключается в прямом обращении к регистрам портам и компьютер должен был беспрекословно выполнять все команды, но такой язык хорош для одно-командных прцессоров.
Начиная с 90-х годов все процессоры конвеерные.
Конвеер  - процессор сам аналезирует подаваемый код, автоматически выполняя оптимизацию и поэтому очень часто меняет текст машинных команд и последовательность их выполнения. Нужно знать архитектуру адаптера.
Архитектура графического адаптера программисту доступно только VGA.

       Каждый функциональный узел имеет свои порты. Обычно для доступа к функциональному узлу нужно обратиться  сначала по адресу, а потом менять значения.

Все регистры 8-ми битовые.
Внешний регистр 3С2h, 3С3h – эти порты главные, разрешают/запрещают доступ к графическому адаптеру; 3BAh, 3DAh – определяют состояния луча.

Графический адаптер – осуществляет обмен данными между цифровым адаптером и процессором, можно управлять режимом работы и виполнять маскирования цветов.

Синхронизатор – управления параметрами работы адаптера, доступ к его слоям, определения структуры памяти.
Преобразователь последовательности – узел который управляет потоковыми данными, здесь находятся системные шрифты.
Контр. атрибутов – управляет цветовыми характеристиками, находится 16 цветовых регистров т.е. 16 цветов.
Контроллер ЭЛТ – контроллер монитора. С его помощью мы можем сделать строчную или векторную развертку.
ЦАП – до появления VGA, сигнал от адаптера имел цифровой характер, VGA – выдает аналоговый сигнал, а для преобразования цифровой информации в аналоговую ставят цифро-аналоговый преобразователь.

256 рег. 24 битное появление дало возможность рисовать 256 цветов, с помощью этого узла можно делать очень эффективную и быструю анимацию.

      

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

Стандартные графические средства не позволяют решить эту задачу.
Современные адаптеры используют строчную развертку. Автоматически в каждом адаптере заложено формирования изображения бордюра. Смысл бордюра -  основное изображение рисуется внутри этого прямоугольника, а все выводимое изображения взято в рамку (по умолчанию она черного цвета ). Назначения бордюра  - при различных неприятных смещений ЭЛТ может, не меняя режим работы адаптера не изменяя размер изображения, его можно сместить. Этот бордюр используется как вспомогательный элемент интерфейса, используется при смеш. цветов.
Задача программы определять моменты времени, когда луч находится в режиме рисования бордюра,  а перед этим задавать в регистр цвета линий нужный цвет. Для каждой новой строки новый цвет, при переходе со строки на строку в момент, когда идет обратный код, мы должны изменить цвет.

Для создания анимации мы будем ловить момент, когда заканчивается кадр и при переходе на следующий кадр, изменения цвета делает скачкообразным. Поэтому цветные линии будут каждый раз рисоваться на новом месте.

В момент обратного хода изменить цвет бордюра. Ждать до тех пор пока не начнет рисоваться линия.

Изменения в парамертрах адаптера(ячейки видеопамяти, регистрах управления) нельзя делать когда луч что то рисует на экране.

Моменты окончания и начала рисования строки , кадра нельзя получить автоматически. Для этого придется делать бесконечные  приемы на языке ассемблер.

Схема алгоритма

Обновлять цвета строк начинается с начала кадра. Ищется конец строки и меняем параметр(цвет строки).
При создании сложных программ (компьютерные игры) изменение идет во время обратного хода кадра.


Текст программы:

program border;
uses crt;
var i, j, k : integer;
begin
goto (1, 25);
write (‘  ’ : 30, ‘Выход «Esc»’);  инструкция по выходу
asm
cli               ; запрещаем прерывания во время работы программы
@@10:
mov cx, 4001 ; регистр cx используется как счетчик числа
; последоват. нарисованных строк
@@20:
mov dx, 3DAh ; заносим 3DAh
in al, dx         ; читаем из al в dx
test al, 8
jz @@20
@@30:       in al, dx              ; читаем из al в dx
test al, 1
jz @@30
; основная задача – изменяем значение цвета в регистре  бордюра 3C0h
; Внимание, при выполнении первого шага биты 5-7 записываются в 3C0h,
; должны содержать 0
mov dx, 3C0h
mov al, 11h
mov dx, al
mov ax, di
mov al, 0Fh
mov dx, al
mov al, 20h
out   dx, al
@@40:   mov dx, 3DAh
in     al, dx
test   al, 1        ;  проверяем на начало рисования строки
jnz    @@40             ; 
; начало рисования новой строки кадра
inc di               ; если cx не превышает FFFFh
loop @@30              ; то меняем цвет сроки
in     al, 60h    ; считываем информацию из порта клавиатуры
cmp al, 1                  ; проверяем на наличие
jnz    @@10    ; скан-код Esc = 1, если
sti                   ; его нет, то возвращаемся в начало
end;
END.


Выводы

  • Писать такие программы сложно.
  • Из-за разброса стационарных графических адаптеров возможны збои в asm прграмм.
  • Asm программы не способны исполнять акселлераторы графических адаптеров.
  •  Asm программа ореентирована на однокомандные процессоры.
  • Современные компьютерные программы нужно писать средствами универсяльных алгоритмических языков.

Просмотров: 13763

Вернуться в оглавление:Компьютерная графика




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.