nbsp OpenGL + Delphi
примітивна графіка
Примітивна графіка - це не означає, що вона буде слабкою або жахливою. Це означає, що складні об'єкти складається з великої кількості простих. Сьогодні я постараюся розглянути якомога більше примітивів, за допомогою яких ти зможеш будувати складні сцени. Приготуйся, урок буде великим, але дуже пізнавальним. Для егё розуміння тобі доведеться згадати шкільний курс геометрії (досить того, що ти проходив до 9-го класу).
Взагалі-то, вся OpenGL графіка побудована на примітивах. Найпримітивнішим є Vertex (точка). З нею ми вже познайомилися і вміємо малювати. Лінії і квадрати я теж опускаю, бо ми вже дуже багато з ними працювали. Єдине, що дійсно буде для тебе новим, так це трикутники. Я чомусь досі їх не використав, хоча це основа OpenGL. Вся графіка в цій бібліотеці прораховується і малюється за допомогою трикутників.
Виділи хвилинку і розглянемо малюнок 1. Тут представлені різні фігури, але всі вони складаються з примітивів. Верхні фігури зроблені з ліній, середні з трикутників і нижні з квадратів.
Рис 1. Примітиви
Давай розглянемо кожен примітив детальніше, але для початку поглянемо на нову процедуру:
Не треба багато розуму, щоб здогадатися, що ця процедура задає товщину лінії. Вона впливає тільки на малювання ліній, на квадрати і трикутники вона не впливає.
Тепер розглянемо перший примітив з двох ліній:
glBegin з параметром GL_LINES відкриває набір ліній. Я тут малюю дві паралельні лінії різного кольору, а ти можеш намалювати одну або навіть 10. Між glBegin (GL_LINES); і glEnd має бути парна кількість вершин. Якщо буде непарне, то остання буде просто відкидатися і не вплине на сцену.
glBegin з параметром GL_LINE_LOOP відкриває набір замкнутих ліній. Цей примітив дуже схожий на попередній з однією лише різницею - остання вершина замкнеться з першої.
тепер перейдемо до трикутниках. Для наочності дивись на примітиви розташовані на малюнку в центрі.
glBegin з параметром GL_TRIANGLES малює трикутники. Кількість вершин має бути кратне трьом, зайві вершини відкидаються.
glBegin з параметром GL_TRIANGLES_STRIP малює трикутники з замкнутими вершинами. Остання вершина першого трикутника є першою вершиною другого трикутника.
glBegin з параметром GL_TRIANGLE_FAN малює трикутники з замкнутими гранями. Остання грань першого трикутника є першою межею другого трикутника. Кількість вершин може бути будь-яким (не менш трьох), тому що остання грань зберігає в собі вже дві точки, і додавши ще одну виходить новий трикутник.
Тепер ми переходимо до квадратах. Тут я буду писати скорочено для економії місця. Ти і так вже має все вистачати на льоту.
Малює квадрати. Кількість вершин повинна бути кратна 4-м.
Малює квадрати із загальною межею. Остання грань першого квадрата є першою для другого. Кількість вершин має бути більше або дорівнює 4-м і кратно 2-м.
Малює полігон. Це просто набір вершин об'єднаних між собою. Чесно сказати, я не знав який краще приклад привести. Мій приклад не дуже вдалий, але спробуй сам пограти з вершинами, посувай їх в різні боки і подивися на результат.
Вихідні тексти прикладу забирай тут Заголовки візьми на моїй сторінці в розділі "Корисне".