Популярные услуги

Все письменные КМ под ключ за 3 суток! (КМ-6 + КМ-7 + КМ-8 + КМ-9 + КМ-10)
КМ-6. Динамические массивы. Семинар - выполню любой вариант!
КМ-2. Разработка простейших консольных программ с использованием ООП + КМ-4. Более сложные элементы ООП - под ключ!
Любая задача на C/C++
Одно любое задание в mYsql
Сделаю ваше задание: Лабораторная работа на Pascal / Lazarus
Любой тест по базам данных максимально быстро на хорошую оценку - или верну деньги!
Любой реферат по объектно-ориентированному программированию (ООП)
Оба семинара по программированию под ключ! КМ-2. Разработка циклических алгоритмов + КМ-3. Функции и многофайловые программы в Си
Повышение уникальности твоей работе
Главная » Лекции » Информатика и программирование » Введение в компьютерную графику » Интерфейсы и стандарты программирования графики

Интерфейсы и стандарты программирования графики

2021-03-09СтудИзба

Лекция 17

Формирование изображений средствами
современных видеосистем. Графические
интерфейсы и стандарты программирования графики

Принципы формирования изображения на экране

Дисплей персонального компьютера включает в себя экран с электронно-лучевой трубкой (Cathode Rate Tube, CRT), а также комплекс оптических и электронных средств, обеспечивающих формирование изображения.

Изнутри экран монитора покрыт специальным веществом – люминофором, который освещается электронным лучом (потоком частиц, исходящих из электронной пушки). Каждый элемент люминофора состоит из трех точек разного цвета: красного, зеленого и синего. Свойства люминофора таковы, что он изменяет свою окраску и яркость при бомбардировке электронами  и сохраняет этот цвет в течение некоторого времени (даже если луч на него уже не направлен).

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

Электронный луч обегает экран слева направо и сверху вниз с определенной скоростью, последовательно формируя множество пикселов, которые, сливаясь друг с другом, воспринимаются глазом как единое целое. Происходит это так быстро, что люминофор в первой зажженной точке не успевает "забыть" свой цвет даже к тому моменту, когда луч находится уже в самом дальнем от точки углу монитора. Физически луч начинает свое движение с левого верхнего угла экрана, прорисовывает самую верхнюю строку  пикселов, затем переходит ко второй строке и т.д. Заканчивается маршрут в правом нижнем углу. Длительность прорисовки всего экрана определяется настройками видеоадаптера, точнее, частотой обновления экрана. При частоте обновления 120 Гц длительность прорисовки кадра равна 1/120 с.

Вертикальная развертка и двойная буферизация

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

Рекомендуемые материалы

Если данные видеопамяти изменились в момент прорисовки кадра, то луч сначала "дорисовывает" кадр на основе старых данных и только при новом проходе отображает измененные данные. Вследствие этого возникают (хотя и кратковременные) дефекты изображения, так называемое "мерцание" экрана. Одно из решений этой проблемы заключается в том, чтобы обновлять данные видеопамяти в тот момент, когда луч находится в правом нижнем углу экрана, но это не всегда возможно. Поэтому применяется метод двойной буферизации (double buffering), который заключается в следующем.

Создается невидимый "виртуальный" экран, и изображение рисуется только на нем. На основной экран содержимое виртуального экрана копируется в тот самый момент, когда луч находится в правом нижнем углу. Операция блокового копирования обычно производится очень быстро - для ее выполнения бывает достаточно даже сотой доли секунды.

Любая современная библиотека (например, DirectX для Windows) позволяет переназначать указатель видеопамяти на любой виртуальный экран, и указанный экран становится основным. Тогда никакого копирования вообще не происходит и механизм работает очень быстро. В этом случае, если требуется внести изменения в изображение (например, передвинуть объект), нет необходимости стирать что-то и рисовать в новой позиции, новый кадр рисуется с нуля и копируется поверх предыдущего на основной экран.

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

Архитектура современных видеосистем

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

Видеопамять. Видеопамять персонального компьютера (VRAM - Video RAM) хранит растровое изображение, которое показывается на экране монитора. Изображение на мониторе полностью соответствует текущему содержанию видеопамяти. Видеопамять постоянно сканируется с частотой кадров монитора. Запись новых данных в видеопамять немедленно изменяет изображение на мониторе.

Необходимый объем видеопамяти вычисляется как площадь экрана в пикселах, умноженная на количество бит (или байтов) на пиксел (установленный видеорежим). Наблюдается тенденция увеличения объемов видеопамяти соответственно увеличению разрешающей способности и глубины цвета видеосистем. В видеопамяти могут храниться несколько кадров изображения, что часто используется при анимации. Кроме того, в некоторых видеоадаптерах предусмотрена возможность использования видеопамяти для хранения другой информации, например Z-буфера, растров текстур.

Физически видеопамять организована в виде одномерного вектора байтов в общем адресном пространстве.  Как правило, адрес первого байта видеопамяти равен A000:0000 (сегмент: смещение) или A0000 (абсолютный адрес).

Кроме физической организации видеопамяти следует учитывать ее логическую организацию, которая зависит от видеорежима. Например, в видеорежиме VGA (256 цветов, 320х200) используются четыре массива байтов памяти. Каждый массив назван битовой плоскостью, для каждого пиксела используются одинаковые биты данных различных плоскостей. Каждая битовая плоскость содержит 80 байтов в одной строке. Плоскости имеют одинаковый адрес в памяти, для доступа к отдельной плоскости необходимо устанавливать индекс плоскости в соответствующем регистре видеоадаптера. Подобный способ организации видеопамяти используется во многих других видеорежимах, он позволяет, например, быстро копировать массивы пикселов.

Для сохранения нескольких кадров изображения в некоторых видеорежимах предусматриваются отдельные страницы видеопамяти с одинаковой логической организацией. Тогда можно изменять стартовый адрес видеопамяти – это приводит к сдвигу изображения на экране. Во всех графических видеорежимах стартовый адрес видеопамяти соответствует левому верхнему пикселу на экране. Поэтому координатная система с центром координат (0,0) в левом верхнем углу растра часто используется в качестве основной (или устанавливается по умолчанию) во многих графических интерфейсах программирования, наприме, в API Windows.

Графический процессор. Современные видеоадаптеры представляют собой сложные электронные устройства. Кроме видеопамяти, на плате видеоадаптера (или видеокарты) располагается мощный специализированный графический процессор, который по сложности уже приближается к центральному процессору. Кроме визуализации содержимого видеопамяти графический процессор выполняет как относительно простые растровые операции: копирование массивов пикселов, манипуляции с цветами пикселов, так и более сложные. Там, где ранее использовался исключительно центральный процессор, в настоящее время все чаще применяется графический процессор видеоадаптера, например для выполнения операций графического вывода линий, полигонов. Первые графические процессоры видеоадаптеров выполняли преимущественно операции рисования плоских элементов. Современные графические процессоры выполняют уже много базовых операций 3D-графики, например, поддержку Z-буфера, наложение текстур и т.п. Видеоадаптер выполняет эти операции аппаратно, что позволяет намного ускорить их в сравнении с программной реализацией данных  операций центральным процессором. Так появился термин графические акселераторы. Быстродействие таких видеоадаптеров часто измеряется в количестве графических элементов, которые рисуются за одну секунду. Современные графические акселераторы способны рисовать миллионы треугольников за секунду.

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

Обмен данными по системной шине для видеосистемы обеспечивают процессор, видеоадаптер и контроллер локальной шины. До недавнего времени для подключения видеоадаптеров использовалась локальная шина PCI (Peripherical Component Interconnect local bus), которая является стандартом для подключения различных периферийных устройств. В настоящее время видеоадаптеры подключаются через локальную шину AGP (Accelerated Graphics Port), разработанную для повышения скорости обмена данными между видеоадаптером и оперативной памятью по сравнению с возможностями шины PCI. Шина AGP позволяет достичь большей частоты кадров  при работе графических 3D-акселераторов. Высокая скорость обмена данных с оперативной памятью позволяет хранить растровые текстуры в оперативной памяти, а не в видеопамяти. Кроме того, использование AGP-порта снижает нагрузку на шину PCI, что  повышает быстродействие компьютера.

Графические видеорежимы. Эволюция видеоадаптеров. Видеоадаптеры позволяют выводить информацию на экран в текстовом и графическом режимах. В текстовом режиме возможности адаптера характеризуются числом строк на экране и числом символов в строке. Графический режим определяется размером растра и глубиной цвета (количеством одновременно выводимых на экран цветов).

Перечислим наиболее распространенные виды видеоадаптеров:

MDA(Monochrom display Adapter) предназначен для работы в текстовом режиме 25 строк по 80 символов в строке.

Hercules Grapphic Card поддерживал, помимо текстового, графический черно-белый режим 720х348 пикселов.

CGA(Color Graphic Adapter) позволял работать в цветном текстовом или графическом режимах. Два графических режима: черно-белый 640х200 пикселов и цветной 320х200 пикселов. В цветном режиме можно было отображать только четыре цвета одновременно (глубина цвета 2 бита на пиксел).

EGA(Enchanced Graphic Adapter) поддерживал 16-цветный графический видеорежим 640х350 пикселов, цвета выбирались из палитры 64 цветов. Главным недостатком этого режима была различная разрешающая способность по горизонтали и вертикали, т.е. пикселы имели прямоугольную форму (круг выглядел овалом).

MCGA (Multi-Color Graphic Array) и VGA(Video Graphic Array) обеспечивали 256-цветные видеорежимы. Адаптер VGA имеет два видеорежима: 1) 256-цветный графический видеорежим с размерами растра 320х200, цвета можно выбирать из палитры в 256 тысяч цветов, пикселы прямоугольной формы;
2) 16-цветный видеорежим 640х480, пикселы квадратные.

SuperVGA  поддерживают графические видеорежимы:
16-цветные 800х600 и 1024х768; 640х480, 800х600 и более для 256 цветов.

Targa24 - первый видеоадаптер с глубиной цвета в 24 бита, что позволило получить цветовой видеорежим True Color.

На современных компьютерах с процессорами класса Pentium используются различные видеоадаптеры растрового типа, позволяющие устанавливать глубину цвета до 32 бит на пиксел при размерах растра 1600х1200 и более. Существуют стандарты на видеорежимы, установленные VESA (Video Electronic Standards Association).

Видеоадаптеры могут различаться не только по быстродействию и возможностям для работы с цветом, но и по  уровню реализации тех или иных графических операций. Например, видеоадаптеры Matrox позволяют создавать качественную двумерную графику, Nvidia GeForce считаются удачными игровыми 3D-акселераторами, а видеоадаптеры  3Dlabs Wildcat могут использоваться для профессионального 3D-моделирования.

Использование программистами графических возможностей видеосистемы может осуществляться на различных уровнях.

1. Использование возможностей BIOS для выполнения простейших операций, таких как определение графического видеорежима, вывода пикселов на экран и  др.

2. Использование функций операционной системы. Раз-личные операционные системы  предоставляют в этом плане различные возможности: в MS-DOS практически нет графических функций, но программист имеет свободный доступ ко всем аппаратным ресурсам компьютера, в том числе и непосредственный доступ к видеопамяти; операционная система Windows запрещает прикладным программам непосредственный доступ к аппаратным ресурсам, но содержит несколько сотен графических функций  – интерфейс API (Application Program Interface).

3. Использование специализированных графических интер-фейсов и библиотек, которые поддерживают аппаратные возможности современных графических процессоров.

Современные стандарты и интерфейсы программирования компьютерной графики

Одним из наиболее известных графических интерфейсов является OpenGL. Этот интерфейс в виде библиотеки графических функций представляет собой открытый стандарт, разработанный и утвержденный в 1992 г. девятью фирмами, среди которых были Digital Equipment Corp., Evans & Sutherland, Hewlett Packard Co., IBM Corp., Intel Corp., Silicon Graphics Inc., Sun Microsystems и Microsoft. В основу стандарта легла библиотека IRIS GL, разработанная фирмой  Silicon Graphics Inc. Этот стандарт поддерживается многими операционными системами (в том числе и Windows), а также производителями графических акселераторов.

Другим известным графическим интерфейсом является DirectX с подсистемой трехмерной графики Direct3D, а также подсистемой DirectDraw, которая обеспечивает, в частности, непосредственный доступ к видеопамяти. Этот интерфейс разработан Microsoft и предназначен только для Windows.

В отличие от OpenGL, который сразу разрабатывался для функционирования с графическими ускорителями,  Direct3D был изначально ориентирован на программный рендеринг. Кроме того, Direct3D фактически не является стандартом в строгом смысле этого слова – это лишь некоторый интерфейс, объявленный и полностью контролируемый компанией Microsoft.

Известны также другие разработки графических интерфейсов для видеоадаптеров. Например, интерфейс Glide, разработанный 3Dfx  для графических видеоадаптеров семейства Voodoo (следует заметить, что компания 3Dfx недавно прекратила свое существование как изготовитель видеоадаптеров).

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

На сегодняшний день для персональных компьютеров существует два таких интерфейса: OpenGL, уже более 10 лет являющийся стандартом, и Direct3D, предложенный и поддерживаемый компанией Microsoft.

OpenGL представляет собой открытый процедурный интерфейс к видеоадаптеру, позволяющий легко задавать объекты в пространстве и операции над ними.

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

Библиотека OpenGL позволяет легко создавать объекты из геометрических примитивов (точек, линий, граней), располагать их в трехмерном пространстве, выбирать способ и параметры проектирования, вычислять цвета пикселов с использованием текстур и источников света.

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

Работа с OpenGL основывается на модели клиент-сервер. Приложение выступает в роли клиента - оно генерирует команды, а сервер OpenGL выполняет их.

Библиотека OpenGL поддерживает различные палитровые режимы, позволяет работать в режимах непосредственного задания цвета High Color и True Color.

Для облегчения работы с OpenGL, и в частности работы с окнами и вводом, удобно использовать библиотеку glut. Эта кросс-платформенная библиотека позволяет легко создавать переносимые приложения, использующие OpenGL. Библиотека glut (OpenGL Utility Toolkit) является прозрачным интерфейсом для написания переносимых программ, использующих OpenGL и взаимодействующих с оконной системой. Она позволяет писать программы на ряде языков, включая C++, Delphi.

Для рисования геометрических объектов OpenGL организует несколько буферов: буфер изображения (фрейм-буфер), буфер глубины (z-буфер), буфер трафарета и аккумулирующий буфер.

Библиотека OpenGL может выводить точки, линии, полигоны и битовые изображения. Под линией в OpenGL понимается отрезок, заданный своими начальной и конечной вершинами. Под гранью (многоугольником) подразумевается замкнутый выпуклый многоугольник с несамопересекающейся границей.

Все геометрические примитивы задаются в терминах вершин. Каждая вершина задается набором чисел.

Вам также может быть полезна лекция "Диагностика внематочной беременности (ВБ)".

OpenGL работает с однородными координатами (x, y, z, w). Если координата z не задана, то она полагается равной 0. Если координата w не задана, то она полагается равной единице.

В процессе построения изображения координаты вершин подвергаются различным преобразованиям (видовым, проектирования, перспективного деления и др.). В OpenGL существуют две матрицы для преобразования координат точки:  матрица моделирования (modelview matrix) и матрица проектирования (projection matrix). Первая служит для задания положения объекта и его ориентации, а вторая отвечает за выбранный способ проектирования. Кроме того, существует матрица преобразования текстурных координат (texture matrix). Имеется набор различных процедур, умножающих текущую матрицу (моделирования или проектирования) на матрицу выбранного геометрического преобразования. Если последовательно указано несколько преобразований, то в результате текущая матрица будет последовательно умножена на матрицы соответствующих преобразований.

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

OpenGL поддерживает модель освещенности, в которой свет приходит из нескольких источников, которые по отдельности могут быть включены или выключены. Кроме того существует еще и общее фоновое  освещение (ambient). Для правильного освещения объектов необходимо для каждой грани задать материал, обладающий определенными свойствами. Материал может испускать свой собственный свет, рассеивать падающий свет во всех направлениях (диффузное отражение) или отражать свет в определенных направлениях подобно зеркалу. Пользователь может определить до восьми источников света, каждый со своими свойствами (цвет, расположение, направление).

Линия или заполненная грань может быть нарисована одним цветом (плоское закрашивание) или путем интерполяции цветов в вершинах (закрашивание методом Гуро).

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

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5161
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее