LOD (рівень деталізації) означає управління об'єктами в різних масштабах відображення, які можна розділити на дві частини. Однак ви можете скористатися одним із них, і цього було б достатньо для більшості випадків.
Показати / приховати шари (групу об'єктів одного типу) залежно від величини (масштаб відображення).
Метод, заснований на алгебраїчній геометрії, називається Генералізацією (алгоритм спрощення полігонів). подивіться на наступну картину
Найвідоміший і ефективний метод узагальнення (спрощення) багатокутної сітки відомий як теорема про багатогранник Декарта-Ейлера (рівняння 4.5, вибачте, якщо я переглядаю книгу, що було найкраще, що я можу зробити) і використовується більшості просторових баз даних наприклад модулі PostGIS в PostgreSQL. Він просто видаляє менші сторони багатокутника і робить дуже закругленим. (Вище зображення)
Для впровадження LOD в грі вам потрібно зберегти та керувати масштабом вашої карти (сцени) під час операцій збільшення / зменшення. Шкала змінюється від нуля до нескінченності, і вам потрібно розділити це на певну кількість діапазонів, наприклад, щось подібне:
- 1 / нуль = нескінченність до 1/50
- 1/50 до 1/100
- 1/100 до 1/1000
- 1/1000 до 1 / нескінченність = 0
Тоді вам потрібно визначити, які типи ваших об'єктів (шарів) повинні бути видимими або невидимими в кожному з вищезазначених діапазонів. Наприклад, такий невеликий тип об'єкта, як клапан гідранта, не повинен бути видно, коли користувач знаходиться у четвертому діапазоні, оскільки він буде дуже малим у такому масштабі і не може бути дискримінований, тому це не має значення, якщо пропустити малювання на ньому екран.
Тож, коли користувач використовує масштаб та зменшення масштабу, щоб змінити збільшення, він переміщується за вищезазначеними межами від одного до іншого діапазону, а ваша гра використовує ці масштабні дисплеї для управління рівнем деталей, показуючи або приховуючи предмети на сцені. Це робить дискретним рішенням, що об'єкти раптово зникають під час операції збільшення, проте, маючи ретельно визначені масштаби та діапазони збільшення, користувач нічого не відчує.
Наведена вище група з 4 діапазонів - лише приклад, і вам потрібно знайти найкраще для власного випадку шляхом спроб та помилок. Для цього немає правила.
Іноді ігри використовують власні методи LOD, Subway Surfer миттєво показує невеликий, без текстури прямокутник, щоб показати будівлю далеко, і, наблизившись раптом, він набуває текстури, геймер відчуває це. Ви не говорили про свою проекційну систему, що дуже важливо і не говорили про те, яку гру ви створюєте.
Однак припустимо, що ви реалізуєте повну 3D-гру з openGl і хочете відфільтрувати деякі сітки перед тим, як перенести їх на графічне обладнання, я впевнений, що це допоможе вам зменшити операції зв’язування / розв’язування з буферними об'єктами та вершинними масивами (VBO, VAO). мати справу з OpenGl.
Використовуючи лише управління шарами або просто реалізувати Узагальнення Ейлера
У більшості випадків не потрібно реалізовувати алгоритм узагальнення, а фільтрація об'єктів просто працює і приводить вас до необхідної ефективності (частоти оновлення), однак це повністю залежить від конкретного випадку. Хоча це простий алгоритм, який просто видаляє невеликі сторони багатокутника, вам потрібно визначити поріг, який є добутком величини та постійним числом, тому більші сторони фільтруються в набагато більш далекій точці зору.
Забувши манагменти шару та реалізуючи лише алгоритм узагальнення Eulers, забезпечує дуже акуратний та безперервний метод, при якому ви просто перевіряєте кожну сторону та рядки за попередньо визначеним порогом та показуєте їх лише у випадку, якщо вони є досить великими, щоб їх можна було дискримінувати на екрані.
PS: збільшення - це поплавкове число> 0, яке дорівнює 1 / масштабу, а шкала зазвичай <1, оскільки шкала 1: 1 означає, що у вашій грі є реальна довжина світу.