Saya merancang game yang sebagian terdiri dari eksplorasi planet. Saya ingin menggunakan generasi pseudo-acak untuk mereka, beregenerasi dari benih yang ditentukan ketika saya harus memuatnya daripada menyimpan setiap detail, yang akan terlalu berat. Jadi saya hanya akan menyimpan dalam file benih acak dan modifikasi yang dilakukan oleh pemain jika ada.
Pemain harus dapat melihat planet ini dari orbit (dengan tingkat detail yang sangat rendah, kemudian turun ke tanah, perlahan-lahan meningkatkan level detail wilayah tempat dia mendarat, dan menurunkan yang ada di sisi lain) planet, yang pergi di luar bidang pandang pemain.
Jika saya harus melakukannya di tanah pesawat, saya akan melakukannya dengan mudah dengan sistem chunk square. Tetapi masalahnya di sini adalah bahwa planet hampir-hampir bulat.
Jadi apa cara terbaik untuk memuat detail tanah (relief dan objek yang dibumikan) di sekitar titik yang tepat?
Saya sudah memikirkan dua solusi, tetapi keduanya memiliki titik lemah:
1. Memotong bola dalam potongan persegi.
Setelah pemain cukup dekat dengan tanah, saya hanya perlu meningkatkan detail kotak terdekat dari posisinya.
Jika itu tidak cukup, saya masih bisa memotong setiap kotak dalam sub-kotak untuk memuat ketika para pemain berada atau benar-benar dekat dengan tanah.
Tetapi seperti yang Anda lihat pada gambar, ada masalah jika pemain mencoba mendarat di tiang: kotak menjadi sangat ramping, atau bahkan segitiga untuk baris terakhir, dan juga fakta bahwa mereka akan banyak memuat, generasi akan tampak terdistorsi.
2. Mulai dari icosahedron.
Di sini, saya bisa meningkatkan tessellation segitiga di sekitar posisi pemain ketika dia semakin dekat.
Tapi saya tidak tahu bagaimana menempatkan segitiga lebih dekat dari posisi pemain. Saya mendengar koordinat Cartesian bisa berguna dalam kasus itu, tetapi saya tidak tahu bagaimana menggunakannya.
Saya menggunakan C ++ / OpenGL untuk itu, jadi hal utama untuk menghasilkan dan memuat di sini adalah simpul yang mewakili relief permukaan dan warna / tekstur.