คำถามติดแท็ก space-partitioning

6
ฉันจะเพิ่มประสิทธิภาพโลก Minecraft-esque voxel ได้อย่างไร?
ฉันพบว่าโลกขนาดใหญ่ที่ยอดเยี่ยมของ Minecraft นั้นช้ามากในการนำทางแม้ว่าจะใช้ Quad-Core และกราฟิกการ์ดเนื้อ ฉันถือว่าความเชื่องช้าของ Minecraft มาจาก: Java เนื่องจากการแบ่งพาร์ติชันและการจัดการหน่วยความจำเร็วขึ้นในภาษา C ++ การแบ่งพาร์ติชันที่อ่อนแอของโลก ฉันอาจผิดทั้งสองข้อ อย่างไรก็ตามนี่ทำให้ฉันคิดถึงวิธีที่ดีที่สุดในการจัดการโลก voxel ขนาดใหญ่ มันเป็นโลก 3 มิติจริงที่บล็อกสามารถอยู่ในส่วนใดของโลกก็เป็นพื้นอาร์เรย์ใหญ่ 3D [x][y][z]ซึ่งแต่ละบล็อกในโลกที่มีประเภท (เช่นBlockType.Empty = 0, BlockType.Dirt = 1ฯลฯ ) ฉันคิดว่าเพื่อให้โลกประเภทนี้ทำงานได้ดีคุณจะต้อง: ใช้ต้นไม้ที่มีความหลากหลาย ( oct / kd / bsp ) เพื่อแยกลูกบาศก์ทั้งหมดออก ดูเหมือนว่า oct / kd จะเป็นตัวเลือกที่ดีกว่าเนื่องจากคุณสามารถแบ่งพาร์ติชันในระดับต่อคิวบ์ไม่ใช่ระดับต่อสามเหลี่ยม ใช้อัลกอริทึมบางอย่างเพื่อหาว่าบล็อกใดที่สามารถเห็นได้ในปัจจุบันเนื่องจากบล็อกที่อยู่ใกล้กับผู้ใช้มากขึ้นอาจทำให้บล็อกยุ่งเหยิง ทำให้วัตถุบล็อกมีน้ำหนักเบาดังนั้นจึงเป็นการเพิ่มและนำออกจากต้นไม้ได้อย่างรวดเร็ว ฉันเดาว่าไม่มีคำตอบที่ถูกต้องสำหรับเรื่องนี้ แต่ฉันสนใจที่จะเห็นความคิดเห็นของประชาชนในเรื่องนี้ คุณจะปรับปรุงประสิทธิภาพในโลก voxel …

1
อัลกอริทึมสำหรับ "รักษา" หลายรูปสี่เหลี่ยมให้เป็นรูปสี่เหลี่ยมผืนผ้าจำนวนน้อยลงหรือไม่?
สมมติว่าฉันมีตารางของสี่เหลี่ยมของรูปร่างและสีที่แตกต่างกันและฉันต้องการลด (ใกล้ถึงความเหมาะสมดีที่สุดไม่จำเป็นต้องดีที่สุด) จำนวนของรูปสี่เหลี่ยมเพื่อแสดงเค้าโครงสีเดียวกัน ภาพด้านบนเป็นกรณีที่ง่ายมากและช่องว่างระหว่างสี่เหลี่ยมใช้สำหรับการสร้างภาพข้อมูลเท่านั้น - จริง ๆ แล้วพวกเขาจะได้รับการบรรจุแน่น ชื่อวิธีหรืออัลกอริทึม (ยินดีที่จะ google) ที่สามารถช่วยฉันทำสิ่งนี้คืออะไร?

1
ตรรกะการแยกทรี kd คืออะไร
ฉันพยายามหาวิธีใช้ต้นไม้ KD ในหน้า 322 ของ "การตรวจจับการชนกันแบบเรียลไทม์" โดยEricson ส่วนข้อความรวมอยู่ด้านล่างในกรณีที่หน้าตัวอย่างของหนังสือ Google ไม่อนุญาตให้คุณเห็นเวลาที่คุณคลิกที่ลิงก์ ส่วนข้อความ ส่วนที่เกี่ยวข้อง: แนวคิดพื้นฐานที่อยู่เบื้องหลังการตัดกันของเรย์หรือส่วนของเส้นกำกับที่มีต้นไม้ kd นั้นตรงไปตรงมา บรรทัดถูกตัดกับระนาบการแยกของโหนดและคำนวณค่า t ของการตัดกัน หาก t อยู่ภายในช่วงของบรรทัด 0 <= t <= tmax เส้นเลาะเลียบไปตามระนาบและลูกทั้งสองของต้นไม้ลงมาซ้ำ ๆ ถ้าไม่เพียง แต่ด้านที่มีต้นกำเนิดของกลุ่มนั้นจะถูกเยี่ยมชมซ้ำ ดังนั้นนี่คือสิ่งที่ฉันมี: ( เปิดภาพในแท็บใหม่หากคุณไม่เห็นตัวอักษร) ต้นไม้ตรรกะ ที่นี่แสงสีส้มกำลังผ่านฉาก 3 มิติ x แทนจุดตัดด้วยระนาบ จากซ้ายสุดฮิต: ด้านหน้าของลูกบาศก์ล้อมรอบฉาก ระนาบการแยก (1) ระนาบการแยก (2.2) ด้านขวาของลูกบาศก์ล้อมรอบฉาก แต่นี่คือสิ่งที่จะเกิดขึ้นอย่างไร้เดียงสาตามคำอธิบายพื้นฐานของ Ericson ด้านบน: ทดสอบกับเครื่องบินแยก …

2
ฝ่ายอักษะในแนวแกน: แบ่งพื้นที่ออกเป็นสี่เหลี่ยมผืนผ้าสุ่ม?
ฉันต้องการวิธีการแบ่งพื้นที่ 3 มิติเป็นรูปร่างกล่องที่จัดแนวแกนแบบสุ่ม ตอนนี้ฉันกำลังแบ่งพื้นที่ 2d สำหรับการทดสอบ วิธีที่ฉับพลันที่สุดที่ฉันคิดขึ้นมาคือการกำหนดขนาดสี่เหลี่ยมผืนผ้า (1, 1) แล้วแบ่งสี่เหลี่ยมที่มีอยู่ทั้งหมดกลับเป็นรูปสี่เหลี่ยมผืนผ้าไม่สม่ำเสมอสองอันสลับกันระหว่างแกน X และ Y ปัญหาที่นี่ชัดเจน วิธีการนี้ส่งผลให้เส้นยืดยาว (ทำเครื่องหมายด้วยสีแดง) สิ่งที่ฉันต้องการคือสิ่งที่ดูเป็นธรรมชาติมากขึ้น (ฉันรวมตัวอย่าง) ดูไม่มีเส้นตรงยาวจากบนลงล่างหรือจากซ้ายไปขวา ข้อ จำกัด เพียงอย่างเดียวคือฉันอาจต้องการ จำกัด ขนาดที่เล็กที่สุดของสี่เหลี่ยมผืนผ้าโดยไม่กระทบกับความละเอียดของขนาด นั่นคือถ้าส่วนที่เล็กที่สุดคือ 1 ตารางเซนติเมตรกว่าห้องที่เล็กที่สุดของวินาทีไม่ควรเป็น 2 ตารางหน่วย ดังนั้นขั้นตอนวิธีควรเป็นไปตามข้อ จำกัด ทั้งสามดังต่อไปนี้: รูปสี่เหลี่ยมผืนผ้ามีขนาดเล็กไม่เล็ก ขนาดของรูปสี่เหลี่ยมไม่ได้เป็นการคูณแบบแยกขนาดที่เล็กที่สุด เช่นถ้า rect ที่เล็กที่สุดคือ 3 square unit มากกว่า rects ที่ใหญ่กว่าจะไม่ถูก จำกัด ให้เป็น 6, 9, 12 และอื่น ๆ …

1
ทางออกที่มีประสิทธิภาพสำหรับการแบ่งพื้นที่หลายคน?
คำถามนี้ค่อนข้างยุ่งยาก แต่ฉันจะพยายามทำให้ชัดเจน ช่วยบอกว่าฉันกำลังสร้างเกมออนไลน์ (ไม่ใช่ MMO-scale) แต่นั่นก็รองรับผู้เล่นให้มากที่สุดเท่าที่จะทำได้ในแนวทางเซิร์ฟเวอร์ที่เชื่อถือได้ ผมต้องการที่ยิ่งใหญ่ของโลกที่มีจำนวนมากของศัตรู AI จำลอง ฉันรับทราบถึงกลยุทธ์สองสามประการในการประหยัด CPU ของเซิร์ฟเวอร์โดยแบ่งย่อยพื้นที่และไม่ประมวลผลสิ่งที่ไม่ต้องการการประมวลผล ฉันแบ่งโลกแล้วตามภูมิภาคซึ่งจะต้องใช้เวลาโหลดและการเปลี่ยนภาพเล็กน้อยซึ่งฉันคิดว่าเป็นสิ่งสำคัญในการรักษาคุณภาพของการเล่นเกมเมื่อเล่นในพื้นที่ ฉันไม่ได้คาดหวังว่าผู้เล่นจะอยู่ในมากกว่าหนึ่งหรือสองภูมิภาค ปัญหาคือภูมิภาคสามารถมีขนาดใหญ่และมี NPC จำนวนมากในเวลาเดียวกัน ฉันจะจัดการสิ่งนี้โดยไม่กระทบต่อประสบการณ์ของผู้เล่นได้อย่างไร วิธีการเช่นเซิร์ฟเวอร์เดียวต่อภูมิภาคและเหมือนกันไม่ได้อยู่ในตาราง ฉันส่วนใหญ่กำลังมองหาโครงสร้างข้อมูลเพื่อเก็บพยุหะศัตรูและแม้แต่ NPC ที่สงบสุข ในการสรุปคำถามโปรดทราบว่ามียานพาหนะอยู่ดังนั้นจึงรวดเร็วในการเดินทางภายในภูมิภาคซึ่งมีอิทธิพลต่อ "เมื่อ" ถึงการเลือกพื้นที่

2
ขอบเขตโลก - (0, ขนาด) หรือ (-HalfSize, HalfSize)?
เมื่อสร้างพื้นที่เกมที่จะย้ายวาดและชนวัตถุมันจะดีกว่าถ้ามีจุด (0,0) หรือจุด (0,0,0) อยู่ในใจกลางของพื้นที่ของคุณเช่นนั้น ขอบเขตของโลกคือ (ครึ่งขนาดครึ่งขนาด) หรือจะเป็นการดีกว่าถ้าอยู่ที่มุมไกลของอวกาศดังนั้นขอบเขตจึงเป็น (0 ขนาด)? ข้อดีและข้อเสียของแต่ละข้อคืออะไรและแต่ละประเภทมีปัญหาอะไรบ้าง หรือว่ามันไม่สำคัญจริงๆ ดูเหมือนว่ารายละเอียดเล็ก ๆ น้อย ๆ แต่ฉันต้องการที่จะดูว่าอาจมีปัญหาสำคัญที่ฉันอาจจะมองเห็น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.