Bagaimana cara menginterpolasi simpul saat memotong?

Aug 16 2020

Saat kita menjepitkan di ruang klip yang homogen, kita harus menghasilkan simpul baru yang terletak di persimpangan antara tepi dan bidang penjepit. Karena itu, kami harus menginterpolasi file$(x , y, z , w)$posisi kedua simpul untuk menghasilkan posisi simpul baru. Tampaknya semuanya baik-baik saja, tetapi apa yang harus saya lakukan ketika simpul yang dihasilkan setelah interpolasi memiliki aw 0?

Itu tidak berhasil karena pembagian-w membuat titik menjadi tak terhingga (pembagian dengan nol).

Jadi, haruskah saya memastikan bahwa saya tidak pernah menghasilkan simpul dengan aw 0 (bagaimana?)? Atau haruskah saya berurusan dengan null w (bagaimana?)?

Anda mungkin mengatakan bahwa situasi ini tidak pernah terjadi, tetapi itu benar-benar terjadi, terutama ketika z dari simpul diatur ke w, misalnya untuk skybox. Dalam hal ini, ketika kita menjepitkan pada bidang dekat (z = 0 dalam ruang penjepit) dan menginterpolasi posisi, kita akan berakhir dengan az 0 tetapi juga aw 0 ...

Jawaban

2 NathanReed Aug 30 2020 at 07:12

Titik di depan kamera miliki $w > 0$secara ketat, menurut definisi. Saya akan mengatakan bahwa jika kliping memberi Anda poin$w = 0$ maka ada yang tidak beres.

Pertimbangkan bidang klip kiri / kanan / atas / bawah. Tidak mungkin segitiga dapat merentang dari bagian frustum yang terlihat, ke$w = 0$ bidang kamera atau di belakangnya, tanpa juga melintasi di luar salah satu bidang samping frustum — atau bidang dekat lainnya, yang terletak pada jarak positif $w_\text{near} > 0$.

Anda menyebutkan skyboxes dan pengaturan $z = w$dalam keluaran shader vertex. Geometri seperti itu harus melintasi bidang samping frustum sebelum bisa mencapai bidang dekat. (Bagaimana bagian dari skybox bisa cukup dekat ke kamera untuk dijepitkan oleh pesawat dekat saja?) Jika Anda menjepitkannya dengan benar pada semua bidang frustum, Anda harus berakhir dengan$w > 0$ di puncak terakhir.