วิธีค้นหาเส้นชั้นความสูงสำหรับขั้นตอนวิธีกำจัดเส้นที่ซ่อนอยู่ของ Appel


10

เพื่อความสนุกสนานฉันกำลังพยายามที่จะทำให้ผู้ชมลวดกรอบสำหรับDCPU-16 ฉันเข้าใจวิธีการทำทุกอย่างยกเว้นวิธีซ่อนเส้นที่ซ่อนอยู่ในโครงลวด คำถามทั้งหมดที่นี่เพื่อให้ทุกคนคิดว่าคุณมีการเข้าถึง OpenGL โชคไม่ดีที่ฉันไม่สามารถเข้าถึงอะไรเช่นนั้นสำหรับ DCPU-16 (หรือการเร่งความเร็วฮาร์ดแวร์ใด ๆ )

ผมพบว่าคำอธิบายที่ดีเป็นธรรมของขั้นตอนวิธีการแตะบนGoogle หนังสือ อย่างไรก็ตามมีปัญหาหนึ่งที่ฉันมีปัญหาในการหา

Appel กำหนดเส้นชั้นความสูงเป็นขอบที่แบ่งปันโดยรูปหน้าด้านหน้าและรูปหลายเหลี่ยมแบบหันหน้าไปทางด้านหลังหรือไม่ใช้ร่วมกันของรูปหลายเหลี่ยมแบบหันหน้าไปทางด้านหน้าที่ไม่ได้เป็นส่วนหนึ่งของรูปหลายเหลี่ยมแบบปิด ขอบที่แบ่งปันกันโดยรูปหลายเหลี่ยมสองหน้าทำให้ไม่มีการเปลี่ยนแปลงในการมองเห็นดังนั้นจึงไม่ใช่เส้นชั้นความสูง ในรูปที่ 8.4 ขอบ AB, EF, PC, GK และ CH เป็นเส้นชั้นความสูงส่วนขอบ ED, DC และ GI ไม่ใช่

รูปที่ 8.4

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


ปรับปรุง

ฉันมีความคืบหน้าในการกำหนดเส้นชั้นความสูง ฉันพบบันทึกการบรรยายทั้งสองนี้ จากชั้นเรียน University of Buffalo ในคอมพิวเตอร์กราฟิก

ป้อนคำอธิบายรูปภาพที่นี่

พิจารณาขอบ สิ่งเหล่านี้แบ่งออกเป็นสามประเภท

  1. ขอบที่รวมเข้าด้วยกันสองใบหน้าที่มองไม่เห็นนั้นมองไม่เห็น สิ่งนี้จะถูกลบออกจากรายการและละเว้น
  2. ขอบที่รวมใบหน้าที่มองเห็นได้สองหน้าเรียกว่า 'ขอบวัสดุ' และจะต้องดำเนินการเพิ่มเติม
  3. ขอบที่เข้าร่วมกับใบหน้าที่มองเห็นได้และใบหน้าที่มองไม่เห็นเป็นกรณีพิเศษของ 'ขอบวัสดุ' และเรียกอีกอย่างว่า 'เส้นขอบ'

การใช้ข้อมูลสองชิ้นข้างต้นฉันสามารถเข้าใกล้ความสามารถในการเขียนเป็นโค้ดได้ แต่ฉันก็ยังต้องใช้เวลาอีกนาน



1
ตรวจสอบคำตอบนี้เพื่อคำนวณหารูปสามเหลี่ยมปกติ ผลิตภัณฑ์ดอทของเวกเตอร์ปกติที่มีเวกเตอร์การมองเห็นเป็นตัวกำหนดว่าสามเหลี่ยมนั้นหันหน้าหรือไม่

คำตอบ:


3

สำหรับกฎ "-facing" ที่จะถือคุณต้องตรวจสอบให้แน่ใจว่าใบหน้าทั้งหมดนั้นวางอย่างเหมาะสม ยกตัวอย่างเช่นใช้กฎมือขวานั่นหมายความว่าจุดยอดของใบหน้าควรมีหมายเลขในลักษณะที่การหมุนในทางบวกในระนาบของใบหน้าสอดคล้องกับการชี้ปกตินอกรูปทรงหลายเหลี่ยม (เข้าใจแล้วใช่ไหม) หรือมากกว่านั้นใบหน้าทุกคนต้องมีลักษณะชี้ออกไปด้านนอก

ใบหน้าที่ห้อยอยู่นั่นคือไม่ได้เป็นของรูปทรงหลายเหลี่ยมปิดที่สามารถมองเห็นว่ามีการวางแนวที่ไม่ จำกัด

ตอนนี้การคำนวณชิ้นส่วนของขอบซึ่งถูกซ่อนไว้โดยรูปหลายเหลี่ยมรูปร่างเป็นหลักสูตรหลัก ปัญหานี้อยู่ใกล้กับการตัดเซกเมนต์ของบรรทัดโดยหน้าต่างรูปหลายเหลี่ยมใน 2D ก่อนอื่นให้พิจารณาบรรทัดการสนับสนุนของส่วนของเส้นและหาจุดตัดที่มีรูปหลายเหลี่ยม โดยใช้กฎความเท่าเทียมกันคุณสามารถกำหนดชิ้นส่วนภายในและภายนอกรูปหลายเหลี่ยมได้อย่างง่ายดาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.