Я створюю гру XNA, яка потребує величезного місця для гравців. В даний час тестова карта висоти, яку я використовую, становить 4096x4096, і зберігається як 4-бітний BMP.
Те, що я намагаюся зробити, це взяти цей величезний файл з висоти і винести його в гру. Проблема, з якою я стикаюся, полягає в тому, що неефективно завантажувати всю місцевість у пам’ять одразу, оскільки вона використовуватиме більшість доступної пам’яті.
Ще одна проблема, з якою я зіткнувся, полягає в тому, що я не можу перетворити рельєф місцевості в один примітив через жорстку межу, встановлену в межах XNA.
Зважаючи на це, я натрапив на ряд рішень, які я перерахував нижче:
- Візуалізація на основі місцезнаходження поточного користувача - в основному малювання квадрата навколо користувача, незалежно від їх орієнтації у світі. Це не зовсім те, що я хотів, тому що ви все ще надаєте простір, який користувач не бачить.
- Візуалізація на основі орієнтації та положення користувача - я знайшов формулу для отримання трикутника, який повинен містити пікселі графіку висоти, але це виявилося дуже складно.
- Розбиття місцевості на декілька шматочків та надання речей, які з них найближчі до користувача - Все ще не дуже ефективно, оскільки ви все ще надаєте шматки, які люди не побачать. І це трудомістко, тому що тоді я повинен розділити свою мапу висоти на кілька частин, і масштабованість стає великою проблемою.
Спробувавши ці рішення, я свіжий із ідеї, що робити. Я отримав кілька відповідей, де люди кажуть мені робити ці складні алгоритми, але я просто не маю уявлення навіть про те, як підходити до їх виконання.
Тож я в основному прошу простий, простий спосіб надання гумористичних місцевостей у XNA з максимальною ефективністю.
Я досить новачок у розробці ігор взагалі, але я готовий дослідити, якщо це здається перспективним.
Оновлення 1: Після дослідження методу геокліпмапування я почав кодувати це. У мене все математика зроблена, і гра працює. Однак це вкрай неефективно - що, мабуть, погано кодує з мого боку. Він працює на 2FPS і використовує ціле ядро мого процесора. Я спробую вдосконалити код, але, думаю, мені знадобиться додаткова допомога, тож ось вставте код для класу менеджера Terrain. Пізніше я відправлю ще більше результатів, якщо коли-небудь я стану більш ефективним.