Я певний час навчаю себе бібліотекою OpenGL і хочу почати робити гру. Однак, для більш легкого вступу, я хочу почати з чогось 2D, наприклад, гри в стилі Pokemon.
Це хороший план, або OpenGL створений спеціально для 3D?
Я певний час навчаю себе бібліотекою OpenGL і хочу почати робити гру. Однак, для більш легкого вступу, я хочу почати з чогось 2D, наприклад, гри в стилі Pokemon.
Це хороший план, або OpenGL створений спеціально для 3D?
Відповіді:
OpenGL цілком підходить для 2D ігор. Хоча він зазвичай використовується для 3D-програм, однаковий функціонал можна використовувати і для 2D-ігор. Тобто все, що ви можете зробити з 3D OpenGL, буде застосовано до "2D" OpenGL.
Деякі додаткові відомості можна знайти в цьому місці .
2D OpenGL досягається таким же чином, як і 3D OpenGL. 2D OpenGL - це лише застосування техніки, тобто виведення сцени на плоску площину, а потім використання орфографічної проекції замість перспективної проекції, яка, в залежності від вашої установки, може спотворити сцену.
Приклад:
(а) - це сцена в ортографічній проекції. (б) - це та сама сцена, яка використовує перспективну проекцію. У 2D грі це може спричинити неправильне розташування спрайтів, якщо їх глибина зміниться (що, в залежності від того, як ви розвиваєтесь, може бути). Використання перспективної проекції також ускладнює вирівнювання речей у координатах екрана.
Крім того, OpenGL приносить багато, багато, багато переваг. Перш за все, апаратне прискорення - це величезний плюс. Існує також набагато тонший ступінь контролю над тим, що робить відеокарта та як вона працює, що дозволяє оптимізувати конкретні випадки
OpenGL, як зазначено в імені, є графічною бібліотекою. Хоча він розроблений з урахуванням 3d, у бібліотеці немає твердо кодованих припущень, що ви будете використовувати 3d. Крім того, завдяки 3D-можливостям, кілька речей, які було б важко зробити при суворому підході, є тривіальними. Приклади:
Це лише кілька переваг, які надходять з моєї голови, я думаю, є кілька інших.
Хоча OpenGL - це 3D API, ви все одно можете використовувати його для створення 2D ігор. Ви можете підробити 2D-середовище в 3D за допомогою різних методик, таких як протиставлення даних площині.
Однак у фактичному API існує обмежена підтримка для очевидного способу (наприклад, немає функції "включити 2D режим"). Способи їх моделювання (які ви можете знайти в багатьох навчальних посібниках в Інтернеті) можуть бути важко зрозуміти без певного розуміння тривимірного трубопроводу, який фактично використовується під кришкою.
Здається, ви деякий час дивитесь на OpenGL, і, ймовірно, добре розумієте ці основи. Однак, якщо ви відчуваєте себе хитким, ви можете почати зі своєї гри, використовуючи 2D-бібліотеку, побудовану поверх OpenGL, наприклад, cocos2d . Це дасть вам досвід роботи з тим, як зазвичай мають виглядати 2D API, і все-таки отримує переваги апаратного прискореного тривимірного тривимірного інтерфейсу, якщо ви відчуваєте, що не зовсім готові вирішити цю справу самостійно.
Зараз у мене є великий досвід програмування OpenGl, і можу сказати, що це біль. У минулому, коли я почав програмувати, я був дуже продуктивним у таких простих умовах, як BlitzBasic. Тоді я почав переходити до наступного кроку з вивченням C ++ та OpenGl. І коли у вас не буде хорошого вчителя чи людей, щоб запитати, ви назавжди забіжете на чорний екран. Найбільша проблема - державне пекло OpenGl. Є тони вимикачів, які можна поміняти, щоб змінити стан opengl. А деякі вимикачі залежать від інших вимикачів. наприклад, glGet (GL_TEXTURE_BINDING_2D) залежить від glGet (GL_ACTIVE_TEXTURE). І документація, який стан залежить від того, який інший стан не найкращий. Багато операцій, таких як завантаження текстури, вимагають змінити цей стан, що дуже часто призводить до злому іншого коду, який вимагає старого стану. І тоді виникає ця проблема, що OpenGl як поведінка залежить від реалізації, так що ваша програма працює на вашій машині, а на іншій машині все, що ви бачите, є чорним. Все, що ви можете зробити тут - це здогадуватися, що не так у ваших 10000 рядках коду. Тож якщо вам подобається розчарування, то так, використовуйте OpenGl для двовимірних речей. Для всіх інших людей, не робіть цього, якщо вам це не потрібно. Ви можете бути продуктивними в OpenGl, але це коштуватиме ваших витрат часу та нервів. Напевно більше, ніж ви хочете витратити. Ви можете бути продуктивними в OpenGl, але це коштуватиме ваших витрат часу та нервів. Напевно більше, ніж ви хочете витратити. Ви можете бути продуктивними в OpenGl, але це коштуватиме ваших витрат часу та нервів. Напевно більше, ніж ви хочете витратити.
Unity3D використовує OpenGL, а я використовую його для 2D та 2.5D платформерів. Unity3D, по суті, є 3D-ігровим двигуном, але також використовується і для 2D та 2.5D ігор. Ви можете мати площини x, y, z і обмежувати лише рух або обертання на 2 з цих площин, створюючи 2D атмосферу, по суті, у 3D-світі.