Урок 2 - Прості примітиви - The Delphi

Минулого уроку ми розглянули ініціалізацію OpenGL. Цей урок буде присвячений малюванню та розфарбовуванню простих примітивів: точка, лінія, трикутник та квадрат. У нашому прикладі змінимо формат пікселя.

Після рядка Допишемо: Ми повідомили системі, що використовуватиметься подвійна буферизація. Це потрібно щоб зображення не мерехтіло.

У процедурі створення Форми напишіть: Далі в обробнику подіїForm1 OnResizeстворимо процедуру перемальовування вікна. ФункціяglFrustumмає 6 параметрів, перші 4 з них, це межі відсікання: верхня, права, нижня, ліва. Останні 2 параметри – це передня та задня межа відсікання.

ФункціяgluLookAtмає 9 параметрів, перші 3 з них - позиція спостерігача (x, y, z), наступні 3 параметри - точка спостереження (x, y, z) та останні 3 параметри - вектор верха.

InvalidateRect (Handle,nil,False); перемальовує форму набагато швидше, ніж Form1.Repaint.

Для того, щоб наше вікно оновлювалося, потрібно викликати процедуруFormResizeдо відображення примітивів. Все, з приготуванням ми закінчили, Тепер приступимо до малювання примітивів і почнемо ми з точки. Усі фігури малюються в логічних дужкахglBegin(param); таglEnd; де param - тип примітиву, що малюється.

glBegin()може мати один із таких параметрів:

  • GL_PONTS- точка
  • GL_LINES- лінія
  • GL_TRIANGLES- трикутник
  • GL_QUADS- квадрат
  • GL_POLYGON– багатокутник
Кожна вершина задається функцієюglVertex3f(x, y ,z)і може мати вигляд:glVertex3fv(@масив),glVertex3i(x, y ,z)з параметрами типу integer.

Тепер намалюємо крапку, у процедуріFormPaintпісля очищення буфера кольору запишемо наступний код:

урок
Ось ми й отримали дуже велику точку в 20 пікселів :). Тепер змінимо колір точки функцієюglColor3f(R,G,B); Цю функцію слід викликати перед завданням позиції кожної вершини.

Розфарбуємо у червоний колір:

урок
Точку ми намалювали. Тепер намалюємо лінію. Робиться це так само як і точку. Т.к. лінія складається з 2 вершин, то функцію glVertex3f(x, y ,z) будемо викликати 2 рази: Допишемо цей код і отримаємо:

урок
OpenGL робить плавне перетікання кольору між вершинами. Навчається досить красиво.

Бракує квадрата і трикутника. Давайте намалюємо!

примітиви
Начебто вийшло.

У прикладі даного уроку я зробив невеликий додаток: при натисканні стрілки вправо вся система координат повертається вправо функцією glRotatef(кут, x, y, z) де x, y, z – координати осі повороту, а при натисканні на стрілку вліво, то вся система координат повертається вліво.

Можете поекспериментувати та намалювати щось інше.

У наступному уроці ми будемо працювати з освітленням і намалюємо об'ємні геометричні фігури з світлом, що падає на них.

Джерело: www.thedelphi.ruАвтор: Клящицький ВіталійОпубліковано: 13 Травня 2012Переглядів: