Tôi đang tạo một môi trường được tạo ngẫu nhiên cho một trò chơi tôi đang phát triển. Tôi đang sử dụng OpenGL
và mã hóa trong Java
.
Tôi đang cố gắng đặt ngẫu nhiên các cây trong thế giới của mình (để tạo một khu rừng), nhưng tôi không muốn các mô hình chồng lên nhau (điều này xảy ra khi hai cây được đặt quá gần nhau). Đây là hình ảnh về những gì tôi đang nói về:
Tôi có thể cung cấp thêm mã nếu cần thiết, nhưng đây là đoạn trích cần thiết. Tôi đang lưu trữ các đối tượng của tôi trong một ArrayList
với List<Entity> entities = new ArrayList<Entity>();
. Tôi sau đó thêm vào danh sách đó bằng cách sử dụng:
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);
}
trong đó mỗi Entity
cái theo cú pháp sau:
new Entity(modelName, positionVector(x, y, z), rotX, rotY, rotZ, scaleX, scaleY, scaleZ);
rotX
là góc quay dọc theo trục x và scaleX
là tỷ lệ theo hướng x, v.v.
Bạn có thể thấy rằng tôi đang đặt các cây này một cách ngẫu nhiên random.nextFloat()
cho các vị trí x
và z
vị trí, và giới hạn phạm vi để các cây sẽ xuất hiện ở vị trí mong muốn. Tuy nhiên, tôi muốn bằng cách nào đó kiểm soát các vị trí này, để nếu nó cố gắng đặt một cây quá gần với cây được đặt trước đó, nó sẽ tính toán lại một vị trí ngẫu nhiên mới. Tôi đã nghĩ rằng mỗi cây Entity
có thể có một trường khác, chẳng hạn như treeTrunkGirth
, và nếu một cây được đặt ở khoảng cách giữa vị trí của cây khác và nó treeTrunkGirth
, thì nó sẽ tính toán lại một vị trí mới. Có cách nào để hoàn thành nó không?
Tôi rất vui khi thêm nhiều đoạn mã và chi tiết khi cần thiết.
treeTrunkGirth
thay vì hằng số để xác định khoảng cách tối thiểu để đặt cây nếu chúng cần thay đổi.