Я розробляю гру, яка частково складається з розвідки планет. Я хочу використовувати для них псевдовипадкові покоління, що відроджуються з визначеного насіння, коли мені доведеться завантажувати їх, а не зберігати кожну деталь, яка була б занадто важкою. Тож я просто збережу у файл випадкове насіння та модифікації, зроблені програвачем, якщо такі є.
Гравець повинен мати можливість бачити планету з орбіти (з дуже низьким рівнем деталей, а потім спускатися на землю, повільно збільшуючи рівень деталей регіону, де він / вона висаджується, і вивантажуючи ті з іншого боку планети, які виходять за межі поля зору гравця.
Якби мені довелося це зробити на площині, я б легко це зробив за допомогою системи квадратних шматок. Але проблема тут полягає в тому, що планети - майже - сфери.
Отже, що було б найкращим способом завантажувати деталі землі (рельєф та заземлені об'єкти) навколо точної точки?
Я вже хоч і на два рішення, але в обох є слабка сторона:
1. Розрізання сфери квадратними шматками.
Після того, як гравець буде достатньо близько від землі, мені просто доведеться вдосконалити деталі найближчих квадратів зі своєї позиції.
Якщо цього недостатньо, я все-таки зможу вирізати кожен квадрат підквадратом, щоб завантажити його, коли гравці перебувають на землі чи справді близько від неї.
Але як ви бачите на малюнку, виникає проблема, якщо гравець намагається приземлитися на стовп: квадрати стають дуже тонкими прямокутниками або навіть трикутниками для останнього рядка, а також до того, що їх було б багато для завантаження, покоління здавалося б спотвореним.
2. Починаючи з ікосаедра.
Тут я міг би просто збільшити трикутну tessellation навколо позиції гравця, коли він / вона наближається.
Але я не знаю, як знайти трикутники ближче, ніж позиція гравця. Я чув, що декартові координати в цьому випадку можуть бути корисними, але я не знаю, як їх використовувати.
Я використовую для цього C ++ / OpenGL, тому головне для створення та завантаження тут - вершини, що представляють рельєф поверхні та колір / текстуру.