Saya membuat lingkungan yang dibuat secara acak untuk game yang saya kembangkan. Saya menggunakan OpenGL
dan mengkode Java
.
Saya mencoba menempatkan pohon secara acak di dunia saya (untuk membuat hutan), tetapi saya tidak ingin modelnya tumpang tindih (yang terjadi ketika dua pohon ditempatkan terlalu dekat satu sama lain). Inilah gambar dari apa yang saya bicarakan:
Saya dapat memberikan lebih banyak kode jika perlu, tetapi ini cuplikan penting. Saya menyimpan objek saya ArrayList
dengan List<Entity> entities = new ArrayList<Entity>();
. Saya kemudian menambahkan ke daftar itu menggunakan:
Random random = new Random();
for (int i = 0; i < 500; i++) {
entities.add(new Entity(tree, new Vector3f(random.nextFloat() * 800 - 400,
0, random.nextFloat() * -600), 0, random.nextFloat() * 360, 0, 3, 3, 3);
}
di mana masing-masing Entity
mengikuti sintaks berikut:
new Entity(modelName, positionVector(x, y, z), rotX, rotY, rotZ, scaleX, scaleY, scaleZ);
rotX
adalah rotasi sepanjang sumbu x, dan scaleX
skala dalam arah x, dll.
Anda dapat melihat bahwa saya menempatkan pohon-pohon ini secara acak dengan random.nextFloat()
untuk x
dan z
posisi, dan membatasi rentang sehingga pohon-pohon akan muncul di lokasi yang diinginkan. Namun, saya ingin entah bagaimana mengontrol posisi-posisi ini, sehingga jika ia mencoba menempatkan pohon terlalu dekat dengan pohon yang ditempatkan sebelumnya, itu akan menghitung ulang posisi acak baru. Saya berpikir bahwa setiap pohon Entity
dapat memiliki bidang lain, seperti treeTrunkGirth
, dan jika pohon ditempatkan pada jarak antara lokasi pohon lain dan itu treeTrunkGirth
, maka itu akan menghitung ulang posisi baru. Apakah ada cara untuk menyelesaikan ini?
Saya senang menambahkan potongan kode dan detail yang diperlukan.
treeTrunkGirth
bukan konstanta untuk menentukan jarak minimum untuk menempatkan pohon jika mereka perlu bervariasi.