Если вы чувствуете, что программирование слишком сухо и не более чем отдавать команды бессердечному терминалу, который всегда готов выдать вам ошибку, добро пожаловать в Компьютерная графика, тема, которая мотивирует вас решать графические и практические вопросы, а не понимание теоретических или педагогических требований.

Если вы не можете сделать это хорошо, вы можете хотя бы сделать так, чтобы он хорошо выглядел. - Билл Гейтс

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

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

Зачем изучать компьютерную графику?

От «Pong», первой компьютерной игры Atari (1972 г.) до «Uncharted 4» (2016 г.), компьютерная графика прошла долгий путь.

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

Пиксель

Пиксель (не Google Phone) - это наименьший контролируемый элемент изображения, представленного на экране. Чтобы нарисовать пиксель на экране, мы будем использовать библиотеку graphics.h для C / C ++.

Шаги по настройке graphics.h в windows

Приведенная ниже реализация показывает, как нанести пиксель на экран:

#include<graphics.h>
 
int main()
{
   int gd = DETECT, gm;
   initgraph(&gd, &gm, "C:\\TC\\BGI");
 
   putpixel(100, 100, WHITE);
 
   getch();
   closegraph();
   return 0;
}

Разберем этот код -

initgraph() инициализирует графическую систему, загружая графический драйвер с диска и переводя систему в графический режим. Точно так же все остальные строки, кроме putpixel(), - это просто шаблон, который вы будете использовать во всех программах CG. putpixel() отображает точку в (100, 100) белым цветом.

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

Хм. Все идет нормально. Мы нанесли наш первый пиксель на экран. Мы видели, что передача значений x и y на putpixel() графики, которые указывают для нас. Итак, давайте попробуем вызвать эту функцию еще несколько раз, чтобы получить несколько очков. Фактически, позвольте нам использовать для этого цикл for. Мы создаем переменную с именем pos_x и перебираем ее от 100 до 200. Таким образом, код (кроме шаблона) обновляется следующим образом:

for(int pos_x = 100; pos_x <= 200; pos_x++)
{
   putpixel(pos_x, 100, WHITE);
}

Итак, что делает этот цикл? Он отображает точки (100, 100), (101, 100), (102, 100)…. до (200, 100). Это интересно, потому что это строит прямую горизонтальную линию от (100, 100) до (200, 100). Используя простой цикл for, мы смогли нарисовать линию на экране. Более того, добавление функции delay() после putpixel() создает анимацию рисования линии.

for(int pos_x = 100; pos_x <= 200; pos_x++)
{
   putpixel(pos_x, 100, WHITE);
   delay(200); // Adds a delay of 200ms for every iteration
}

Упражнение: попробуйте нарисовать вертикальную линию.

Что ж, мы точно нарисовали линию. Но это был особый случай. Как построить любую линию с учетом ее конечных точек? Что делать, если линия наклонена под углом 30 градусов? Как нам удовлетворить все эти потребности? Теперь вы полностью готовы понять один из первых алгоритмов, с которыми вы столкнетесь в компьютерной графике; Цифровой дифференциальный анализатор (DDA) и алгоритм рисования линий Брезенхема. Вместо того, чтобы разбираться в алгоритме, попытайтесь понять, почему алгоритм был написан именно таким, а не каким-либо другим способом. Это поможет вам лучше понять это.