จะแก้ไขจุดยอดเมื่อตัดได้อย่างไร?

Aug 16 2020

เมื่อเราคลิปในพื้นที่คลิปที่เป็นเนื้อเดียวกันเราต้องสร้างจุดยอดใหม่ที่จุดตัดระหว่างขอบและระนาบคลิป ดังนั้นเราจึงต้องแก้ไขไฟล์$(x , y, z , w)$ตำแหน่งของจุดยอดทั้งสองเพื่อสร้างตำแหน่งจุดยอดใหม่ ดูเหมือนจะดีและดี แต่ฉันควรทำอย่างไรเมื่อจุดยอดที่สร้างขึ้นหลังจากการแก้ไขมีค่า aw เป็น 0

มันใช้ไม่ได้เพราะการหาร w ทำให้จุดไปไม่มีที่สิ้นสุด (หารด้วยศูนย์)

ดังนั้นฉันควรตรวจสอบให้แน่ใจว่าฉันไม่เคยสร้างจุดยอดด้วย aw ของ 0 (อย่างไร?) หรือฉันควรจัดการกับ null w (อย่างไร)?

คุณอาจบอกว่าสถานการณ์นี้ไม่เคยเกิดขึ้น แต่มันจะเกิดขึ้นจริงโดยเฉพาะอย่างยิ่งเมื่อ z ของจุดยอดถูกตั้งค่าเป็น w สำหรับ skyboxes เป็นต้น ในกรณีนี้เมื่อเราตัดกับระนาบใกล้ (z = 0 ในพื้นที่คลิป) และสอดแทรกตำแหน่งเราจะลงเอยด้วย az ของ 0 แต่ยัง aw ของ 0 ...

คำตอบ

2 NathanReed Aug 30 2020 at 07:12

จุดที่ด้านหน้าของกล้องมี $w > 0$อย่างเคร่งครัดตามความหมาย ฉันจะบอกว่าถ้าการตัดจะให้คะแนนกับคุณ$w = 0$ แล้วมีบางอย่างผิดปกติ

พิจารณาระนาบคลิปซ้าย / ขวา / บน / ล่าง ไม่มีวิธีใดที่สามเหลี่ยมจะสามารถขยายจากส่วนหนึ่งของรูม่านตาที่มองเห็นได้ไปยัง$w = 0$ ระนาบกล้องหรือด้านหลังโดยไม่ต้องข้ามออกไปนอกระนาบด้านข้างที่ถูกทำลายหรือไม่ก็ระนาบใกล้ซึ่งอยู่ในระยะบวก $w_\text{near} > 0$.

คุณพูดถึง skyboxes และการตั้งค่า $z = w$ในเอาต์พุต shader จุดยอด รูปทรงดังกล่าวจะต้องข้ามระนาบด้านข้างที่ถูกทำลายก่อนจึงจะขึ้นสู่ระนาบใกล้ได้ (วิธีการอาจเป็นส่วนหนึ่งของ Skybox ได้รับใกล้พอที่จะกล้องที่จะตัดโดยเครื่องบินใกล้เท่านั้น?) ถ้าคุณกำลังอย่างถูกต้องตัดมันกับทั้งหมดของเครื่องบิน frustum ที่คุณจะต้องจบลงด้วย$w > 0$ ในจุดยอดสุดท้าย