ฉันกำลังสร้างสภาพแวดล้อมที่สร้างแบบสุ่มสำหรับเกมที่ฉันกำลังพัฒนา ฉันใช้และการเข้ารหัสในOpenGL
Java
ฉันกำลังพยายามวางต้นไม้ในโลกของฉัน (เพื่อสร้างป่า) แต่ฉันไม่ต้องการให้แบบจำลองทับซ้อนกัน (ซึ่งเกิดขึ้นเมื่อวางต้นไม้สองต้นใกล้กันเกินไป) นี่คือภาพสิ่งที่ฉันพูดถึง:
ฉันสามารถให้รหัสเพิ่มเติมหากจำเป็น แต่นี่คือตัวอย่างสำคัญ ฉันกำลังจัดเก็บวัตถุของฉันในด้วย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
แทนค่าคงที่เพื่อกำหนดระยะห่างขั้นต่ำสำหรับการวางต้นไม้หากต้องการเปลี่ยนแปลง