ฉันกำลังพยายามเขียนโปรแกรม voxel เพียงเล็กน้อยเพราะมันสนุก แต่ก็พยายามหาวิธีที่ดีที่สุดในการเก็บ voxels จริง ฉันรู้ว่าฉันจะต้องมีชิ้นส่วนบางอย่างดังนั้นฉันไม่จำเป็นต้องมีทั้งโลกในความทรงจำและฉันรู้ว่าฉันต้องการให้พวกเขามีประสิทธิภาพที่เหมาะสม
ฉันอ่านเกี่ยวกับ octrees และจากสิ่งที่ฉันเข้าใจมันเริ่มต้นด้วย 1 cube และในลูกบาศก์นั้นสามารถเพิ่มได้อีก 8 ลูกและใน 8 ลูกบาศก์เหล่านั้นอาจเป็นอีก 8 ลูกเป็นต้น แต่ฉันไม่คิดว่ามันเหมาะกับเครื่องยนต์ voxel ของฉันเพราะ ลูกบาศก์ / รายการ voxel ของฉันทั้งหมดจะมีขนาดเท่ากันทุกประการ
อีกทางเลือกหนึ่งคือเพียงสร้างอาร์เรย์ขนาด 16 * 16 * 16 และมีขนาดนั้นหนึ่งอันและคุณเติมด้วยรายการ และส่วนที่ไม่มีรายการใด ๆ จะมีค่า 0 เป็นค่า (0 = อากาศ) แต่ฉันเกรงว่านี่จะเสียความทรงจำมากมายและจะไม่เร็วมาก
จากนั้นอีกตัวเลือกหนึ่งคือเวกเตอร์สำหรับแต่ละอันและเติมด้วยลูกบาศก์ และคิวบ์ยังคงตำแหน่งในก้อน สิ่งนี้จะช่วยประหยัดหน่วยความจำ (ไม่มีบล็อกอากาศ) แต่ทำให้มองหาลูกบาศก์ที่ตำแหน่งเฉพาะช้ากว่ามาก
ดังนั้นฉันไม่สามารถหาทางออกที่ดีได้และฉันหวังว่าจะมีคนช่วยฉันได้ แล้วคุณจะใช้อะไรและทำไม
แต่ปัญหาอื่นคือการแสดงผล เพียงอ่านแต่ละอันและส่งไปยัง GPU โดยใช้ OpenGL นั้นง่าย แต่ช้ามาก การสร้างตาข่ายหนึ่งอันต่ออันจะดีกว่า แต่นั่นหมายความว่าทุกครั้งที่ฉันทำลายหนึ่งบล็อกฉันต้องสร้างทั้งก้อนซึ่งอาจใช้เวลาสักหน่อยทำให้เกิดอาการสะอึกเล็กน้อย แต่เห็นได้ชัดซึ่งฉันไม่ต้องการเช่นกัน นั่นจะยากขึ้น แล้วฉันจะทำให้ลูกบาศก์เป็นอย่างไร เพียงสร้างคิวบ์ทั้งหมดในบัฟเฟอร์จุดสุดยอดหนึ่งอันต่อหนึ่งก้อนและแสดงผลนั้นและอาจลองใส่มันในเธรดอื่นหรือมีอีกวิธีหนึ่ง?
ขอบคุณ!