Перейти к основному содержимому

VGA

Для кого этот документ

  • Студентам курса "Периферийные устройства"
  • Необходимое ПО: Quartus II

Формирование символьных и графических изображений на экране VGA монитора, анимация изображения на экране VGA монитора

Цель работы: изучение графического и символьного режимов работы VGA монитора. Модификация процессорной системы с целью её русификации.

1. Подготовка к лабораторной работе

Для выполнения лабораторной работы необходимо изучить по материалам лекций и предложенной литературы:

  1. Основные компоненты процессорной системы, используемые для вывода графической информации на экран монитора.
  2. Принцип работы, назначение программно доступных регистров и их отдельных полей VGA порта. Эта информация содержится в описании процессорной системы «DE2-70 Media Computer». Включите ее в отчет.
  3. Описание графического и символьного буферов, используемых в процессорной системе с указанием их адресов. Данная информация содержится в описании процессорной системы «DE2-70 Media Computer».
  4. Уясните принцип работы программных заготовок, предлагаемых для выполнения лабораторной работы. Их листинги с подробными комментариями находятся в приложении. Описание выполняемых программами действий содержится в следующем разделе методических указаний.
  5. Уясните пункты заданий методических указаний и напишите программы для их выполнения.

Исходные файлы, используемые в работе

  • Файл «part_1_point_4.c», содержит программу, которая делит экран на 4 горизонтальные полосы и закрашивает одну из них выбранным цветом. Номер полосы задается переключателями SW17-16, цвет задается переключателями SW15-0.

  • Файл «part_2_point_5.c», содержит программу, выводящую текстовую строку с заданной начальной позиции (x; y) слева-направо.

  • Файл «part_4_point_1.c», содержит программу, изображающую прямую линию на экране VGA. Цвет линии задается в начале выполнения программы при помощи 16 переключателей, причем после задания цвета на переключателях необходимо нажать кнопку KEY1. Координаты начала и конца линии также задаются с помощью переключателей. Первые (левые?) 9 переключателей используются для задания координаты Х, остальные 9 переключателей – для задания координаты Y. При нажатии кнопки KEY3 на стенде, заданные на переключателях значения координат устанавливаются в качестве координат начала линии, при нажатии кнопки KEY2 заданные значения координат устанавливаются в качестве координат конца линии. Также данная программа содержит функцию, изображающую окружность, параметры которой задаются в коде программы.

  • Файл «part_5_point_1.c», содержит программу, которая рисует на экране линию и перемещает её вправо по нажатию любой кнопки. После запуска программы задаются начальные координаты x и y (по 9 переключателей на x и y), после чего программа ждет нажатия любой кнопки (кроме KEY0). Далее таким же образом задаются конечные координаты линии x и y, для задания также необходимо нажать на любую кнопку. После этого происходит задание цвета линии, также с использованием переключателей, для выбора цвета надо нажать на любую кнопку. После этого рисуется линия и появляется возможность её перемещения в правую сторону.

Видеоматериалы

Файлы для выполнения задания

📦 Скачать архив с материалами v2

2. Порядок выполнения лабораторной работы

Часть 1. Использование графического буфера для вывода цветного изображения на экран VGA монитора

Для корректной компиляции заготовленных программ необходимо в меню Program Settings в поле Additional Compiler Flags указать ключ –std=c99.

  1. Подключите VGA монитор к соответствующему разъему стенда DE 2-70 или DE 2-115 при выключенном питании стенда.

  2. Включите питание стенда. Реализуйте процессорную систему DE2-70 Media Computer или DE 2-115 Media Computer в стенде, загрузив соответствующий конфигурационный файл в кристалл ПЛИС стенда. Выполните подключение к системе, выполнив команду Connect to system в меню Actions. Сделайте снимок экрана, подключенного к процессорной системе VGA монитора, используя мобильный телефон и поместите его в отчетные материалы.

  3. Откройте вкладку Memory AMP. Вызовите правой клавишей мыши контекстно-зависимое меню. Используя команду Memory fill, заполните графический видеобуфер такими значениями, чтобы весь экран монитора закрасился черным цветом. Экспериментально проверьте, входит ли в заполняемый диапазон памяти конечный адрес и отразите в отчете. Добавьте в отчет содержимое видеобуфера и снимок экрана.

  4. Задайте во вкладке Memory адрес пикселя VGA экрана с координатой (0,0) и запишите по нему значение, соответствующее белому цвету. Если на экране пиксель не отобразился, то попробуйте сместить изображение, используя регулировочные колёсики на самом мониторе. Аналогичным образом закрасьте белым цветом соседний справа пиксель. Аналогичным образом закрасьте белым цветом всю строку экрана с координатой Y=0.

  5. Определите диапазон адресов графического буфера за пределами нулевой строки, который не отображается на экране монитора (невидимая зона). Экспериментально подтвердите свое предположение, меняя содержимое этой области памяти во вкладке Memory. Отразите в отчете размер и диапазон адресов невидимой зоны.

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

Таблица 1. Варианты цветов строк и цвета буфера заднего плана

ВариантНомер строки и её цветЦвет буфера заднего плана
123Последняя
1Белыйзеленыйкрасныйсинийкоричневый
2Белыйсинийкрасныйбелыйоранжевый
3Белыйкрасныйзеленыйсинийжелтый
4Белыйбелыйсинийзеленыйфиолетовый
5Белыйзеленыйбелыйсинийсерый
6Белыйсинийзеленыйкрасныйсалатовый
7Белыйзеленыйкрасныйбелыйрозовый
8Белыйкрасныйсинийзеленыйголубой
9Белыйкрасныйзеленыйсинийжелтый
  1. Запустите программу, «part_1_point_4.c» и экспериментально определите выполняемые ею действия. Программа делит экран монитора на 4 горизонтальных полосы и закрашивает одну из них некоторым цветом. Номер закрашиваемой полосы задается переключателями SW17-16, цвет полосы задается переключателями SW15-0. Меняя состояние переключателей, наблюдайте работу программы. Задавайте цвета: белый, голубой, красный, зеленый, черный и другие цвета радуги. Заполните в отчете таблицу соответствия цветов и числовых значений, используемых для их кодирования.

  2. Используя вкладку Memory AMP, наблюдайте содержимое программно доступных регистров контроллера VGA порта. Уясните назначения этих регистров и их отдельных полей. Поместите в отчет наблюдаемые значения, и ваши комментарии.

  3. Заполните буфер заднего плана таким образом, чтобы экран монитора закрашивался заданным в таблице 1 цветом. Используйте для него статическую память за пределами основного буфера. Выполните переключение отображаемых кадров. Наблюдайте изменение цвета экрана монитора и регистров контроллера VGA порта. Выполните повторное переключение отображаемых кадров. Зафиксируйте в отчете выполняемые действия и наблюдаемые результаты. На одном кадре должны быть видны закрашенные полосы экрана в соответствии с вариантом, на другом одноцветный фон.

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

Часть 2. Использование символьного буфера для вывода текстовой информации на экран VGA

  1. Используя вкладку Memory AMP, наблюдайте содержимое символьного буфера. Зафиксируйте в отчете свои наблюдения. Запишите в начало буфера ASCII код заглавного символа, с которого начинается ваша фамилия. Используйте латинский алфавит и таблицу ASCII кодов, приведенную в приложении. Наблюдайте выводимый символ на экране монитора. Запишите в буфер новое значение так, чтобы в соседней позиции строки вывелась вторая строчная буква вашей фамилии.

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

  3. Определите область ОП символьного буфера за пределами первой строки, которая не отображается на экране VGA. Экспериментально подтвердите свое предположение, записывая в неё произвольные символы. Отразите в отчете размер и диапазон адресов невидимой части символьного буфера.

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

  5. Используя символьный буфер, выведите на экран VGA вашу фамилию и имя, используя латинский алфавит, в соответствии с заданным в варианте способом, начиная с указанной позиции. Рекомендуется заранее подготовить программу, заполняющую символьный буфер, в соответствии с заданным вариантом. В приложении приведена программа «part_2_point_5.c» с подробными комментариями, в которой выводится на экран VGA текстовая строка с позиции, задаваемой координатами (х,у). Поместите листинг отлаженной вами программы в отчет и снимок экрана, подтверждающий успешное выполнение этого пункта задания.

Таблица 2. Варианты вывода текстовой строки на экран VGA

ВариантСпособ выводаКоординаты начала строки на экране (x; y)
1Справа-налево (д)(65; 12)
2Снизу по диагонали направо (з)(12; 49)
3Слева-направо (а)(9; 12)
4Сверху по диагонали налево (г)(38; 27)
5Сверху по диагонали направо (в)(33; 15)
6Снизу-вверх (е)(1; 11)
7Снизу по диагонали налево (ж)(66; 48)
8Сверху-вниз (б)(61; 47)
9Сверху по диагонали налево (г)(63; 49)

Рисунок 1. Способы вывода текстовой строки на экран VGA

Часть 3. Экспериментальное определение встроенного шрифта для вывода символов на экран VGA

  1. Напишите программу на ассемблере или языке Си, которая будет заполнять символьный буфер последовательными значениями так, чтобы в строке экрана с координатой у, выводились все символы, которым соответствует ASCII код, старшая тетрада которого совпадает с порядковым номером строки. Причем смещение в строке также задается координатой у. То есть, на нулевой строке (верхней) выводятся символы с кодами в диапазоне 0x00 – 0x0F, на первой строке со смещением 1 символы с кодами в диапазоне 0x10 – 0x1F, на второй строке со смещением 2 символы с кодами в диапазоне 0x20 – 0x2F и так далее. На строке с номером 0xF со смещением 0xF символы с кодами из диапазона 0xF0 – 0xFF. Проанализируйте выводимые на экран символы. Сделайте снимок экрана и поместите его в отчет. Сравните символы, отображаемые на экране VGA, с представленными в таблице ASCII, приведенной в приложении. Обратите внимание на то, как отображаются на экране VGA символы из второй половины таблицы, коды которых начинаются с единичного старшего бита. Сделайте в отчете заключение о поддержке в процессорной системе символов кириллицы.

  2. Используя приложение QUARTUS II откройте проект процессорной системы DE2-115_Media_Computer.qpf. Для нахождения файлов проекта используйте следующий путь C:\altera\13.0sp1\University_Program\NiosII_Computer_Systems\DE2-115\DE2-115_Media_Computer. Обратите внимание на наличие двух папок с проектами процессорной системы, выполненными на языках Verilog и VHDL, соответственно.

  3. Во вкладке File навигатора проекта найдите файл altera_up_video_128_character_rom.v с описанием модуля памяти, используемого для хранения шрифта, применяемого в процессорной системе. Наличие в названии модуля памяти значения 128 подчеркивает количество хранимых в нем образов символов. Откройте файл и изучите его содержимое. Поместите в отчет фрагмент кода с описанием интерфейса модуля, то есть его входных и выходных сигналов. В списке параметров модуля памяти найдите имя файла, используемого для его инициализации. Именно в нём и содержатся изображения, формируемых на экране VGA символов.

  4. Найдите этот файл, он называется altera_up_video_char_mode_rom_128.mif, откройте его и сопоставьте его бинарное содержимое с видом выводимых на экран VGA символов. Поместите в отчет бинарное представление трех латинских букв вашей фамилии, изображения которых не совпадают с русскими буквами. Например, для фамилии Ефремов такими символами являются f, r, m, v.

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

Часть 4. Редактирование шрифта. Модификация процессорной системы DE 2-115 Media Computer

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

  1. Создайте новую версию проекта с именем….. Для этого …..

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

  3. Внесите изменения и в описание самого модуля постоянной памяти знакогенератора (altera_up_video_128_character_rom.v), вызванные модификацией файла его инициализации. Измените в списке параметров этого модуля название прежнего файла на новое, назначенное при выполнении предыдущего пункта задания.

  4. Выполните компиляцию проекта. Она займет некоторое время, и после её завершения будет создан конфигурационный файл с отметкой time-limited, отражающей его временный статус. Используйте именно этот файл для прошивки кристалла ПЛИС учебного стенда.

  5. Перед выполнением этой части задания убедитесь, что в данный момент времени не выполняется никакая программа в процессорной системе. Используйте для этого приложение IMP. Если окажется, что программа выполняется, то завершите её выполнение, используя команду Stop из меню Actions. Для перехода к окну программатора выполните в меню Tools команду Programmer. В открывшемся окне убедитесь, что в качестве программатора используется USB Blaster. В противном случае воспользуйтесь кнопкой Hadware Setup… для выбора именно этого программатора.

  6. Убедитесь, что в качестве файла прошивки используется созданный в пункте 4 файл. Нажмите кнопку Start и наблюдайте в окне Progress за процессом загрузки конфигурационного файла.

  7. После успешной загрузки конфигурационного файла в кристалл ПЛИС, в окне Progress появится значение 100%, а само окно станет зеленым. Также на экране монитора инструментального ПК появится всплывающее окно, напоминающее о временном статусе конфигурационного файла. Чтобы продолжить работать с модифицированной процессорной системой, не закрывайте это окно. Можно его свернуть или переместить в другое место экрана ПК.

  8. Вернитесь в приложение IMP и повторно выполните программу из пункта 1 третьей части задания. То есть запустите её в автоматическом режиме. Убедитесь, что теперь на экран VGA вместо трех символов латиницы выводятся русские буквы. Включите в отчет снимок экрана с выделенными позициями измененных символов.

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

Задача русификации процессорной системы DE 2-115 Media Computer

Как было установлено в предыдущей части работы, в оригинальных процессорных системах DE 2-70 и DE 2-115 используется только семь разрядов для кодирования символов, что препятствует работе с русскоязычными текстовыми строками. Следует напомнить, что символьный буфер в процессорной системе полностью реализован на ресурсах блочной памяти внутри кристалла (onchip memory). Ранее, при выполнении четвертой лабораторной работы по дисциплине ОЭВМ выполнялось тестирование этого компонента ОП, в результате которого и был подтвержден факт, что эта память имеет семибитную организацию.

С целью русификации процессорной системы студентам предлагается выполнить её модификацию. Для кодирования русских символов потребуется восьмиразрядный код, следовательно, надо изменить модули: atera_up_video_char_mode_rom_128.mif и nios_system_VGA_Char_Buffer.

Как уже было сказано выше, первый из них представляет собой ПЗУ знакогенератора, построенное на ресурсах блочной памяти внутри кристалла. Для добавления в него символов кириллицы его объем надо увеличить вдвое, и, следовательно, использовать дополнительный восьмой адресный вход. Теперь ПЗУ знакогенератора будет хранить изображения 256 символов. Так как каждый символ задается матрицей 88 пикселей, то есть восьмью байтами, то теперь общий объем памяти знакогенератора составит 2568*8 = 16384 бит. По этой причине потребуется создать и новый, расширенный файл инициализации ПЗУ знакогенератора.

Второй модуль описывает символьный буфер, также реализованный внутри кристалла ПЛИС на ресурсах блочной памяти. Теперь этот буфер надо организовать как восьмиразрядное ОЗУ с произвольным доступом.

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

Часть 5. Экспериментальное определение кодов символов русского алфавита в кодировках UTF -8 и ANSI

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

Текстовая строка содержит все буквы русского алфавита, причем как прописные, так и строчные. После компиляции и загрузки секции данных в память процессорной системы найдите в статической памяти текстовую строку с буквами русского алфавита. Используйте вкладку Memory и побайтовое отображение ОП. Наблюдайте коды отдельных букв кириллицы, поместите их в заранее подготовленную таблицу. Рассмотрите варианты использования в текстовом редакторе, в котором создается или редактируется исходный файл с буквами русского алфавита, кодировок UTF-8 и ANSI. Сделайте вывод о том, какую из них следует в дальнейшем использовать для корректной работы с символами кириллицы.

Часть 6. Модификация процессорной системы с целью её русификации

  1. В приложении приводится содержимое обновленного файла инициализации ПЗУ знакогенератора на 256 символов. Число 256 в названии файла подчеркивает эту особенность. Вторая половина файла содержит все заглавные буквы кириллицы. Найдите в файле битовые наборы, задающие изображения 3 символов из пункта 3.4. и сравните их с созданными самостоятельно символами. Добавьте в этот файл изображения строчных букв кириллицы для тех символов, которые входят в вашу фамилию и сохраните его с новым именем, с привязкой к вашей фамилии.

  2. Используя приложение QUARTUS II создайте новую версию процессорной системы. Выполните дополнительное редактирование её двух компонентов - модуля ПЗУ знакогенератора и символьного буфера VGA с целью увеличения их разрядности до восьми бит. Используйте для ПЗУ обновленного знакогенератора файл с расширенной таблицей символов, подготовленный в предыдущем пункте задания.

  3. Скомпилируйте проект процессорной системы и загрузите конфигурационный файл в кристалл ПЛИС учебного стенда.

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

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

Часть 7. Вывод линий на экран монитора

  1. Запустите программу «part_4_point_1.c» и экспериментально определите выполняемые ею действия. Меняйте состояние переключателей и наблюдайте работу программы. Удостоверьтесь в правильности работы программы, задавая на переключателях различные координаты начала и конца линии, меняйте цвет линии.

  2. Используя программу последовательно изобразите на экране:

    • Сквозную горизонтальную линию, проходящую через центр экрана;
    • Сквозную вертикальную линию, проходящую через центр экрана;
    • Линию под углом 45 градусов, исходящую из одного из углов экрана и проходящую через весь экран.

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

  1. Выполните редактирование программы, удалив комментарии с функции draw_circle (). Наблюдайте работу этой функции, изменяя её параметры. Делайте снимки экрана и помещайте их в отчет.

  2. Используя функции из программы «part_4_point_1.c» создайте программу, в которой выводится заданная фигура в центре экрана в соответствии с заданным в таблице 3 вариантом. Числовое значение в таблице задает линейный размер фигуры в пикселях. Покажите результат работы программы преподавателю. Сделайте снимок экрана, подтверждающий успешное выполнение программы и поместите его в отчетные материалы.

Таблица 3. Варианты фигур

ВариантВыводимая на экран VGA фигура
1Квадрат (со стороной 100)
2Равносторонний треугольник (со стороной 100)
3Прямоугольник (со сторонами 50 и 100)
4Равнобедренный прямоугольный треугольник (с гипотенузой 100)
5Ромб (со сторонами 100)
6Окружность с перпендикулярными диаметрами внутри (радиус 50)
7Четверть круга (радиус 50)
8Полукруг (с радиусом 50)
9Квадрат, вписанный в окружность (радиусом 50)
  1. Используя программу рисования прямых линий создайте свою программу, которая выведет прямую линию, подчеркивающую выведенную в пункте 6.5 текстовую строку с вашей фамилией заданным способом, начиная с указанной позиции. Можно усложнить задание. Например, добавить линию над текстовой строкой, или даже рамку в виде прямоугольника.

Часть 8. Анимация

  1. Запустите программу «part_5_point_1.c», экспериментально определите выполняемые ею действия.

  2. Изучите код программы. Модернизируйте программу таким образом, чтобы к реализованному в программе перемещению добавить перемещение в заданном направлении в соответствии со своим вариантом (Таблица 4). Привяжите перемещение в заданном направлении к нажатию любой свободной кнопки. Добавьте описание наблюдаемого результата в отчет.

Таблица 4. Варианты перемещения

ВариантПеремещениеНачальные координаты (x; y)
1Влево(130; 162)
2Вниз(142; 155)
3Вверх(99; 120)
4Влево(138; 127)
5Вниз(133; 151)
6Вверх(122; 131)
7Влево(96; 118)
8Вниз(161; 147)
9Вверх(138; 149)
  1. Модифицируйте программу из пункта 1 части 2. Реализуйте перемещение прямой линии на экране при нажатии кнопок на стенде. При нажатии кнопки KEY3 прямая сдвигается на 1 позицию вверх, кнопки KEY2 – вниз, кнопки KEY1 – влево, кнопки KEY1 и установленном в верхнее положение переключателе SW0 – вправо. При достижении границ экрана линия продолжает выводиться с другой стороны экрана. При нажатии кнопки выполняется заполнение всего экрана цветом фона (очистка), затем прямая выводится в новой позиции. Используемый в процессорной системе VGA-контроллер обеспечивает перерисовку изображения на экране каждую 1/60 секунды. Поэтому, после вывода изображения, необходимо записать значение 1 в буферный регистр и ожидать сброса нулевого бита регистра управления.

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

Координатная плоскость

Координаты вращаемой точки рассчитываются по формулам:

x=x×cosαy×sinαy=x×sinα+y×cosα\begin{aligned} x' &= x \times \cos \alpha - y \times \sin \alpha \\ y' &= x \times \sin \alpha + y \times \cos \alpha \end{aligned}

Для возможности использования тригонометрических функций необходимо подключить библиотеку math.h, а также в меню Program Settings в поле Additional Linker Flags указать ключ -lm.

Часть 9. Вывод на экран монитора трехмерных изображений с использованием перспективной проекции

  1. Проанализируйте программу part_5_point_1.c, выполняющую рисование на экране монитора перспективной проекции прямой линии и ее вращение вокруг оси Y. Поворот осуществляется на 2 градуса в каждом шаге цикла. Для перевода координат точки из трехмерной системы координат в двумерную систему координат необходимо выполнить следующие преобразования:
x=x×dz+dy=y×dz+d\begin{aligned} x' &= \frac{x \times d}{z + d} \\ y' &= \frac{y \times d}{z + d} \end{aligned}
  1. Напишите программу, выполняющую рисование на экране монитора перспективной проекции правильной пирамиды, в основании которой лежит квадрат. Размеры пирамиды задайте по своему усмотрению.

  2. Модифицируйте программу из предыдущего пункта таким образом, чтобы выполнялось вращение пирамиды. Если переключатели SW1 и SW0 установлены в нижнем положении, то вращение должно осуществляться вокруг оси Х. Если переключатель SW0 установлен в верхнее положение, то вращение выполняется вокруг оси Y. Если в верхнее положение установлен переключатель SW1, то вращение пирамиды происходит вокруг оси Z. Для поворота фигуры в перспективной проекции используются формулы:

Поворот вокруг оси Х:

x=xy=y×cosαz×sinαz=y×sinα+z×cosα\begin{aligned} x' &= x \\ y' &= y \times \cos \alpha - z \times \sin \alpha \\ z' &= y \times \sin \alpha + z \times \cos \alpha \end{aligned}

Поворот вокруг оси Y:

x=x×cosα+z×sinαy=yz=z×cosαx×sinα\begin{aligned} x' &= x \times \cos \alpha + z \times \sin \alpha \\ y' &= y \\ z' &= z \times \cos \alpha - x \times \sin \alpha \end{aligned}

Поворот вокруг оси Z:

x=x×cosαy×sinαy=x×sinα+y×cosαz=z\begin{aligned} x' &= x \times \cos \alpha - y \times \sin \alpha \\ y' &= x \times \sin \alpha + y \times \cos \alpha \\ z' &= z \end{aligned}

Часть 10. Использование двойной буферизации для удаления мерцания изображения

Модифицируйте программу из пункта 3 части 4. Реализуйте использование двойной буферизации для исключения мерцания изображения при вращении пирамиды. Необходимо использовать 2 буфера – видимый и невидимый буферы. Изображение рисуется в невидимом буфере. Когда рисование окончено, видимый и невидимый буфер меняются местами.

3. Отчетные материалы

Отчет должен включать в себя:

  1. Цель работы.
  2. Краткие сведения из теоретической части.
  3. Информацию по выполнению пунктов задания.
  4. Краткое заключение.

Приложения

ASCII - коды символов

Таблица ASCII кодов

Чеклист выполнения

  • Работа выполнена
  • Отчет подготовлен