Opengl і delphi на практиці

Будь-яка теорія хороша, якщо вона може бути реалізована на Delphi :-). Тому пропоную не відкладаючи в довгий ящик написати першу програму на OpenGL - а потім, окрилений успіхом, повернутися до теорії і як слід простудіювати всі книги і сайти по сабжу, щоб вже стати справжніми монстрами тривимірного моделювання.

Для початку доведеться виконати підготовчу роботу:

  • налаштувати формат пікселів з урахуванням інформації, що відображається;
  • створити контекст OpenGL і підготувати сам движок OpenGL до роботи.

Формат пікселів зручно винести в окрему процедуру, яку ми оформимо наступним чином:

Тут при заповненні структури TPixelFormatDescriptor ми задаємо параметри майбутнього графічного відображення, в тому числі кількість колірних біт, а також тип пікселів (iPixelType). Ми також ставимо прапори, які, як видно з назви, вказують, що наша програма буде підтримувати OpenGL, а також що ми будемо малювати у вікні і використовувати подвійну буферизацію (параметр, необхідний для відтворення рухомих об'єктів).

Далі за допомогою виклику ChoosePixelFormat система вибирає відповідний формат пікселя - і ми присвоюємо його (через SetPixelFormat) нашого вікна.

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

Як бачимо, спочатку ми задали для нашої графіки необхідний формат пікселів. Тепер за допомогою функції wglCreateContext створюємо OpenGL-контекст, а згодом робимо його поточним контекстом. Далі, використовуючи вже універсальні функції **, зробимо настройку "світу", який будемо створювати. Для цього через glClearColor очистимо контекст і заповнимо її 60-відсотковим чорним кольором. Далі виберемо матрицю проекцій, яка визначає, як будуть проектуватися тривимірні об'єкти на площину екрану (в віконні координати) і через glLoadIdentity встановимо одиничну матрицю і задамо кордону плану в "світових координатах" за допомогою виклику glFrustum. Після чого завантажимо модельно видову матрицю і зробимо її зміщення (glTranslatef).

Що будемо малювати

Звичайно, можна було намалювати просту піраміду або ж куб. Але ми зробимо більше - намалюємо "визнання в любові" ** (рис. 1). Спеціально для цього методом "наукового перебору" була розроблена модель, що описує відповідну криву:

Залишається тільки перевести її з мови математики на нормальний людський.

Opengl і delphi на практиці
Підготовку сцени почнемо з підключення різних додаткових функцій, без яких подальша робота неможлива. Ці функції прописані в методі BeginPaint, а також в методі FormResize (щоб при зміні розміру форми відповідно змінювався розмір об'єкта). Для цього використовуємо функцію glEnable з відповідними параметрами.

Далі в FormPaint використовуємо підготовлені заздалегідь методи DrawFace і DrawElement (див. Лістинг нижче) для відтворення згаданого об'єкта. А для додання йому ще більшої "спеки" використовуємо можливості OpenGL з висвітлення сцени.

З точки зору складності освоєння OpenGL можна порівняти з іншими подібними бібліотеками. Так що з одного боку немає різниці, в чому розбиратися і що вивчати. Але з точки зору розумного підходу будь-який проект тривимірної графіки повинен як мінімум підтримувати OpenGL в якості однієї з опцій. Адже серйозні речі вважаються і візуалізуються, як правило, під Unix / IRIX / Linux / FreeBSD, і в той же час було б неправильно ігнорувати користувачів Windows. Так що OpenGL якраз і є тією універсальною мовою і спільним знаменником, що дозволяє вашим додаткам вільно мігрувати з однієї платформи на іншу

Схожі статті