Чи OpenGL підходить для 2D ігор?


44

Я певний час навчаю себе бібліотекою OpenGL і хочу почати робити гру. Однак, для більш легкого вступу, я хочу почати з чогось 2D, наприклад, гри в стилі Pokemon.

Це хороший план, або OpenGL створений спеціально для 3D?



Я думаю, що одна з переваг використання OpenGL для 2D полягає в тому, що ви отримуєте перевагу від шейдерів. Вони можуть бути корисними для досягнення спеціальних ефектів. Ще одна перевага полягає в тому, що якщо ви вже знаєте OpenGL, ви вже будете знайомі з API.
Лисол

Відповіді:


44

OpenGL цілком підходить для 2D ігор. Хоча він зазвичай використовується для 3D-програм, однаковий функціонал можна використовувати і для 2D-ігор. Тобто все, що ви можете зробити з 3D OpenGL, буде застосовано до "2D" OpenGL.

Деякі додаткові відомості можна знайти в цьому місці .

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

Приклад:

Орто проти перспективи

(а) - це сцена в ортографічній проекції. (б) - це та сама сцена, яка використовує перспективну проекцію. У 2D грі це може спричинити неправильне розташування спрайтів, якщо їх глибина зміниться (що, в залежності від того, як ви розвиваєтесь, може бути). Використання перспективної проекції також ускладнює вирівнювання речей у координатах екрана.

Крім того, OpenGL приносить багато, багато, багато переваг. Перш за все, апаратне прискорення - це величезний плюс. Існує також набагато тонший ступінь контролю над тим, що робить відеокарта та як вона працює, що дозволяє оптимізувати конкретні випадки


Дуже дякую! Я просто хотів підтвердження, що це буде добре робити.
w4etwetewtwet

4
Якщо у вас є здатність та інтерес використовувати OpenGL для 2D, це принесе вам безліч нагород, які може дати тільки OpenGL. Яскрава продуктивність, сумісність між платформами ... Подумайте про це так. Майже всі інші варіанти для 2D все одно будуватимуться на версії OpenGL. Це прекрасна можливість вирізати деяких «посередників»
Стівен Лу

2
@StevenLu і не кажучи вже про те, що трохи більше справжнього програміста
пережив

Чудово читати! Дякуємо, що зв’язали це. Так: кодування 2D за допомогою прямого OpenGL - це ще більший замах , тому вам слід це робити.
Стівен Лу

1
Ви повинні надати більше інформації на цю відповідь, а не просто посилання. Можливо, поясніть, чому GL працює на 2D (ортографічні погляди) та які переваги приносить (апаратне прискорення, шейдерні ефекти).
Шон Міддлідч

22

OpenGL, як зазначено в імені, є графічною бібліотекою. Хоча він розроблений з урахуванням 3d, у бібліотеці немає твердо кодованих припущень, що ви будете використовувати 3d. Крім того, завдяки 3D-можливостям, кілька речей, які було б важко зробити при суворому підході, є тривіальними. Приклади:

  • Сортування Z спрощується за допомогою 3d координат буфера глибини (хоча слідкуйте за прозорістю)
  • Обертання і масштабування спрайтів в основному безкоштовно, оскільки ви використовуєте текстуровані квадроцикли, незалежні від роздільної здатності
  • якщо ви готові обмежити себе відеокартами, що підтримують OpenGL 2.0, ви можете скористатися шейдерами, що значно спростить написання спеціальних ефектів (розмиття, ефекти частинок, маніпулювання зображеннями, заміна кольорів) - не кажучи вже про те, що це буде набагато швидше, ніж це зроблено на стороні процесора

Це лише кілька переваг, які надходять з моєї голови, я думаю, є кілька інших.


3
Будь ласка, обмежтеся відеокартами, здатними на OpenGL 2.0 (або більше), OpenGL 2.0 був випущений у 2004 році, навіть це досить застаріло.
Відрізаний

@Slicedpan, на жаль, деякі ноутбуки / нетбуки все ще поставляються з картами Intel, які мають підтримку GL 1.4 max - особисто я вирішив їх вирвати, але деякі люди (особливо при створенні простих ігор), можливо, захочуть їх підтримати.
Kornel Kisielewicz

16

Хоча OpenGL - це 3D API, ви все одно можете використовувати його для створення 2D ігор. Ви можете підробити 2D-середовище в 3D за допомогою різних методик, таких як протиставлення даних площині.

Однак у фактичному API існує обмежена підтримка для очевидного способу (наприклад, немає функції "включити 2D режим"). Способи їх моделювання (які ви можете знайти в багатьох навчальних посібниках в Інтернеті) можуть бути важко зрозуміти без певного розуміння тривимірного трубопроводу, який фактично використовується під кришкою.

Здається, ви деякий час дивитесь на OpenGL, і, ймовірно, добре розумієте ці основи. Однак, якщо ви відчуваєте себе хитким, ви можете почати зі своєї гри, використовуючи 2D-бібліотеку, побудовану поверх OpenGL, наприклад, cocos2d . Це дасть вам досвід роботи з тим, як зазвичай мають виглядати 2D API, і все-таки отримує переваги апаратного прискореного тривимірного тривимірного інтерфейсу, якщо ви відчуваєте, що не зовсім готові вирішити цю справу самостійно.



5

Багато 2d графічних бібліотек, таких як SDL або SFML, використовують прискорення апаратного забезпечення OpenGL. Це дає перевагу продуктивності OpenGL, але резюмує неприємні деталі низького рівня за значно простішим API.


0

Зараз у мене є великий досвід програмування OpenGl, і можу сказати, що це біль. У минулому, коли я почав програмувати, я був дуже продуктивним у таких простих умовах, як BlitzBasic. Тоді я почав переходити до наступного кроку з вивченням C ++ та OpenGl. І коли у вас не буде хорошого вчителя чи людей, щоб запитати, ви назавжди забіжете на чорний екран. Найбільша проблема - державне пекло OpenGl. Є тони вимикачів, які можна поміняти, щоб змінити стан opengl. А деякі вимикачі залежать від інших вимикачів. наприклад, glGet (GL_TEXTURE_BINDING_2D) залежить від glGet (GL_ACTIVE_TEXTURE). І документація, який стан залежить від того, який інший стан не найкращий. Багато операцій, таких як завантаження текстури, вимагають змінити цей стан, що дуже часто призводить до злому іншого коду, який вимагає старого стану. І тоді виникає ця проблема, що OpenGl як поведінка залежить від реалізації, так що ваша програма працює на вашій машині, а на іншій машині все, що ви бачите, є чорним. Все, що ви можете зробити тут - це здогадуватися, що не так у ваших 10000 рядках коду. Тож якщо вам подобається розчарування, то так, використовуйте OpenGl для двовимірних речей. Для всіх інших людей, не робіть цього, якщо вам це не потрібно. Ви можете бути продуктивними в OpenGl, але це коштуватиме ваших витрат часу та нервів. Напевно більше, ніж ви хочете витратити. Ви можете бути продуктивними в OpenGl, але це коштуватиме ваших витрат часу та нервів. Напевно більше, ніж ви хочете витратити. Ви можете бути продуктивними в OpenGl, але це коштуватиме ваших витрат часу та нервів. Напевно більше, ніж ви хочете витратити.


-2

Unity3D використовує OpenGL, а я використовую його для 2D та 2.5D платформерів. Unity3D, по суті, є 3D-ігровим двигуном, але також використовується і для 2D та 2.5D ігор. Ви можете мати площини x, y, z і обмежувати лише рух або обертання на 2 з цих площин, створюючи 2D атмосферу, по суті, у 3D-світі.


Чудово, мій перший звук. Радий бачити, що у Гамедева теж є ненависники.
ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ Apollo

1
Я думаю, що ілюстрування точки через приклади реального світу нахмуриться. Дуже професійний.
ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ Apollo

7
Аміт, низості не вказують на "ненависників". Громадяни - це просто спосіб громади висловити свою думку щодо питань та відповідей. Це не особисто для вас, тому намагайтеся не сприймати це таким чином. Я погоджуюся з тим, що низовий користувач повинен був прокоментувати причину пониження, оскільки ви не знаєте, як поліпшити відповідь без зворотного зв'язку. Я скажу вам, чому я вважаю, що це було знято. Тільки тому, що одна людина використовує OpenGL для 2D ігор, зовсім не означає, що це доречно. Вам також потрібно навести причини, чому це доречно.
MichaelHouse

2
Так, не впевнений, чому люди зводяться на поступки; біт "використовує OpenGL", який я відчував, слід уточнити за допомогою "використовує OpenGL на платформах, які цього вимагають" (він використовує Direct3D або специфічні для консолі API скрізь, окрім iOS / Anrdoid / OSX / Linux), але це більше уточнення, ніж виправлення.
Шон Міддлічч

1
Я не заявляв про себе, але ще одна причина, що ця відповідь є невідповідною, це те, що ви використовуєте двигун на основі OpenGL, а не сирий OpenGL, який дуже сильно змінює.
w4etwetewtwet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.