อ่าน 6 นาที
การแบ่งพื้นที่ไบนารี
ใน วิทยาการคอมพิวเตอร์ การ แบ่งพื้นที่แบบไบนารี ( BSP ) เป็นวิธี การแบ่งพื้นที่ ซึ่งแบ่ง พื้นที่แบบยุค ลิด ออก เป็นสอง เซตแบบนูน โดยใช้ ระนาบไฮเปอร์ เป็นตัวแบ่ง...
การแบ่งพื้นที่ไบนารี

ในวิทยาการคอมพิวเตอร์การแบ่งพื้นที่แบบไบนารี ( BSP ) เป็นวิธีการแบ่งพื้นที่ซึ่งแบ่งพื้นที่แบบยุคลิด ออก เป็นสองเซตแบบนูนโดยใช้ระนาบไฮเปอร์เป็นตัวแบ่ง การแบ่งพื้นที่นี้ทำให้เกิดการแสดงวัตถุภายในพื้นที่ในรูปแบบโครงสร้างข้อมูลแบบต้นไม้ที่เรียกว่าต้นไม้ BSP
การแบ่งพื้นที่แบบไบนารีได้รับการพัฒนาในบริบทของกราฟิกคอมพิวเตอร์ 3 มิติในปี พ.ศ. 2512 [ 1 ] [ 2 ]โครงสร้างของต้นไม้ BSP มีประโยชน์ในการเรนเดอร์เนื่องจากสามารถให้ข้อมูลเชิงพื้นที่เกี่ยวกับวัตถุในฉากได้อย่างมีประสิทธิภาพ เช่น วัตถุที่เรียงลำดับจากด้านหน้าไปด้านหลังโดยสัมพันธ์กับผู้ดู ณ ตำแหน่งที่กำหนด การใช้งานอื่นๆ ของ BSP ได้แก่ การดำเนิน การ ทางเรขาคณิตกับรูปร่าง ( เรขาคณิตของแข็งเชิงสร้างสรรค์ ) ในCAD [ 3 ]การตรวจจับการชนในหุ่นยนต์และวิดีโอเกม 3 มิติ การ ติดตามรังสีการจำลองภูมิทัศน์เสมือนจริง[ 4 ]และแอปพลิเคชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฉากเชิงพื้นที่ที่ ซับซ้อน
ประวัติศาสตร์
- ในปี พ.ศ. 2512 Schumacker และคณะ[ 1 ]ได้ตีพิมพ์รายงานที่อธิบายว่าระนาบที่จัดวางอย่างระมัดระวังในสภาพแวดล้อมเสมือนจริงสามารถใช้เพื่อเร่งการเรียงลำดับรูปหลายเหลี่ยมได้อย่างไร เทคนิคนี้ใช้ความสอดคล้องเชิงลึก ซึ่งระบุว่ารูปหลายเหลี่ยมที่อยู่ด้านไกลของระนาบไม่สามารถกีดขวางรูปหลายเหลี่ยมที่อยู่ใกล้กว่าได้ เทคนิคนี้ถูกนำไปใช้ในโปรแกรมจำลองการบินที่สร้างโดย GE รวมถึง Evans และ Sutherland ด้วย อย่างไรก็ตาม การสร้างการจัดระเบียบข้อมูลรูปหลายเหลี่ยมนั้นดำเนินการด้วยตนเองโดยนักออกแบบฉาก
- ในปี 1980 Fuchsและคณะ[ 2 ]ได้ขยายแนวคิดของ Schumacker ไปสู่การแสดงวัตถุ 3 มิติในสภาพแวดล้อมเสมือนจริงโดยใช้ระนาบที่ทับซ้อนกับรูปหลายเหลี่ยมเพื่อแบ่งพื้นที่ 3 มิติแบบวนซ้ำ ซึ่งทำให้เกิดการสร้างโครงสร้างข้อมูลรูปหลายเหลี่ยมแบบลำดับชั้นโดยอัตโนมัติและเป็นไปตามอัลกอริทึม ซึ่งรู้จักกันในชื่อ Binary Space Partitioning Tree (BSP Tree) กระบวนการนี้เกิดขึ้นเป็นขั้นตอนการประมวลผลล่วงหน้าแบบออฟไลน์ซึ่งดำเนินการเพียงครั้งเดียวต่อสภาพแวดล้อม/วัตถุ ในระหว่างการทำงาน ลำดับการมองเห็นที่ขึ้นอยู่กับมุมมองจะถูกสร้างขึ้นโดยการท่องไปในต้นไม้
- วิทยานิพนธ์ปริญญาเอกของ Naylor ในปี 1981 [ 5 ]ได้นำเสนอการพัฒนาอย่างเต็มรูปแบบของทั้งต้นไม้ BSP และแนวทางทฤษฎีกราฟโดยใช้ส่วนประกอบที่เชื่อมต่อกันอย่างแน่นหนาสำหรับการคำนวณล่วงหน้าเกี่ยวกับการมองเห็น ตลอดจนการเชื่อมต่อระหว่างสองวิธีนี้ มีการเน้นย้ำถึงต้นไม้ BSP ในฐานะโครงสร้างการค้นหาเชิงพื้นที่ที่ไม่ขึ้นกับมิติ โดยมีการประยุกต์ใช้ในการกำหนดพื้นผิวที่มองเห็นได้ วิทยานิพนธ์นี้ยังรวมถึงข้อมูลเชิงประจักษ์ชุดแรกที่แสดงให้เห็นว่าขนาดของต้นไม้และจำนวนรูปหลายเหลี่ยมใหม่นั้นสมเหตุสมผล (โดยใช้แบบจำลองของกระสวยอวกาศ)
- ในปี พ.ศ. 2526 Fuchsและคณะ[ 6 ]ได้อธิบายการใช้งานไมโครโค้ดของอัลกอริทึมต้นไม้ BSP บน ระบบ บัฟเฟอร์เฟรม Ikonas ซึ่งเป็นการสาธิตครั้งแรกของการกำหนดพื้นผิวที่มองเห็นได้แบบเรียลไทม์โดยใช้ต้นไม้ BSP
- ในปี 1987 Thibault และ Naylor [ 3 ]ได้อธิบายวิธีการแสดงรูปทรงหลายเหลี่ยมแบบใดก็ได้โดยใช้โครงสร้าง BSP แทนการใช้ b-rep ( การแสดงขอบเขต ) แบบดั้งเดิม ซึ่งให้การแสดงแบบทึบแทนการแสดงแบบพื้นผิว การดำเนินการเซตบนรูปทรงหลายเหลี่ยมได้รับการอธิบายโดยใช้เครื่องมือ ทำให้สามารถสร้างรูปทรงเรขาคณิตแบบทึบ (CSG) ได้แบบเรียลไทม์ นี่เป็นต้นแบบของการออกแบบระดับ BSP โดยใช้ " แปรง " ซึ่งแนะนำในโปรแกรมแก้ไข Quake และนำไปใช้ในโปรแกรมแก้ไข Unreal
- ในปี 1990 Naylor, Amanatides และ Thibault [ 7 ]ได้นำเสนออัลกอริทึมสำหรับการรวมต้นไม้ BSP สองต้นเพื่อสร้างต้นไม้ BSP ใหม่จากต้นไม้ดั้งเดิมสองต้น ซึ่งให้ประโยชน์มากมาย รวมถึงการรวมวัตถุเคลื่อนที่ที่แสดงด้วยต้นไม้ BSP เข้ากับสภาพแวดล้อมคงที่ (ซึ่งแสดงด้วยต้นไม้ BSP เช่นกัน) การดำเนินการ CSG ที่มีประสิทธิภาพมากบนรูปทรงหลายเหลี่ยม การตรวจจับการชนที่แม่นยำใน O(log n * log n) และการจัดลำดับพื้นผิวโปร่งใสที่เหมาะสมในวัตถุสองชิ้นที่ซ้อนทับกัน (ได้ถูกนำมาใช้สำหรับเอฟเฟกต์การมองเห็นด้วยรังสีเอกซ์)
- ในปี พ.ศ. 2534 Tellerและ Séquin [ 8 ]ได้เสนอการสร้างชุดที่อาจมองเห็นได้แบบออฟไลน์เพื่อเร่งการกำหนดพื้นผิวที่มองเห็นได้ในสภาพแวดล้อม 2 มิติแบบตั้งฉาก
- ในปี 1991 Gordon และ Chen [ 9 ]ได้อธิบายวิธีการที่มีประสิทธิภาพในการแสดงผลแบบหน้า-หลังจากต้นไม้ BSP แทนที่จะใช้วิธีการแบบหลัง-หน้าแบบดั้งเดิม พวกเขาใช้โครงสร้างข้อมูลพิเศษเพื่อบันทึกส่วนต่างๆ ของหน้าจอที่วาดแล้วและส่วนที่ยังไม่ได้แสดงผลอย่างมีประสิทธิภาพ อัลกอริทึมนี้ ร่วมกับคำอธิบายของต้นไม้ BSP ในตำรากราฟิกคอมพิวเตอร์มาตรฐานในสมัยนั้น ( Computer Graphics: Principles and Practice ) ถูกนำมาใช้โดยJohn Carmackในการสร้างเกมDoom
- วิทยานิพนธ์ปริญญาเอกของTeller ใน ปี 1992 [ 10 ]อธิบายถึงการสร้างชุดที่มองเห็นได้อย่างมีประสิทธิภาพเป็นขั้นตอนการประมวลผลล่วงหน้าเพื่อเร่งการกำหนดพื้นผิวที่มองเห็นได้แบบเรียลไทม์ในสภาพแวดล้อมรูปหลายเหลี่ยม 3 มิติแบบใดก็ได้ ซึ่งถูกนำไปใช้ในQuakeและมีส่วนช่วยอย่างมากต่อประสิทธิภาพของเกมนั้น
- ในปี 1993 Naylor [ 11 ]ได้ตอบคำถามเกี่ยวกับลักษณะเฉพาะของต้นไม้ BSP ที่ดี เขาใช้แบบจำลองกรณีที่คาดหวัง (แทนที่จะเป็นการวิเคราะห์กรณีที่เลวร้ายที่สุด) เพื่อวัดต้นทุนที่คาดหวังของการค้นหาต้นไม้ทางคณิตศาสตร์ และใช้การวัดนี้เพื่อสร้างต้นไม้ BSP ที่ดี ตามสัญชาตญาณ ต้นไม้แสดงถึงวัตถุในลักษณะความละเอียดหลายระดับ (หรือกล่าวให้แม่นยำยิ่งขึ้นคือ เป็นต้นไม้ของการประมาณค่า) มีการเปรียบเทียบกับรหัส Huffman และ ต้นไม้ ค้นหาไบนารีเชิง ความน่าจะ เป็น
- วิทยานิพนธ์ปริญญาเอกของ Hayder Radha ในปี 1993 [ 12 ]อธิบายวิธีการแสดงภาพ (ธรรมชาติ) โดยใช้ต้นไม้ BSP ซึ่งรวมถึงการพัฒนากรอบการสร้างต้นไม้ BSP ที่เหมาะสมที่สุดสำหรับภาพอินพุตใดๆ กรอบนี้อิงตามการแปลงภาพแบบใหม่ที่เรียกว่าการแปลงเส้นแบ่งพาร์ติชันข้อผิดพลาดกำลังสองน้อยที่สุด (LSE) (LPE) วิทยานิพนธ์ของ Radha ยังได้พัฒนา กรอบ การบีบอัดภาพ อัตราความผิดเพี้ยน (RD) ที่เหมาะสมที่สุด และวิธีการจัดการภาพโดยใช้ต้นไม้ BSP ด้วย
ภาพรวม

การแบ่งพื้นที่แบบไบนารีเป็นกระบวนการทั่วไปของการแบ่งฉากออกเป็นสองส่วนโดยใช้ไฮเปอร์เพลน[ 13 ]ซ้ำๆจนกว่าการแบ่งจะตรงตามข้อกำหนดอย่างน้อยหนึ่งข้อ สามารถมองได้ว่าเป็นการขยายความของโครงสร้างต้นไม้เชิงพื้นที่อื่นๆ เช่นต้นไม้k -d และควอดทรีซึ่งไฮเปอร์เพลนที่แบ่งพื้นที่อาจมีทิศทางใดก็ได้ แทนที่จะจัดเรียงตามแกนพิกัดเหมือนใน ต้นไม้ k -d หรือควอดทรี เมื่อใช้ในกราฟิกคอมพิวเตอร์เพื่อเรนเดอร์ฉากที่ประกอบด้วยรูปหลายเหลี่ยม ระนาบ ระนาบการแบ่งมักจะถูกเลือกให้ตรงกับระนาบที่กำหนดโดยรูปหลายเหลี่ยมในฉาก
การเลือกใช้ระนาบแบ่งส่วนและเกณฑ์การยุติกระบวนการแบ่งส่วนนั้นแตกต่างกันไปตามวัตถุประสงค์ของโครงสร้าง BSP ตัวอย่างเช่น ในการเรนเดอร์ภาพกราฟิกคอมพิวเตอร์ ฉากจะถูกแบ่งออกจนกระทั่งแต่ละโหนดของโครงสร้าง BSP มีเฉพาะรูปหลายเหลี่ยมที่สามารถเรนเดอร์ได้ในลำดับใดก็ได้ เมื่อ ใช้ การตัดด้านหลัง (back-face culling)แต่ละโหนดจึงมีชุดรูปหลายเหลี่ยมแบบนูน ในขณะที่เมื่อเรนเดอร์รูปหลายเหลี่ยมสองด้าน แต่ละโหนดของโครงสร้าง BSP จะมีเฉพาะรูปหลายเหลี่ยมในระนาบเดียวเท่านั้น ในการตรวจจับการชนหรือการติดตามรังสี ฉากอาจถูกแบ่งออกเป็นรูปทรงพื้นฐานซึ่งการทดสอบการชนหรือการตัดกันของรังสีทำได้ง่าย
การแบ่งพื้นที่แบบไบนารีเกิดขึ้นจากความต้องการของกราฟิกคอมพิวเตอร์ในการวาดฉากสามมิติที่ประกอบด้วยรูปหลายเหลี่ยมอย่างรวดเร็ว วิธีง่ายๆ ในการวาดฉากดังกล่าวคืออัลกอริทึมของจิตรกรซึ่งสร้างรูปหลายเหลี่ยมตามลำดับระยะห่างจากผู้ดู จากด้านหลังไปด้านหน้า โดยวาดทับพื้นหลังและรูปหลายเหลี่ยมก่อนหน้าด้วยวัตถุที่อยู่ใกล้กว่า วิธีนี้มีข้อเสียสองประการคือ เวลาที่ต้องใช้ในการเรียงลำดับรูปหลายเหลี่ยมจากด้านหลังไปด้านหน้า และความเป็นไปได้ที่จะเกิดข้อผิดพลาดในรูปหลายเหลี่ยมที่ทับซ้อนกัน Fuchs และผู้เขียนร่วม[ 2 ]แสดงให้เห็นว่าการสร้างต้นไม้ BSP แก้ปัญหาทั้งสองนี้ได้ โดยให้วิธีการเรียงลำดับรูปหลายเหลี่ยมอย่างรวดเร็วโดยสัมพันธ์กับมุมมองที่กำหนด (เชิงเส้นตามจำนวนรูปหลายเหลี่ยมในฉาก) และโดยการแบ่งย่อยรูปหลายเหลี่ยมที่ทับซ้อนกันเพื่อหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดขึ้นกับอัลกอริทึมของจิตรกร ข้อเสียของการแบ่งพื้นที่แบบไบนารีคือการสร้างต้นไม้ BSP อาจใช้เวลานาน โดยทั่วไปแล้ว การคำนวณนี้จึงมักทำเพียงครั้งเดียวกับรูปทรงเรขาคณิตแบบคงที่ ในขั้นตอนการคำนวณเบื้องต้น ก่อนการเรนเดอร์หรือการดำเนินการแบบเรียลไทม์อื่นๆ บนฉาก เนื่องจากค่าใช้จ่ายในการสร้างโครงสร้าง BSP นั้นสูง ทำให้การนำวัตถุเคลื่อนที่เข้าไปในโครงสร้างโดยตรงทำได้ยากและไม่มีประสิทธิภาพ
รุ่น
การใช้งานหลักของต้นไม้ BSP คือการเรนเดอร์รูปหลายเหลี่ยม (ที่มีสองด้าน กล่าวคือ ไม่มีการคัดกรองด้านหลัง ) ด้วยอัลกอริทึมของจิตรกร รูปหลายเหลี่ยมแต่ละรูปจะถูกกำหนดด้วยด้านหน้าและด้านหลัง ซึ่งสามารถเลือกได้ตามอำเภอใจและมีผลต่อโครงสร้างของต้นไม้เท่านั้น แต่ไม่มีผลต่อผลลัพธ์ที่ต้องการ[ 2 ]ต้นไม้ดังกล่าวถูกสร้างขึ้นจากรายการรูปหลายเหลี่ยมทั้งหมดในฉากที่ไม่ได้เรียงลำดับ อัลกอริทึมแบบเรียกซ้ำสำหรับการสร้างต้นไม้ BSP จากรายการรูปหลายเหลี่ยมนั้นคือ: [ 2 ]
- เลือกรูปหลายเหลี่ยมPจากรายการ
- สร้างโหนดNในโครงสร้างต้นไม้ BSP และเพิ่มPลงในรายการรูปหลายเหลี่ยมที่โหนดนั้น
- สำหรับรูปหลายเหลี่ยมอื่นๆ ในรายการ:
- ถ้าโพลีกอนนั้นอยู่ด้านหน้าของระนาบที่บรรจุP อย่างสมบูรณ์ ให้ย้ายโพลีกอนนั้นไปยังรายการของโหนดที่อยู่ด้านหน้าP
- ถ้าโพลีกอนนั้นอยู่ด้านหลังระนาบที่บรรจุP อย่างสมบูรณ์ ให้ย้ายโพลีกอนนั้นไปอยู่ในรายการของโหนดที่อยู่ด้านหลังP
- หากรูปหลายเหลี่ยมนั้นถูกตัดโดยระนาบที่บรรจุจุดPให้แบ่งรูปหลายเหลี่ยมนั้นออกเป็นสองรูป แล้วย้ายรูปหลายเหลี่ยมทั้งสองนั้นไปยังรายการรูปหลายเหลี่ยมด้านหลังและด้านหน้าของจุดP ตาม ลำดับ
- ถ้าโพลีกอนรูปนั้นอยู่ในระนาบที่ประกอบด้วยจุดP ให้เพิ่ม โพ ลีกอนรูปนั้น ลงในรายการโพลีกอนที่จุดN
- นำอัลกอริทึมนี้ไปใช้กับรายการรูปหลายเหลี่ยมที่อยู่ด้านหน้าP
- นำอัลกอริทึมนี้ไปใช้กับรายการรูปหลายเหลี่ยมที่อยู่ด้านหลังP
แผนภาพต่อไปนี้แสดงให้เห็นถึงการใช้อัลกอริธึมนี้ในการแปลงรายการเส้นตรงหรือรูปหลายเหลี่ยมให้เป็นโครงสร้างต้นไม้ BSP ในแต่ละขั้นตอนทั้งแปดขั้นตอน (i.-viii.) อัลกอริธึมข้างต้นจะถูกนำไปใช้กับรายการเส้นตรง และจะมีการเพิ่มโหนดใหม่หนึ่งโหนดลงในต้นไม้
จำนวนรูปหลายเหลี่ยมหรือเส้นตรงสุดท้ายในต้นไม้มักจะมากกว่า (บางครั้งมากกว่ามาก[ 2 ] ) รายการเดิม เนื่องจากเส้นตรงหรือรูปหลายเหลี่ยมที่ตัดผ่านระนาบการแบ่งส่วนจะต้องถูกแบ่งออกเป็นสองส่วน เป็นที่พึงปรารถนาที่จะลดการเพิ่มขึ้นนี้ให้น้อยที่สุด แต่ก็ต้องรักษาสมดุล ที่เหมาะสม ในต้นไม้สุดท้ายด้วย ดังนั้น การเลือกรูปหลายเหลี่ยมหรือเส้นตรงที่จะใช้เป็นระนาบการแบ่งส่วน (ในขั้นตอนที่ 1 ของอัลกอริทึม) จึงมีความสำคัญในการสร้างต้นไม้ BSP ที่มีประสิทธิภาพ
การเดินทาง
ต้นไม้ BSP จะถูกสำรวจในเวลาเชิงเส้น โดยมีลำดับที่กำหนดโดยฟังก์ชันเฉพาะของต้นไม้ ยกตัวอย่างเช่น การเรนเดอร์รูปหลายเหลี่ยมสองด้านโดยใช้อัลกอริทึมของจิตรกร การวาดรูปหลายเหลี่ยมP ให้ถูกต้องนั้น จำเป็นต้องวาดรูปหลายเหลี่ยมทั้งหมดที่อยู่ด้านหลังระนาบที่P อยู่ก่อน จากนั้นจึงวาดรูปหลายเหลี่ยม Pและสุดท้ายวาดรูปหลายเหลี่ยมที่อยู่ด้านหน้าPหากลำดับการวาดนี้เป็นไปตามเงื่อนไขสำหรับรูปหลายเหลี่ยมทั้งหมดในฉาก ฉากทั้งหมดก็จะแสดงผลตามลำดับที่ถูกต้อง ขั้นตอนนี้สามารถนำไปใช้ได้โดยการสำรวจต้นไม้ BSP แบบเรียกซ้ำโดยใช้อัลกอริทึมต่อไปนี้[ 2 ]จากตำแหน่งการดูที่กำหนดVเพื่อเรนเดอร์ต้นไม้ BSP
- ถ้าโหนดปัจจุบันเป็นโหนดใบ ให้แสดงผลรูปหลายเหลี่ยมที่โหนดปัจจุบัน
- ในทางกลับกัน หากตำแหน่งการดูVอยู่ด้านหน้าของโหนดปัจจุบัน:
- แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังโหนดปัจจุบัน
- แสดงผลรูปหลายเหลี่ยมที่โหนดปัจจุบัน
- แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าโหนดปัจจุบัน
- มิฉะนั้น หากตำแหน่งการดูVอยู่ด้านหลังโหนดปัจจุบัน:
- แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าโหนดปัจจุบัน
- แสดงผลรูปหลายเหลี่ยมที่โหนดปัจจุบัน
- แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังโหนดปัจจุบัน
- มิเช่นนั้น ตำแหน่งการมองเห็นVจะต้องอยู่บนระนาบที่สัมพันธ์กับโหนดปัจจุบันอย่างแม่นยำ จากนั้น:
- แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าโหนดปัจจุบัน
- แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังโหนดปัจจุบัน

การนำอัลกอริธึมนี้ไปใช้ซ้ำกับโครงสร้างต้นไม้ BSP ที่สร้างขึ้นข้างต้น จะส่งผลให้เกิดขั้นตอนดังต่อไปนี้:
- ขั้นแรก เราจะใช้อัลกอริธึมกับโหนดรากของต้นไม้ ซึ่งก็คือโหนดAเนื่องจากVอยู่ด้านหน้าโหนดAดังนั้นเราจึงใช้อัลกอริธึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังA ก่อน
- ต้นไม้ต้นนี้มีโหนดรากคือB1 V อยู่ด้านหลังB1ดังนั้น ขั้นแรก เราจึงใช้อัลกอริธึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าB1 :
- ต้นไม้นี้เป็นเพียงโหนดใบD1ดังนั้นจึงมีการแสดงผล รูปหลายเหลี่ยม D1
- จากนั้นเราจึงเรนเดอร์รูปหลายเหลี่ยมB1
- จากนั้นเราจะนำอัลกอริธึมไปใช้กับต้นไม้ BSP ของลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังB1 :
- ต้นไม้นี้เป็นเพียงโหนดใบC1ดังนั้นจึงมีการแสดงผล รูปหลายเหลี่ยม C1
- ต้นไม้ต้นนี้มีโหนดรากคือB1 V อยู่ด้านหลังB1ดังนั้น ขั้นแรก เราจึงใช้อัลกอริธึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าB1 :
- จากนั้นเราจึงวาดรูปหลายเหลี่ยมของA
- จากนั้นเราจึงนำอัลกอริธึมไปใช้กับต้นไม้ BSP ของลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าA
- ต้นไม้ต้นนี้มีโหนดรากคือB2 V อยู่ด้านหลังB2ดังนั้น ขั้นแรก เราจึงใช้อัลกอริธึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าB2 :
- ต้นไม้นี้เป็นเพียงโหนดใบD2ดังนั้นจึงมีการแสดงผล รูปหลายเหลี่ยม D2
- จากนั้นเราจึงเรนเดอร์รูปหลายเหลี่ยมB2
- จากนั้นเราจะนำอัลกอริธึมไปใช้กับต้นไม้ BSP ของลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังB2 :
- ต้นไม้ต้นนี้มีโหนดรากคือC2 V อยู่ด้านหน้าC2ดังนั้น ขั้นแรก เราจะใช้อัลกอริทึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังC2อย่างไรก็ตาม ไม่มีต้นไม้ดังกล่าว ดังนั้นเราจึงดำเนินการต่อไป
- เราแสดงผลรูปหลายเหลี่ยมC2
- เราใช้อัลกอริธึมกับต้นไม้ BSP ของลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าC2
- ต้นไม้นี้เป็นเพียงโหนดใบD3ดังนั้นจึงมีการแสดงผล รูปหลายเหลี่ยม D3
- ต้นไม้ต้นนี้มีโหนดรากคือB2 V อยู่ด้านหลังB2ดังนั้น ขั้นแรก เราจึงใช้อัลกอริธึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าB2 :
ต้นไม้จะถูกสำรวจในเวลาเชิงเส้นและแสดงผลรูปหลายเหลี่ยมในลำดับจากไกลไปใกล้ ( D1 , B1 , C1 , A , D2 , B2 , C2 , D3 ) ซึ่งเหมาะสมกับอัลกอริธึมของจิตรกร
แอปพลิเคชัน
ต้นไม้ BSP มักถูกใช้ในวิดีโอเกม 3 มิติ โดยเฉพาะเกมยิงมุมมองบุคคลที่หนึ่งและเกมที่มีสภาพแวดล้อมภายในอาคารเอ็นจิ้นเกมที่ใช้ต้นไม้ BSP ได้แก่ เอ็นจิ้น Doom , Quake , GoldSrcและSourceในเอ็นจิ้นเหล่านี้ ต้นไม้ BSP ที่มีเรขาคณิตคงที่ของฉากมักถูกใช้ร่วมกับบัฟเฟอร์ Zเพื่อผสานวัตถุที่เคลื่อนที่ได้ เช่น ประตูและตัวละคร เข้ากับฉากหลังอย่างถูกต้อง แม้ว่าการแบ่งพื้นที่แบบไบนารีจะให้วิธีการจัดเก็บและเรียกข้อมูลเชิงพื้นที่เกี่ยวกับรูปหลายเหลี่ยมในฉากได้อย่างสะดวก แต่ก็ไม่ได้แก้ปัญหาการกำหนดพื้นผิวที่มองเห็นได้ต้นไม้ BSP ยังถูกนำไปใช้กับการบีบอัดภาพอีกด้วย[ 14 ]
ดูเพิ่มเติม
- ทรงหลายเหลี่ยมชาเซลล์
- ต้นไม้ kd
- อ็อกทรี
- ควอดทรี
- การจัดกลุ่มแบบลำดับชั้น (Hierarchical clustering ) เป็นอีกวิธีหนึ่งในการแบ่งข้อมูลโมเดล 3 มิติ เพื่อการเรนเดอร์ที่มีประสิทธิภาพ
- การตัดด้วยกิโยติน
เอกสารอ้างอิงเพิ่มเติม
- Naylor, B. (พฤษภาคม 1993). "การสร้างต้นไม้แบ่งพาร์ติชันที่ดี" . Graphics Interface . CiteSeerX 10.1.1.16.4432 .
- Radha, H.; Leoonardi, R.; Vetterli, M.; Naylor, B. (1991). "การแสดงภาพด้วยต้นไม้แบ่งพื้นที่ไบนารี"วารสารการสื่อสารด้วยภาพและการประมวลผลภาพ 2 ( 3): 201– 221. doi : 10.1016/1047-3203(91)90023-9 .
- Radha, HMS (1993). การนำเสนอภาพอย่างมีประสิทธิภาพโดยใช้ต้นไม้แบ่งพื้นที่แบบไบนารี (ปริญญาเอก). มหาวิทยาลัยโคลัมเบีย. OCLC 30775044 .
- Radha, HMS (1994). "การแสดงภาพที่มีประสิทธิภาพโดยใช้ต้นไม้แบ่งพื้นที่ไบนารี" การประมวลผลสัญญาณ35 (2): 174– 181. Bibcode : 1994SigPr..35..174R . doi : 10.1016/0165-1684(94)90047-7 .
- Radha, H.; Vetterli, M.; Leoonardi, R. (ธันวาคม 1996). "การบีบอัดภาพโดยใช้ต้นไม้แบ่งพื้นที่ไบนารี" . IEEE Transactions on Image Processing . 5 (12): 1610– 24. Bibcode : 1996ITIP....5.1610R . doi : 10.1109/83.544569 . PMID 18290079 .https://ui.adsabs.harvard.edu/abs/1996ITIP....5.1610R/abstract
- Winter, AS (เมษายน 1999). "การตรวจสอบการเรนเดอร์รูปหลายเหลี่ยม 3 มิติแบบเรียลไทม์โดยใช้ bsp trees". CiteSeerX 10.1.1.11.9725 .
- เดอ เบิร์ก, เอ็ม. ; แวน เครเวลด์, เอ็ม. ; โอเวอร์มาร์ส, เอ็ม. ; ชวาร์ซคอฟ, โอ. (2000). "§12: การแบ่งพื้นที่แบบไบนารี". เรขาคณิตเชิงคำนวณ (ฉบับที่ 2). สปริงเกอร์-เวอร์แลก . หน้า 251–265 . ISBN 978-3-540-65620-3.อธิบายอัลกอริทึมของจิตรกรแบบสุ่ม...
- เอริคสัน, คริสเตอร์ (2005). "8. ลำดับชั้นของต้นไม้ BSP"การตรวจจับการชนแบบเรียล ไทม์ ชุดหนังสือเทคโนโลยี 3 มิติเชิงโต้ตอบ ของมอร์แกน คอฟมันน์ มอร์แกน คอฟมันน์ หน้า 349–382 ISBN 1-55860-732-3.
ลิงก์ภายนอก
- Naylor, BF (2005). "คู่มือเกี่ยวกับต้นไม้แบ่งพื้นที่แบบไบนารี" .
- การนำเสนอต้นไม้ BSP
- การนำเสนอต้นไม้ BSP อีกครั้ง
- แอปเพล็ต Java ที่แสดงกระบวนการสร้างต้นไม้
- วิทยานิพนธ์ระดับปริญญาโทเกี่ยวกับการสร้าง BSP
- โครงสร้างต้นไม้ BSP: ทฤษฎีและการนำไปใช้
- BSP ในพื้นที่ 3 มิติ
- Graphics Gems V: พาชมโครงสร้างต้นไม้ของ BSP
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การแบ่งพื้นที่ไบนารี
ใน วิทยาการคอมพิวเตอร์ การ แบ่งพื้นที่แบบไบนารี ( BSP ) เป็นวิธี การแบ่งพื้นที่ ซึ่งแบ่ง พื้นที่แบบยุค ลิด ออก เป็นสอง เซตแบบนูน โดยใช้ ระนาบไฮเปอร์ เป็นตัวแบ่ง...
ประวัติศาสตร์
ในปี พ.ศ. 2512 Schumacker และคณะ [ 1 ] ได้ตีพิมพ์รายงานที่อธิบายว่าระนาบที่จัดวางอย่างระมัดระวังในสภาพแวดล้อมเสมือนจริงสามารถใช้เพื่อเร่งการเรียงลำดับรูปหลายเหลี่ยมได้อย่างไร เทคนิคนี้ใช้ความสอดคล้องเชิงลึก...
ภาพรวม
การแบ่งพื้นที่แบบไบนารีเป็นกระบวนการทั่วไปของการแบ่งฉากออกเป็นสองส่วนโดยใช้ ไฮเปอร์เพลน [ 13 ] ซ้ำๆ จนกว่าการแบ่งจะตรงตามข้อกำหนดอย่างน้อยหนึ่งข้อ สามารถมองได้ว่าเป็นการขยายความของโครงสร้างต้นไม้เชิงพื้นที่อื่นๆ เช่น ต้นไม้ k -d และ ควอดทรี...
รุ่น
การใช้งานหลักของต้นไม้ BSP คือการเรนเดอร์รูปหลายเหลี่ยม (ที่มีสองด้าน กล่าวคือ ไม่มี การคัดกรองด้านหลัง ) ด้วยอัลกอริทึมของจิตรกร รูปหลายเหลี่ยมแต่ละรูปจะถูกกำหนดด้วยด้านหน้าและด้านหลัง ซึ่งสามารถเลือกได้ตามอำเภอใจและมีผลต่อโครงสร้างของต้นไม้เท่านั้น...