ฉันกำลังสร้างสภาพแวดล้อมที่สร้างแบบสุ่มสำหรับเกมที่ฉันกำลังพัฒนา ฉันใช้และการเข้ารหัสในOpenGLJava
ฉันกำลังพยายามวางต้นไม้ในโลกของฉัน (เพื่อสร้างป่า) แต่ฉันไม่ต้องการให้แบบจำลองทับซ้อนกัน (ซึ่งเกิดขึ้นเมื่อวางต้นไม้สองต้นใกล้กันเกินไป) นี่คือภาพสิ่งที่ฉันพูดถึง:
ฉันสามารถให้รหัสเพิ่มเติมหากจำเป็น แต่นี่คือตัวอย่างสำคัญ ฉันกำลังจัดเก็บวัตถุของฉันในด้วยArrayList List<Entity> entities = new ArrayList<Entity>();ฉันจะเพิ่มรายการนั้นโดยใช้:
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);
}
โดยที่แต่ละEntityรายการมีไวยากรณ์ต่อไปนี้:
new Entity(modelName, positionVector(x, y, z), rotX, rotY, rotZ, scaleX, scaleY, scaleZ);
rotXคือการหมุนตามแกน x และscaleXเป็นสเกลในทิศทาง x ฯลฯ
คุณสามารถเห็นได้ว่าฉันกำลังวางต้นไม้เหล่านี้แบบสุ่มด้วยrandom.nextFloat()สำหรับxและzตำแหน่งและการ จำกัด ขอบเขตเพื่อให้ต้นไม้ปรากฏในตำแหน่งที่ต้องการ อย่างไรก็ตามฉันต้องการควบคุมตำแหน่งเหล่านี้เพื่อที่ว่าถ้ามันพยายามวางต้นไม้ใกล้กับต้นไม้ที่วางไว้ก่อนหน้านี้มันจะคำนวณตำแหน่งสุ่มใหม่ ฉันคิดว่าต้นไม้แต่ละต้นEntityสามารถมีเขตข้อมูลอื่นเช่นtreeTrunkGirthและถ้าต้นไม้วางอยู่ในระยะห่างระหว่างที่ตั้งของต้นไม้อื่นและมันtreeTrunkGirthก็จะคำนวณตำแหน่งใหม่ มีวิธีการทำสิ่งนี้หรือไม่?
ฉันยินดีที่จะเพิ่มข้อมูลโค้ดและรายละเอียดเพิ่มเติมตามความจำเป็น
treeTrunkGirthแทนค่าคงที่เพื่อกำหนดระยะห่างขั้นต่ำสำหรับการวางต้นไม้หากต้องการเปลี่ยนแปลง

