русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Низькорівневе програмування комп'ютерної графіки

Суть:
Низькорівневе програмування - це коли у програмі ми безпосередньо звертаємося до регістрів.
Переваги:
Можна зробити нестандартні рішення.
До середини 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 програма ореентирована на однокомандные процесори.
  • Сучасні комп'ютерні програми потрібно писати засобами универсяльных алгоритмічних мов.

Переглядів: 7594

Повернутися в зміст:Комп'ютерна графіка




Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн